使用Office365发送javamail

18

我在尝试通过Office365使用javax.mail (1.4.4)发送邮件时,遇到了SMTP设置方面的问题,因此我想在这里发布属性以供其他人参考。

4个回答

24
请使用以下Office365 SMTP详细信息:
private static Properties props;  
private static Session session;   
static {      
  props = new Properties();
  props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.port", "587");
  props.put("mail.smtp.host", "m.outlook.com");
  props.put("mail.smtp.auth", "true");        
  session = Session.getInstance(props, new Authenticator() {          
      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication("office365 email address",
                  "office365 password");          
      }       
  });

}

1
我面临的问题是我的线程在发送邮件之前被卡住了,我尝试了许多来自互联网的解决方案,但没有一个有效,我也没有收到任何异常。我无法发送邮件,如果您能分享您的知识,那将非常有帮助.. :) 谢谢 - Bilbo Baggins
2
对我来说,只有在将 587 更改为 "587" 后才能正常运行。否则,JavaMail 将尝试通过端口 25 连接。 - Glorfindel
如果这个答案中的代码使用setProperty(String, String),就不会遇到@Glorfindel描述的问题,这样会更好。此外,如果您在调用connect(server, user, password)之后使用Transport实例上的transport.sendMessage(...),则不需要使用Authenticator。 - JBert
@JBert:我们如何创建抽象类Transport的实例?我们需要创建一个新的子类吗?我在smtp.office365.com(未知服务器)遇到了问题,并且我想将连接和身份验证与发送分开,以进行调试。因此,您提出调用connect()的建议对我很有帮助。谢谢! - drvlas
@Glorfindel 非常感谢!这解决了我的线程卡住的问题。这到底是怎么发生的? - Dordoka Maisu
显示剩余2条评论

11

使用spring-boot,你只需要将以下内容添加到你的application.properties文件中:

spring.mail.host = smtp.office365.com
spring.mail.username = mathieu.pousse@headquarter.com
spring.mail.password = s3cr3t
spring.mail.port = 587
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.starttls.enable = true

4
一个可工作的代码示例:
Email email = new SimpleEmail();

email.setHostName("smtp.office365.com");
email.setSmtpPort(587);
email.setAuthenticator(new DefaultAuthenticator("a@b.com", "****"));
email.setStartTLSEnabled(true);
try {
    email.setFrom("a@b.com");
    email.setSubject("Job Failure");
    email.setDebug(true);
    email.setMsg("This is a test mail ... :-)" );
    email.addTo("a@y.com");
    email.send();
} catch (EmailException e) {
    e.printStackTrace();
}

2
你可能想要指定这个使用 commons-email - JBert

0

我在你的代码中唯一注意到的错误是不正确的主机名

javaMailProperties.setProperty("mail.smtp.from", "abc@c.com");
    javaMailProperties.setProperty("mail.smtp.user",  "abc@c.com");
    javaMailProperties.setProperty("mail.smtp.password","Password");
    javaMailProperties.setProperty("mail.smtp.host", "smtp.office365.com");
    javaMailProperties.setProperty("mail.smtp.port", "587");
    javaMailProperties.setProperty("mail.smtp.auth", "true");
    javaMailProperties.setProperty("mail.smtp.starttls.enable", "true");

更改主机,一切都会好起来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接