title: java.net.SocketException: Software caused connection abort: recv failed java mail
body: <p><strong>UPD*</strong>
  issue seemed to be behind Windows firewall and/or antivirus problem, blocking the cport connecting, cause on Ubuntu I can connect to that port with no problem. I will investigate the cause and let you know what was blocking it. Special thanks to user <strong>Perception</strong> for helping me out!</p>
  
  <p>Getting this exception when trying to send an email using gmail test account. 
  Here is the mailing code</p>
  
  <pre><code>package Controller;
  
  import java.io.File;
  import java.util.Properties;
  
  
  import javax.mail.Message;
  import javax.mail.MessagingException;
  import javax.mail.PasswordAuthentication;
  import javax.mail.Session;
  import javax.mail.Transport;
  import javax.mail.internet.InternetAddress;
  import javax.mail.internet.MimeBodyPart;
  import javax.mail.internet.MimeMessage;
  import javax.swing.JFileChooser;
  
  public class C_New_Email {
  
      static int status;
      static File selectedFile;
      static String email = "coffeebrakeproject@gmail.com";
      static String password = "mypass"; // obviously I am using another one
  
      public static void sendMail (String toEmail, String subjectEmail, String textEmail) 
     {    
  
  
         Properties props = new Properties();
                    props.put("mail.smtp.user", email);
                    props.put("mail.smtp.host", "smtp.gmail.com");
                    props.put("mail.smtp.port", 465);
                    props.put("mail.smtp.starttls.enable","true");
                    props.put("mail.smtp.debug", "true");
                    props.put("mail.smtp.auth", "true");
                    props.put("mail.smtp.socketFactory.port", 465);
                    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                    props.put("mail.smtp.socketFactory.fallback", "false");
  
         Session session = Session.getDefaultInstance(props,
              new javax.mail.Authenticator() {
                                  @Override
                  public PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication(email, password);
                  }
              });         
        try{
           session.setDebug(true);
           // Create a default MimeMessage object.
           MimeMessage message = new MimeMessage(session);
  
           // Set From: header field of the header.
           message.setFrom(new InternetAddress(email));
  
           // Set To: header field of the header.
           message.addRecipient(Message.RecipientType.TO,
                                    new InternetAddress(toEmail));
  
           // Set Subject: header field
           message.setSubject(subjectEmail);
  
           // Now set the actual message
           message.setText(textEmail);
  
           MimeBodyPart textBodyPart = new MimeBodyPart();
           textBodyPart.setContent(message, "text/plain");
           // Send message
           Transport transport = session.getTransport("smtps");
           transport.connect ("smtp.gmail.com", 465, email, password);
           transport.sendMessage(message, message.getAllRecipients());
           transport.close();  
           System.out.println("Sent message successfully....");
        }catch (MessagingException mex) {
           mex.printStackTrace();
        }
     }
  
      public static int returnStatus () {
          return status;
      }
  
      public static File returnFile () {
          return selectedFile;
      }
  
      public static void openFileChooser () {
          JFileChooser Attachments = new JFileChooser(".");
          status = Attachments.showDialog(Attachments, null);
  
          if (status == JFileChooser.APPROVE_OPTION) {
              selectedFile = Attachments.getSelectedFile();
          }
          else if (status == JFileChooser.CANCEL_OPTION) {
              Attachments.setVisible(false);
              selectedFile = null;
          }
  
      }
  }
  </code></pre>
  
  <p>here is the full error output</p>
  
  <pre><code>run:
  Email clicked
  DEBUG: setDebug: JavaMail version 1.4.7
  DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle]
  DEBUG SMTP: useEhlo true, useAuth true
  DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
  javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
    nested exception is:
      java.net.SocketException: Software caused connection abort: recv failed
      at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
      at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
      at javax.mail.Service.connect(Service.java:295)
      at Controller.C_New_Email.sendMail(C_New_Email.java:72)
      at View.V_New_Email.send_buttonActionPerformed(V_New_Email.java:158)
      at View.V_New_Email.access$000(V_New_Email.java:16)
      at View.V_New_Email$1.actionPerformed(V_New_Email.java:62)
      at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
      at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
      at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
      at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
      at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
      at java.awt.Component.processMouseEvent(Component.java:6505)
      at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
      at java.awt.Component.processEvent(Component.java:6270)
      at java.awt.Container.processEvent(Container.java:2229)
      at java.awt.Component.dispatchEventImpl(Component.java:4861)
      at java.awt.Container.dispatchEventImpl(Container.java:2287)
      at java.awt.Component.dispatchEvent(Component.java:4687)
      at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
      at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
      at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
      at java.awt.Container.dispatchEventImpl(Container.java:2273)
      at java.awt.Window.dispatchEventImpl(Window.java:2719)
      at java.awt.Component.dispatchEvent(Component.java:4687)
      at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
      at java.awt.EventQueue.access$200(EventQueue.java:103)
      at java.awt.EventQueue$3.run(EventQueue.java:688)
      at java.awt.EventQueue$3.run(EventQueue.java:686)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
      at java.awt.EventQueue$4.run(EventQueue.java:702)
      at java.awt.EventQueue$4.run(EventQueue.java:700)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
      at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
      at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
  Caused by: java.net.SocketException: Software caused connection abort: recv failed
      at java.net.SocketInputStream.socketRead0(Native Method)
      at java.net.SocketInputStream.read(SocketInputStream.java:150)
      at java.net.SocketInputStream.read(SocketInputStream.java:121)
      at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
      at sun.security.ssl.InputRecord.read(InputRecord.java:480)
      at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
      at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
      at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
      at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
      at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:211)
      at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
      ... 42 more
  </code></pre>
  
  <p>I have tried to google the issue with the similar problems
  <a href="https://stackoverflow.com/questions/8247119/java-net-socketexception-software-caused-connection-abort-socket-write-error">java.net.SocketException: Software caused connection abort: socket write error</a></p>
  
  <p>But didn't get the idea how to fix mine anyway. Any tips?</p>
  
  <p>Updated</p>
  
  <p>if I change the port to 587 it fails to authenticate and gives me a plain text error</p>
  
  <pre><code>Email clicked
  DEBUG: setDebug: JavaMail version 1.4.7
  DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle]
  DEBUG SMTP: useEhlo true, useAuth false
  DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL true
  javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
    nested exception is:
      javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
      at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
      at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
      at javax.mail.Service.connect(Service.java:295)
      at Controller.C_New_Email.sendMail(C_New_Email.java:72)
      at View.V_New_Email.send_buttonActionPerformed(V_New_Email.java:158)
      at View.V_New_Email.access$000(V_New_Email.java:16)
      at View.V_New_Email$1.actionPerformed(V_New_Email.java:62)
      at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
      at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
      at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
      at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
      at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
      at java.awt.Component.processMouseEvent(Component.java:6505)
      at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
      at java.awt.Component.processEvent(Component.java:6270)
      at java.awt.Container.processEvent(Container.java:2229)
      at java.awt.Component.dispatchEventImpl(Component.java:4861)
      at java.awt.Container.dispatchEventImpl(Container.java:2287)
      at java.awt.Component.dispatchEvent(Component.java:4687)
      at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
      at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
      at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
      at java.awt.Container.dispatchEventImpl(Container.java:2273)
      at java.awt.Window.dispatchEventImpl(Window.java:2719)
      at java.awt.Component.dispatchEvent(Component.java:4687)
      at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
      at java.awt.EventQueue.access$200(EventQueue.java:103)
      at java.awt.EventQueue$3.run(EventQueue.java:688)
      at java.awt.EventQueue$3.run(EventQueue.java:686)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
      at java.awt.EventQueue$4.run(EventQueue.java:702)
      at java.awt.EventQueue$4.run(EventQueue.java:700)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
      at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
      at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
  Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
      at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:671)
      at sun.security.ssl.InputRecord.read(InputRecord.java:504)
      at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
      at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
      at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
      at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
      at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
      at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
      ... 42 more
  </code></pre>