问:有没有人从 SMTP 服务器通过 JavaMail 成功地向 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 标头。