升级Jakarta Mail 1.6.5至2.0.1配合Spring 5.3.9出现报错如何解决
问题解决指南
版本适配说明
Spring 5.3.9 版本不支持Jakarta Mail 2.0.1。
Spring Framework 5.x全版本均基于Java EE 8规范开发,其中spring-context-support包内的JavaMailSenderImpl实现类默认依赖javax.mail命名空间的旧版JavaMail API,返回的MimeMessage是javax.mail.internet.MimeMessage类型,和Jakarta Mail 2.0+使用的jakarta.mail命名空间的同名类完全不兼容,这就是你遇到类型不匹配报错的根本原因。
Spring从6.0版本开始才全面迁移到Jakarta EE 9+规范,原生支持jakarta.*命名空间的各类API,包括Jakarta Mail 2.x。
解决方案
你可以根据自己的项目情况选择以下任意一种方案:
- 方案一:保留Spring 5.3.9版本,回退JavaMail依赖
放弃升级到Jakarta Mail 2.0.1,换回1.6.x版本的JavaMail(也就是升级前的版本),同时把所有代码里的jakarta.mail开头的import语句改回javax.mail开头即可。 - 方案二:保留Jakarta Mail 2.0.1版本,升级Spring到6.0+
将项目内所有Spring相关依赖(包括spring-core、spring-context、spring-context-support等)统一升级到6.0或更高版本,Spring 6.x原生支持Jakarta Mail 2.x,JavaMailSenderImpl.createMimeMessage()返回的就是jakarta.mail.internet.MimeMessage类型,不会再出现类型不匹配问题。
内容的提问来源于stack exchange,提问作者Mançaux Pierre-Alexandre
相关产品推荐
相关产品推荐

