在 javax.mail 中发送邮件,无需身份验证
Posted
技术标签:
【中文标题】在 javax.mail 中发送邮件,无需身份验证【英文标题】:Send mail in javax.mail without authentication 【发布时间】:2013-10-07 14:04:01 【问题描述】:我正在使用 javax.mail 在 Java 中发送邮件。 现在我的项目概念的一部分发生了变化,我必须在没有身份验证的情况下发送邮件。我将不得不更改我的 createSession() 方法:
private void createSession()
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", server);
properties.put("mail.smtp.port", port);
session = Session.getInstance(properties, new javax.mail.Authenticator()
protected PasswordAuthentication getPasswordAuthentication()
return new PasswordAuthentication(username, password);
);
很明显,我应该将mail.smtp.auth
更改为false
,但是我还应该更改什么?
【问题讨论】:
不要将user
和password
添加到property
并将null
传递给user
和password
到connect
【参考方案1】:
private void createSession()
properties.put("mail.smtp.auth",false);
properties.put("mail.smtp.starttls.enable","true");
properties.put("mail.smtp.port","587");
properties.put("mail.smtp.host","smtp.gmail.com");
properties.put("mail.smtp.username","username(emailid")");
properties.put("mail.smtp.password","password(mail password)");
Session session=Session.getDefaultInstance(properties,null);
【讨论】:
请解释你的答案。【参考方案2】:private void createSession()
properties.put("mail.smtp.auth", "false");
//Put below to false, if no https is needed
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", server);
properties.put("mail.smtp.port", port);
session = Session.getInstance(properties);
我想,这就够了。
【讨论】:
当然,这取决于您的服务器被配置为允许您发送邮件而无需先进行身份验证。这在 Intranet 中可能工作得很好,否则就是垃圾邮件的邀请。 还是说Authentication Required. Please contact support
身份验证是一种服务器策略。如果服务器需要身份验证 - 你必须提供它!
put properties.put("mail.smtp.starttls.enable", "false");也一样。在此更改之后它适用于此。
如果更改手机日期,这不起作用,任何人都可以帮助我。以上是关于在 javax.mail 中发送邮件,无需身份验证的主要内容,如果未能解决你的问题,请参考以下文章
通过java api验证SMTP服务器身份验证(包括AUTH的Healthcheck)