Java邮件:没有smtp的提供程序
我正在使用JavaMail做一个简单的应用程序,当它在目录中找到一些文件时,会发送一封电子邮件。我设法从Eclipse中获得了成功。我运行了应用程序,它发送的电子邮件没有错误 但是,当我创建jar并执行它时,它在电子邮件发送部分失败了。 它给出了这一例外:Java邮件:没有smtp的提供程序,java,email,jakarta-mail,Java,Email,Jakarta Mail,我正在使用JavaMail做一个简单的应用程序,当它在目录中找到一些文件时,会发送一封电子邮件。我设法从Eclipse中获得了成功。我运行了应用程序,它发送的电子邮件没有错误 但是,当我创建jar并执行它时,它在电子邮件发送部分失败了。 它给出了这一例外: javax.mail.NoSuchProviderException: No provider for smtp at javax.mail.Session.getProvider(Session.java:460) at javax.m
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)
我使用此方法使用库:
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;
}
我正在从属性文件加载这些值
mail.smtp.host=smtp.gmail.com
mail.smtp.starttls.enable=true
mail.smtp.port=587
mail.smtp.auth=true
我已尝试通过以下方式更改主机ssl://smtp.gmail.com,端口号为465(只是为了尝试不同的东西),但也不起作用。无论如何,如果它在Eclipse中使用原始参数运行良好,我想这些值是正确的,但问题是创建jar。我对创建jar时可能出现的结果或更改不太了解。
jar创建时,JavaMail库是否会出错
你有什么想法吗?支持的jar:mail.jar和activation.jar不在你的类路径上。当您构建jar时,需要在类路径中包含这些内容。我也遇到了同样的问题 您可以通过在Eclipse中创建可运行的JAR文件并使用库处理选项来修复它。在制作JAR时,选择第二个,上面写着“将所需库打包到生成的JAR中”
我设法修复了这个错误,这是由于坏库造成的。我试着使用从maven下载的
javax.mail
jar,结果证明是不完整的。因此,我再次搜索了javamail
,得到了一个(单击发布链接)。这次它是一个zip文件。您需要添加smtp.jar文件,我也遇到了相同的错误。在一些google搜索和检查一些旧项目后,我发现我在我的库中遗漏了这个特定的jar,我将这个jar添加到库中并发现问题已得到修复。我也有同样的错误,从Oracle直接更新jar修复了它。对于使用Gradle的用户:您可以按如下方式获得所有必需的jar(1.5.5是最新版本):
非常感谢你这么快回答。我刚刚尝试了你告诉我的方法,我不知道我是否用了正确的方法:在Eclipse内部,在项目的属性中,我在构建路径中,在库中看到了:activation.jar、mailapi.jar、smtp.jar。。。有。为了订购和出口,我检查了这些罐子。以前没有检查过。我再次导出了jar,但错误仍然存在。我可能做错什么了吗?也许我不应该在Eclipse上这样做?谢谢你,迈克。我对eclipse不熟悉。但这肯定与类路径有关。下一步可以更改运行jar的方式。在运行jar时包括这两个jar的路径。因此,在我的脑海中,像这样的东西:jar-cp./full/path/to/activation.jar:./full/path/to/mail.jar-jar-yourjarname.jar谢谢你,迈克。我试试这个。
compile 'com.sun.mail:javax.mail:1.5.5'