Spring Boot 3发送邮件报错:找不到MailcapRegistryProvider实现
异常原因分析
这个错误的核心原因是缺少Jakarta Activation组件的实现类:
- Spring Boot 3全面迁移到Jakarta EE规范,原Java EE的
javax.*命名空间全部替换为jakarta.* MailcapRegistryProvider是Jakarta Activation的核心SPI接口,负责邮件MIME类型的注册与解析- 虽然
spring-boot-starter-mail依赖了Jakarta Mail,但部分场景下会出现依赖传递缺失,或者项目中存在旧版本javax.activation依赖冲突,导致无法找到该Provider的实现
解决办法
1. 添加Jakarta Activation实现依赖
在pom.xml中直接引入Activation的实现包(API包已通过spring-boot-starter-mail间接引入):
<dependency> <groupId>com.sun.activation</groupId> <artifactId>jakarta.activation</artifactId> </dependency>
2. 排查并排除依赖冲突
执行Maven命令查看依赖树:
mvn dependency:tree
如果输出中存在javax.activation:activation这类旧版本依赖,需要在对应的依赖中排除它,避免与Jakarta版本冲突:
<dependency> <groupId>[冲突依赖的groupId]</groupId> <artifactId>[冲突依赖的artifactId]</artifactId> <exclusions> <exclusion> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> </exclusion> </exclusions> </dependency>
3. 确认依赖版本一致性
确保项目中所有与邮件、Activation相关的依赖都使用Jakarta版本(即groupId为jakarta.*或com.sun.activation),禁止混合使用javax.*和jakarta.*的依赖包。
你的邮件发送代码本身没有问题,修复依赖后即可正常运行。
内容的提问来源于stack exchange,提问作者Jana
相关产品推荐
相关产品推荐

