Spring JavaMailSenderImpl javax.mail.NoSuchProviderException:smtp

wun*_*tee 4 spring smtp jakarta-mail

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

javax.mail.NoSuchProviderException: smtp
Run Code Online (Sandbox Code Playgroud)

我知道代码可以工作,因为它是在其他项目中使用的库的一部分.有谁知道会导致这种异常的原因是什么?我查看了所有的jar,唯一包含'javax.mail'的是'mail-1.4.4-SNAPSHOT.jar'.

是否有一些文件/类注册了'smtp'协议,它可能发生在我的类路径中的其他地方?

kyi*_*yiu 6

已经有一段时间了,因为这个问题已被提出,但它仍然值得回答:

发生的事情是您的邮件服务使用SMTP(通常,它甚至被认为是使用的默认协议)协议来发送邮件.无论你使用什么具体的类作为邮件服务(可能取决于你是使用Java EE,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>
Run Code Online (Sandbox Code Playgroud)