将 jakarta.mail 1.6.5 更新为 2.0.1

update jakarta.mail 1.6.5 to 2.0.1

我正在尝试从 JakartaMail 1.6.5 迁移到 2.0.1,当我启动我的应用程序时,我得到了

Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364)

我也试试改:

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;

但是,当我使用 Spring class 的 JavaMailSenderImpl mailSender 时,例如:

 MimeMessage message = mailSender.createMimeMessage();

它说:

Required type:
jakarta.mail.internet.MimeMessage
Provided:
javax.mail.internet.MimeMessage

我该如何解决这个问题? Spring 支持 JakartaMail 2.0.1 吗?因为 JavaMailSender 在 spring-context-support(我用的是 5.3.9 版本)

问题是 JakartaMail 2.x 切换到了新的 jakarta.mail 命名空间。因此,针对早期版本的 JakartaMail/JavaMail 构建的库将无法像他们期望的 javax.mail 命名空间那样工作。

Spring 仍然使用 javax.mail 命名空间,因此不能与 JakartaMail 2.x 结合使用。事实上,Spring 框架的当前主要是针对 com.sun.mail:javax.mail:1.6.2/javax.mail:javax.mail-api:1.6.2 编译的(参见 build.gradle)。

目前,如果您想使用Spring,您需要使用JakartaMail 1.6.7 或更早版本。据我所知,1.6.7 和 2.0.1 版本完全相同(或几乎相同),除了命名空间不同。

根据 Support for Jakarta EE 9 (annotations and interfaces in jakarta.* namespace),Spring 将切换到使用 Spring Framework 6 / Spring Boot 3 中的 jakarta.* 命名空间。