Spring JavaMailSenderImpl javax.mail.NoSuchProviderException:smtp

Spring JavaMailSenderImpl javax.mail.NoSuchProviderException:smtp,spring,smtp,jakarta-mail,Spring,Smtp,Jakarta Mail,我有一个非常大的项目,有很多依赖项,在尝试发送邮件时遇到以下异常: javax.mail.NoSuchProviderException: smtp 我知道代码是有效的,因为它是在其他项目中使用的库的一部分。有人知道什么会导致这种异常发生吗?我已经浏览了所有的jar,其中唯一包含“javax.mail”的是“mail-1.4.4-SNAPSHOT.jar” 是否有某个文件/类注册了“smtp”协议,并且它可能发生在我的类路径中的其他地方 我解决这个问题的方法是从类路径中删除邮件jar。在类路径

我有一个非常大的项目,有很多依赖项,在尝试发送邮件时遇到以下异常:

javax.mail.NoSuchProviderException: smtp
我知道代码是有效的,因为它是在其他项目中使用的库的一部分。有人知道什么会导致这种异常发生吗?我已经浏览了所有的jar,其中唯一包含“javax.mail”的是“mail-1.4.4-SNAPSHOT.jar”


是否有某个文件/类注册了“smtp”协议,并且它可能发生在我的类路径中的其他地方

我解决这个问题的方法是从类路径中删除邮件jar。在类路径的某个地方存在另一个mail.jar实例,我还没有找到它。如果其他人遇到此问题,可在此处找到有关故障排除的其他信息:


我有这个问题。将smtp.jar放在类路径中解决了这个问题。

当我们将jboss从4.x升级到6.x时,我遇到了同样的问题

这里的问题是将classpath设置为更多的mail.jar文件(默认服务器将从它的common/lib文件夹中获取mail.jar,如果它在那里可用的话)。 为了确认它正在使用哪个jar文件,下面的语句是有用的

System.out.println(getClass().getResource(“/javax/mail/Address.class”)


如果它使用的是另一个您不期望的jar文件。。将classpath设置为您正在使用的路径。从上面打印的位置删除jar文件。

这个问题已经问了很久了,但仍然值得回答:

发生的情况是,您的邮件服务正在使用SMTP(通常,它甚至被视为默认使用的协议)协议发送邮件。无论您使用什么具体类作为邮件服务(可能取决于您使用的是JavaEE、Spring还是其他东西),它最终都会使用javamail API中的类。在此API中,为了建立与邮件服务器的连接,将创建javax.mail.Session的实例,并且此对象将动态加载为要使用的协议提供支持的类

加载所需类时,如果找不到该类,将捕获ClassNotFoundException并作为javax.mail.NoSuchProviderException重新抛出,并显示一条消息,指示缺少协议支持

这种情况下的解决方案是将smtp.jar添加到类路径中。 对于基于Maven的项目,只需添加以下依赖项

    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>smtp</artifactId>
        <version>1.4.5</version>
    </dependency>

com.sun.mail
smtp
1.4.5

当类路径中的“mailapi.jar”文件版本不正确时,也会发生这种情况

我最近升级了一个项目以使用PayPal的soap API,PayPal的发行版包含一个mailapi.jar文件,该文件与我目前在项目中使用的文件不同,并导致我的应用程序在发送邮件时失败


所以对我来说,我只需要回到我以前的mailapi.jar,我很好。

我现在就有了这个问题。问题是同一类路径中有两个javax.mail.jar。

这就是我遇到同样问题的原因。谢谢你的指针,我检查了很多次库,才发现它现在是PayPals。添加SMTP.jar刚才为我解决了这个问题。