title: SMTP send mail is not working for office365
body: <p>Here is a peculiar problem. The intention is to send a mail via SMTP for office365.</p>
  
  <p>I have been able to consistently send mail from my local laptop. </p>
  
  <p>But when deployed on our server (behind a firewall), it does not succeed. <strong>Note:</strong> The port 587 for <code>smtp.office365.com</code> is accessible and confirmed on the server. Here are the properties via which it successfully works from my local computer.</p>
  
  <pre><code>Properties props = new Properties();
  props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.connectiontimeout", MAIL_TIMEOUT);
  props.put("mail.smtp.timeout", MAIL_TIMEOUT);
  props.put("mail.debug", true);
  this.session = Session.getInstance(props);
  session.setDebug(true);
  
  Transport transport  = session.getTransport();
  transport.connect("smtp.office365.com", 587, email, pass);
  </code></pre>
  
  <p>But fails on server. Here are the server debug logs:</p>
  
  <pre><code>DEBUG: setDebug: JavaMail version 1.6.2
  DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
  DEBUG SMTP: useEhlo true, useAuth false
  DEBUG SMTP: trying to connect to host "smtp.office365.com", port 587, isSSL false
  220 PN1PR0101CA0017.outlook.office365.com Microsoft ESMTP MAIL Service ready at Fri, 28 Jun 2019 06:39:41 +0000
  DEBUG SMTP: connected to host "smtp.office365.com", port: 587
  EHLO appqa
  250-PN1PR0101CA0017.outlook.office365.com Hello [182.73.191.100]
  250-SIZE 157286400
  250-PIPELINING
  250-DSN
  250-ENHANCEDSTATUSCODES
  250-STARTTLS
  250-8BITMIME
  250-BINARYMIME
  250-CHUNKING
  250 SMTPUTF8
  DEBUG SMTP: Found extension "SIZE", arg "157286400"
  DEBUG SMTP: Found extension "PIPELINING", arg ""
  DEBUG SMTP: Found extension "DSN", arg ""
  DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
  DEBUG SMTP: Found extension "STARTTLS", arg ""
  DEBUG SMTP: Found extension "8BITMIME", arg ""
  DEBUG SMTP: Found extension "BINARYMIME", arg ""
  DEBUG SMTP: Found extension "CHUNKING", arg ""
  DEBUG SMTP: Found extension "SMTPUTF8", arg ""
  STARTTLS
  220 2.0.0 SMTP server ready
  Exception in thread "main" javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
  java.net.SocketTimeoutException: Read timed out
  at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2155)
  at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:752)
  at javax.mail.Service.connect(Service.java:366)
  at com.company.app.MailReader.getTransport(MailReader.java:269)
  at io.vavr.control.Try.of(Try.java:75)
  at com.company.app.MailReader.&lt;init&gt;(MailReader.java:59)
  at com.company.services.MailService.getNewMailReader(MailService.java:82)
  at com.company.services.MailService.start(MailService.java:46)
  at com.company.Main.main(Main.java:34)
  Caused by: java.net.SocketTimeoutException: Read timed out
  at java.net.SocketInputStream.socketRead0(Native Method)
  at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
  at java.net.SocketInputStream.read(SocketInputStream.java:171)
  at java.net.SocketInputStream.read(SocketInputStream.java:141)
  at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
  at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
  at sun.security.ssl.InputRecord.read(InputRecord.java:529)
  at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
  at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
  at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
  at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
  at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:626)
  at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:553)
  at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2150)
  ... 8 more
  </code></pre>