Java邮件:没有smtp的提供程序

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

我正在使用JavaMail做一个简单的应用程序,当它在目录中找到一些文件时,会发送一封电子邮件。我设法从Eclipse中获得了成功。我运行了应用程序,它发送的电子邮件没有错误

但是,当我创建jar并执行它时,它在电子邮件发送部分失败了。 它给出了这一例外:

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'