title: Sending emails through Java - javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 587;
body: <p>I'm currently working on a project that involves the creation of a .jar file. The following is to be achieved, I'm supposed to export/read the path of a friend's registry, once this is done I'm supposed to get the result back via email. The whole concept is in creating the jar file and once it's clicked I get the results through my email since I actually sent it through email.</p>
  
  <p>(I hope this makes sense)</p>
  
  <p>So first, I've combined the following code to actually read the registry and display the keys ( i got it from the popular post on stack overflow for read/write registries) so the reading process is working fine, now my problem is with the email code, </p>
  
  <p>(I'm not quite sure who the original owner to this code is but full credit goes it him)
  I'm trying to get the basic concept of this email code to work so that I can continue working on sending my jar file as an attachment and link it to my code in a way when a user clicks on the jar file, the registry results will be emailed back to me.</p>
  
  <pre><code>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.AddressException;
  import javax.mail.internet.InternetAddress;
  import javax.mail.internet.MimeMessage;
  
  public class MailCode {
  
    public static void main(String[] args) throws Exception {
  
  
       final String smtp_host = "smtp.gmail.com";
      final String smtp_username = "user@gmail.com";
      final String smtp_password = "password";
      final String smtp_connection = "TLS";  // Use 'TLS' or 'SSL' connection
  
      final String toEmail="tomail@hotmail.com";
      final String fromEmail="**@gmail.com";
  
      Properties props = new Properties();
      props.put("mail.smtp.auth", "true");
  
     if (smtp_connection.equals("TLS")) {
              props.put("mail.smtp.starttls.enable", "true");
              props.put("mail.smtp.port", "587");
      } else{
              props.put("mail.smtp.socketFactory.port", "465");
              props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
              props.put("mail.smtp.port", "465");
      }
  
      Session session = Session.getInstance(props,
        new javax.mail.Authenticator() {
              @Override
              protected PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication(smtp_username, smtp_password);
              }
        });
  
      try {
          Message msg = new MimeMessage(session);
          msg.setFrom(new InternetAddress(fromEmail, "NoReply"));
          msg.addRecipient(Message.RecipientType.TO,
                           new InternetAddress(toEmail, "Mr. Recipient"));
          msg.setSubject("Welcome To JavaMail API");
          msg.setText("JavaMail API Test - Sending email example through remote smtp server");
          Transport.send(msg);
          System.out.println("Email sent successfully...");
      } catch (AddressException e) {
          throw new RuntimeException(e);
      } catch (MessagingException e) {
          throw new RuntimeException(e);
      }
     }
   }
  </code></pre>
  
  <p>This is the error message I'm getting:</p>
  
  <pre><code>Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 587;
  nested exception is:
  java.net.SocketException: Permission denied: connect  
  </code></pre>