title: Java Mail : No provider for smtp
body: <p>I am using JavaMail to do a simple application that sends an email when it finds some files in a directory. I managed to get it worked from Eclipse. I Run the application and it sent the email with no errors.</p>
  
  <p>But, when I created the jar, and executed it, it fails in the email sending part.
  It gives this exception:</p>
  
  <pre><code>javax.mail.NoSuchProviderException: No provider for smtp
   at javax.mail.Session.getProvider(Session.java:460)
   at javax.mail.Session.getTransport(Session.java:655)
   at javax.mail.Session.getTransport(Session.java:636)
   at main.java.util.MailManager.sendMail(MailManager.java:69)
   at main.java.DownloadsMail.composeAndSendMail(DownloadsMail.java:16)
   at main.java.DownloadsController.checkDownloads(DownloadsController.java:51)
   at main.java.MainDownloadsController.run(MainDownloadsController.java:26)
   at java.lang.Thread.run(Unknown Source)
  </code></pre>
  
  <p>I am using the library in this method:</p>
  
  <pre><code>public static boolean sendMail(String subject, String text) {
  
      noExceptionsThrown = true;
      try {
          loadProperties();
      } catch (IOException e1) {
          System.out.println("Problem encountered while loading properties");
          e1.printStackTrace();
          noExceptionsThrown = false;
      }
  
      Properties mailProps = new Properties();
  
      String host = "mail.smtp.host";
      mailProps.setProperty(host, connectionProps.getProperty(host));
  
      String tls = "mail.smtp.starttls.enable";
      mailProps.setProperty(tls, connectionProps.getProperty(tls));
  
      String port = "mail.smtp.port";
      mailProps.setProperty(port, connectionProps.getProperty(port));
  
      String user = "mail.smtp.user";
      mailProps.setProperty(user, connectionProps.getProperty(user));
  
      String auth = "mail.smtp.auth";
      mailProps.setProperty(auth, connectionProps.getProperty(auth));
  
      Session session = Session.getDefaultInstance(mailProps);
      //session.setDebug(true);
  
      MimeMessage message = new MimeMessage(session);
  
      try {
          message.setFrom(new InternetAddress(messageProps.getProperty("from")));
  
          message.addRecipient(Message.RecipientType.TO, new InternetAddress(
                  messageProps.getProperty("to")));
  
          message.setSubject(subject);
          message.setText(text);
          Transport t = session.getTransport("smtp");
          try {
              t.connect(connectionProps.getProperty("user"), passwordProps
                      .getProperty("password"));
              t.sendMessage(message, message.getAllRecipients());
          } catch (Exception e) {
              System.out.println("Error encountered while sending the email");
              e.printStackTrace();
              noExceptionsThrown = false;
          } finally {
              t.close();
          }
      } catch (Exception e) {
          System.out.println("Error encountered while creating the message");
          e.printStackTrace();
          noExceptionsThrown = false;
      }
      return noExceptionsThrown;
  }
  </code></pre>
  
  <p>I am loading these values from properties files.</p>
  
  <pre><code>mail.smtp.host=smtp.gmail.com
  
  mail.smtp.starttls.enable=true
  
  mail.smtp.port=587
  
  mail.smtp.auth=true
  </code></pre>
  
  <p>I have tried to change the host by ssl://smtp.gmail.com, the port by 465 (just for trying something different), but it doesn't work either. Anyway, if it works fine from Eclipse with the original parameters, I guess that the values are correct, but the problem is creating the jar. I don't know very much about the possible results or changes when creating a jar. 
  Could the JavaMail libraries someway go wrong when the jar is created?</p>
  
  <p>Do you have any ideas?</p>