问:有没有人从 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 标头。