pablof
pablof

Reputation: 335

Java Mail : No provider for smtp

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?

Upvotes: 11

Views: 34161

Answers (6)

stefan.m
stefan.m

Reputation: 2012

For those using Gradle: you can get all required Jars as follows (1.5.5 is the latest version):

    compile 'com.sun.mail:javax.mail:1.5.5'

Upvotes: 1

Maaz
Maaz

Reputation: 41

I had the same problem.

You can fix it by making the Runnable JAR file in Eclipse and using library handling options. Select the second one when making your JAR, the one that says "Package required libraries into generated JAR".

package required libraries

Upvotes: 4

Massi
Massi

Reputation: 107

I had the same error, updating the jar from Oracle directly fixed it.

Upvotes: 1

Vishal Vijayan
Vishal Vijayan

Reputation: 318

you need to add the smtp.jar file, I also got stuck with the same error after some google search and checking on some older projects I found that I missed this particular jar in my library, I added this jar to the library and found issue fixed.

Upvotes: 3

Jarekczek
Jarekczek

Reputation: 7866

I managed to fix this error, which was due to a bad library. I tried to use javax.mail jar downloaded from maven, which turned out to be incomplete. So I searched once more for javamail and got one directly from Oracle (click Release link). This time it is a zip file.

Upvotes: -1

Mike
Mike

Reputation: 8963

The supporting jars: mail.jar and activation.jar are not on your classpath. When you build your jar, you need to include these on your classpath.

Upvotes: 10

Related Questions