【发布时间】:2013-10-25 11:14:15
【问题描述】:
问题: 有没有人通过 JavaMail 从 SMTP 服务器成功地向 hotmail 帐户发送电子邮件?如果是这样,您能否提供有效的代码?
我可以使用我的 JavaMail 代码向 gmail 和 yahoo 帐户发送电子邮件,但我无法向 hotmail 帐户发送任何电子邮件。如果我使用我的电话或其他电子邮件客户端并使用与我的 JavaMail 代码相同的 SMTP 服务器,那么我确实可以向 hotmail 帐户发送电子邮件。这让我相信 JavaMail 遗漏了 hotmail 似乎认为很重要的标志。使用 Apache Commons JavaMail 实现会产生相同的结果。
try{
Email email = new SimpleEmail();
email.setSmtpPort(Integer.parseInt(port));
email.setAuthenticator(new DefaultAuthenticator(from, MyUtilities.getSystemPWD(from)));
email.setDebug(true);
email.setHostName(host);
email.setFrom(from);
email.setSubject(subject);
email.setMsg("test");
email.addTo(to);
email.setStartTLSRequired(true);
email.send();
} catch(Exception ex){
MyLogger.log("MyUtilities.sendEmail: Messaging error",ex);
Logger.getLogger(MyUtilities.class.getName()).log(Level.SEVERE, "MyUtilities.sendEmail: Messaging error", ex);
}
答案: 下面有一个公认的答案,但问题的根本原因是 Hotmail 需要额外的身份验证标头(SPF 和 DKIM)来证明您的发件人地址的域名与 SMTP 服务器相关联。使用中间的 SMTP 服务器(如 sendgrid)可以解决问题,因为它们会自动为您解决问题……但要付出一定的代价。
您也可以尝试自己添加所需的 SPF 和 DKIM 标头。
【问题讨论】:
-
为什么不能给hotmail发邮件?
-
谁说不可能?
-
您是否尝试比较手机中的电子邮件和 Java 代码之间的电子邮件标头/源代码?我假设您手机中的一个是 HTML,而您的 java 代码中的一个是纯文本。不是说这是问题所在,但这是一个线索。
标签: java email smtp jakarta-mail