Problem with Java Mail : No provider for smtp

Posted by user359198 on Stack Overflow See other posts from Stack Overflow or by user359198
Published on 2010-06-05T12:55:23Z Indexed on 2010/06/05 13:02 UTC
Read the original article Hit count: 539

Filed under:
|

Hello all.

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. But, when I created the jar, and executed it, it fails in the email sending part. It gives this exception.

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)

I am using the library in this method:

    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;


 }

I am loading these values from properties files.

mail.smtp.host=smtp.gmail.com

mail.smtp.starttls.enable=true

mail.smtp.port=587

mail.smtp.auth=true

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?

Do you have any ideas?

Thank you very much for your help.

© Stack Overflow or respective owner

Related posts about java

Related posts about mail