title: Could not connect to SMTP host: smtp.gmail.com, port: 587; nested exception is: java.net.ConnectException: Connection timed out: connect
body: <p>Here is the code of the application.  I have been trying to run this using eclipse IDE. I also added all the required java mail jar files namely
  <code>dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar,mail.jar</code>. 
  But it gives the following error <code>Could not connect to SMTP host: smtp.gmail.com, port: 587</code>.</p>
  
  <p>There's no firewall blocking access because a reply is received on pinging smtp.gmail.com.
  I have even tried it this way :</p>
  
  <ul>
  <li>First sign into the Gmail account in a browser on the device where you are setting up/using your client</li>
  <li>Go here and enable access for "less secure" apps: <a href="https://www.google.com/settings/security/lesssecureapps" rel="noreferrer">https://www.google.com/settings/security/lesssecureapps</a></li>
  <li>Then go here: <a href="https://accounts.google.com/b/0/DisplayUnlockCaptcha" rel="noreferrer">https://accounts.google.com/b/0/DisplayUnlockCaptcha</a> and click Continue. </li>
  <li>Then straightaway go back to your client and try again.</li>
  </ul>
  
  <blockquote>
    <p>javax.mail.MessagingException: Could not connect to SMTP host:
    smtp.gmail.com, port: 587;
          nested exception is:
          java.net.ConnectException: Connection timed out: connect
          at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
          at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
          at javax.mail.Service.connect(Service.java:317)
          at javax.mail.Service.connect(Service.java:176)
          at javax.mail.Service.connect(Service.java:125)
          at javax.mail.Transport.send0(Transport.java:194)
          at javax.mail.Transport.send(Transport.java:124)
          at PlainTextEmailSender.sendPlainTextEmail(PlainTextEmailSender.java:50)
          at PlainTextEmailSender.main(PlainTextEmailSender.java:73)
        Caused by: java.net.ConnectException: Connection timed out: connect
          at java.net.DualStackPlainSocketImpl.connect0(Native Method)
          at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
          at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
          at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
          at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
          at java.net.PlainSocketImpl.connect(Unknown Source)
          at java.net.SocksSocketImpl.connect(Unknown Source)
          at java.net.Socket.connect(Unknown Source)
          at java.net.Socket.connect(Unknown Source)
          at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
          at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
          at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)</p>
  </blockquote>
  
  <pre><code>    package net.codejava.mail;
  
      import java.util.Date;
      import java.util.Properties;
  
      import javax.mail.Authenticator;
      import javax.mail.Message;
      import javax.mail.MessagingException;
      import javax.mail.PasswordAuthentication;
      import javax.mail.Session;
      import javax.mail.Transport;
      import javax.mail.internet.AddressException;
      import javax.mail.internet.InternetAddress;
      import javax.mail.internet.MimeMessage;
  
      public class PlainTextEmailSender {
  
          public void sendPlainTextEmail(String host, String port,
                  final String userName, final String password, String toAddress,
                  String subject, String message) throws AddressException,
                  MessagingException {
  
              // sets SMTP server properties
              Properties properties = new Properties();
              properties.put("mail.smtp.host", host);
              properties.put("mail.smtp.port", port);
              properties.put("mail.smtp.auth", "true");
              properties.put("mail.smtp.starttls.enable", "true");
  
              // creates a new session with an authenticator
              Authenticator auth = new Authenticator() {
                  public PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication(userName, password);
                  }
              };
  
              Session session = Session.getInstance(properties, auth);
  
              // creates a new e-mail message
              Message msg = new MimeMessage(session);
  
              msg.setFrom(new InternetAddress(userName));
              InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
              msg.setRecipients(Message.RecipientType.TO, toAddresses);
              msg.setSubject(subject);
              msg.setSentDate(new Date());
              // set plain text message
              msg.setText(message);
  
              // sends the e-mail
              Transport.send(msg);
  
          }
  
          /**
           * Test the send e-mail method
           *
           */
          public static void main(String[] args) {
              // SMTP server information
              String host = "smtp.gmail.com";
              String port = "587";
              String mailFrom = "user_name";
              String password = "password";
  
              // outgoing message information
              String mailTo = "email_address";
              String subject = "Hello my friend";
              String message = "Hi guy, Hope you are doing well. Duke.";
  
              PlainTextEmailSender mailer = new PlainTextEmailSender();
  
              try {
                  mailer.sendPlainTextEmail(host, port, mailFrom, password, mailTo,
                          subject, message);
                  System.out.println("Email sent.");
              } catch (Exception ex) {
                  System.out.println("Failed to sent email.");
                  ex.printStackTrace();
              }
          }
      }
  </code></pre>