jakarta mail - Office365 JavaMail error



我有一个Java类,可以完美地用Gmail帐户发送电子邮件。但是,我使用了推荐的SMTP设置,当我尝试使用Office365帐户发送电子邮件时出现错误。返回的错误如下:

异常

javax.servlet.ServletException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587;
  nested exception is:
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
下面是我的代码:

public class GmailBean {
  public static final String SERVIDOR_SMTP = "smtp.office365.com";
  public static final int PORTA_SERVIDOR_SMTP = 587;
  private static final String CONTA_PADRAO = "xxx@xxx.com";
  private static final String SENHA_CONTA_PADRAO = "xxx";

  private String de;
  private String para;
  private String assunto;
  private String mensagem;
  public void enviarEmail() throws MessagingException {
    FacesContext context = FacesContext.getCurrentInstance();
    AutenticaUsuario autenticaUsuario = new AutenticaUsuario(GmailBean.CONTA_PADRAO, GmailBean.SENHA_CONTA_PADRAO);
    Session session = Session.getInstance(this.configuracaoEmail(), autenticaUsuario);
    // try{
    Transport envio = null;
    MimeMessage email = new MimeMessage(session);
    email.setRecipient(Message.RecipientType.TO, new InternetAddress(this.para));
    email.setFrom(new InternetAddress(this.de));
    email.setSubject(this.assunto);
    email.setContent(this.mensagem, "text/plain");
    email.setSentDate(new Date());
    envio = session.getTransport("smtp");
    envio.connect(GmailBean.SERVIDOR_SMTP, GmailBean.CONTA_PADRAO, GmailBean.SENHA_CONTA_PADRAO);
    email.saveChanges();
    envio.sendMessage(email, email.getAllRecipients());
    envio.close();
    context.addMessage(null, new FacesMessage("Mensagem enviada com sucesso!"));
    /* }
     catch(AddressException ex)
     { Logger logger = Logger.getAnonymousLogger();
     FacesMessage msg = new FacesMessage("Erro ao enviar mensagem "+ ex.getMessage());
     logger.info("Erro ao enviar mensagem _____________"+ ex.getMessage());
     }
     catch(MessagingException ex)
     {
     Logger logger = Logger.getAnonymousLogger();
     FacesMessage msg = new FacesMessage("Erro ao enviar mensagem "+ ex.getMessage());
     logger.info("Erro ao enviar mensagem _____________"+ ex.getMessage());

     }*/
  }
  public Properties configuracaoEmail() {
    Properties config = new Properties();
    config.put("mail.smtp.auth", "true");
    config.put("mail.transport.protocol", "smtp");
    config.put("mail.smtp.starttls.enabled", "true");
    config.put("mail.smtp.host", SERVIDOR_SMTP);
    config.put("mail.user", GmailBean.CONTA_PADRAO);
    config.put("mail.smtp.port", PORTA_SERVIDOR_SMTP);
    config.put("mail.smtp.socketFactory.port", PORTA_SERVIDOR_SMTP);
    config.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    config.put("mail.smtp.socketFactory.fallback", "false");
    return config;
  }
  // (Getters and setters... )
  class AutenticaUsuario extends Authenticator {
    private String usuario;
    private String senha;
    public AutenticaUsuario(String usuario, String senha) {
     this.usuario = usuario;
      this.senha = senha;
    }
    public PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(this.usuario, this.senha);
    }
  }

修复所有这些常见错误,它应该工作。

通过更改主机名,outlook.com的JavaMail FAQ条目应该也适用于Office365。