Java Mail : No provider for smtp
I am using JavaMail to do a simple application that sends an email when it f开发者_如何转开发inds 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?
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.
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".
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.
I had the same error, updating the jar from Oracle directly fixed it.
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'
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.
精彩评论