Outlook Email Setup for JavaMail API

23,137

Solution 1

Delete the SocketFactory parameters like this, and enjoy sending emails.

props.put("mail.smtp.host", "smtp-mail.outlook.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true"); 

I didn't find this parameters necessary on the documentation.

https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html

Solution 2

Please retry without these props:

props.put("mail.smtp.socketFactory.port", "587");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "true");

I do not have to set them for office365. outlook.com should be similiar

Solution 3

Try this code it is worked for me

    Properties props = null;
    if (props == null) {
        props = new Properties();
        props.put("mail.smtp.auth", true);
        props.put("mail.smtp.starttls.enable", true);
        props.put("mail.smtp.host", "smtp.live.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.user", User);
        props.put("mail.smtp.pwd", Pwd);
    }
    Session session = Session.getInstance(props, null);
    session.setDebug(true);
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(User));
    if (Objet != null) {
        msg.setSubject(Objet);

    }
    msg.setText(Content);
    msg.setRecipient(Message.RecipientType.TO, new InternetAddress(emailId));
    Transport transport = session.getTransport("smtp");
    transport.connect("smtp.live.com", 587, User, Pwd);
    transport.sendMessage(msg, msg.getAllRecipients());
    System.out.println("Mail sent successfully at " + emailId);
    transport.close();
}
Share:
23,137
Lance Leroy
Author by

Lance Leroy

Updated on August 13, 2020

Comments

  • Lance Leroy
    Lance Leroy almost 4 years

    I having headache in setting up the outlook mail to JavaMail, I had followed the instructions from here and here

    Properties props = new Properties();
              props.put("mail.smtp.user", d_email);
              props.put("mail.smtp.host", "smtp-mail.outlook.com");
              props.put("mail.smtp.port", "587");
              props.put("mail.smtp.starttls.enable","true");
              props.put("mail.smtp.auth", "true");
              props.put("mail.smtp.socketFactory.port", "587");
              props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
              props.put("mail.smtp.socketFactory.fallback", "true");
    
              try
              {
              Authenticator auth = new javax.mail.Authenticator() {
                  protected PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication(d_email, d_password);
                  }
                };
    
              Session session = Session.getInstance(props, auth);
    
              MimeMessage msg = new MimeMessage(session);
              msg.setText("Hey, this is the testing email.");
              msg.setSubject("Testing");
              msg.setFrom(new InternetAddress(d_email));
              msg.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
              Transport.send(msg);
    
              }catch (MessagingException mex) {
                 mex.printStackTrace();
              }
    

    And I keep getting the errors:

    javax.mail.MessagingException: Could not connect to SMTP host: smtp-mail.outlook.com, port: 587;
      nested exception is:
        javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
        at javax.mail.Service.connect(Service.java:317)
        at javax.mail.Service.connect(Service.java:176)
        at javax.mail.Service.connect(Service.java:125)
    

    I had searching around google and stackoverflow, I guess it is a MUST to use SSL instead of TLS because outlook doesn't accept TLS or else the connection will be close by remote host, but the solutions I found from Internet didn't work out. What am I missed in order to send my testing mail successfully?

    I am total new to mail API, any advises or helps will be much appreciated. Thanks.

    EDIT: I have a email account from microsoft I registered similar to '[email protected]'

  • Christoph-Tobias Schenke
    Christoph-Tobias Schenke almost 8 years
    damn. 12 seconds ;-)
  • Lance Leroy
    Lance Leroy almost 8 years
    please refer my question comment, thanks for your effort! appreciated
  • Lance Leroy
    Lance Leroy almost 8 years
    please refer my question comment, thanks for your effort! appreciated