使用 Office365 发送 javamail

Posted

技术标签:

【中文标题】使用 Office365 发送 javamail【英文标题】:Send javamail using Office365 【发布时间】:2013-01-04 01:18:34 【问题描述】:

我在配置使用javax.mail (1.4.4) 通过 Office365 发送邮件的 SMTP 设置时遇到问题,所以我想我会在这里为其他人发布这些属性。

【问题讨论】:

【参考方案1】:

使用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");          
             
  );


【讨论】:

我面临的问题是我的线程在发送邮件之前被卡住了,我尝试了许多来自互联网的解决方案,但都没有奏效,我也没有任何异常。我无法发送邮件,如果您分享您的知识将会很有帮助.. :) 谢谢 对我来说,这仅在我将 587 更改为 "587" 后才有效。否则,JavaMail 会尝试通过端口 25 进行连接。 如果此答案中的代码使用setProperty(String, String) 会更好,这样您就不会遇到@Glorfindel 描述的问题。此外,如果您在首先调用connect(server, user, password)Transport 实例上使用transport.sendMessage(...),则不需要验证器。 我也面临线程卡住问题:调试 SMTP:尝试连接到主机“smtp.office365.com”,端口 587,isSSL false @JBert :我们如何创建抽象类 Transport 的实例传输?我们应该创建一个新的子类吗?我对 smtp.office365.com(未知服务器)有疑问,我想将连接和身份验证与发送分开 - 作为调试。所以你调用 connect() 的提议对我来说很有趣。谢谢!【参考方案2】:

使用 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

【讨论】:

【参考方案3】:

一个工作代码示例:

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();

【讨论】:

您可能希望指定它使用commons-email。【参考方案4】:

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

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");

换个主机就好了。

【讨论】:

以上是关于使用 Office365 发送 javamail的主要内容,如果未能解决你的问题,请参考以下文章

Django 在 Pythonanywhere 上使用 Office365 发送电子邮件

无法通过 Hostgator 中的 Office365 使用 PHP (phpmailer) 发送邮件。如何解决这个问题?

Python 使用office365邮箱

Python 使用office365邮箱

使用带有 Laravel 的 Outlook / Office365 发送电子邮件 - 无法在 SMTP 服务器上进行身份验证

通过 Exchange Online (Office 365) 使用 System.Net.Mail 发送 SMTP 电子邮件