Spring Boot3.3.0+Java17下jakarta.mail.StreamProvider缺失问题求助
解决Spring Boot 3.3.0 + Java 17下jakarta.mail的StreamProvider缺失问题
问题场景
在Spring Boot 3.3.0、Java 17环境中,使用jakarta.mail创建MimeMessage时触发异常。
错误信息
Caused by: java.lang.IllegalStateException: No provider of jakarta.mail.util.StreamProvider was found at jakarta.mail.util.FactoryFinder.find(FactoryFinder.java:61) at jakarta.mail.util.StreamProvider.provider(StreamProvider.java:199) at jakarta.mail.Session.<init>(Session.java:257) at jakarta.mail.Session.getDefaultInstance(Session.java:383) at jakarta.mail.Session.getDefaultInstance(Session.java:423)
相关代码
import jakarta.mail.internet.MimeMessage; MimeMessage mimeMessage = new MimeMessage(Session.getDefaultInstance(new Properties()));
当前依赖配置
<dependency> <groupId>jakarta.mail</groupId> <artifactId>jakarta.mail-api</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.0.1</version> </dependency>
解决方案
异常核心原因是jakarta.mail-api与实现类版本不匹配:jakarta.mail-api 2.1.x新增了StreamProvider接口,但你使用的com.sun.mail:jakarta.mail 2.0.1版本并未实现该接口,导致找不到提供者。
方法1:统一依赖版本
将com.sun.mail:jakarta.mail的版本升级至与jakarta.mail-api一致的2.1.3:
<dependency> <groupId>jakarta.mail</groupId> <artifactId>jakarta.mail-api</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.1.3</version> <scope>runtime</scope> <!-- 实现类仅需运行时依赖,可选配置 --> </dependency>
方法2:仅引入实现类依赖
com.sun.mail:jakarta.mail已经包含了jakarta.mail-api的依赖,直接只引入实现类即可避免版本冲突:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.1.3</version> </dependency>
方法3:利用Spring Boot版本管理(推荐)
Spring Boot 3.3.0的依赖管理中已内置兼容的jakarta.mail版本,直接引入依赖不指定版本即可自动匹配:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> </dependency>
内容的提问来源于stack exchange,提问作者MA1
相关产品推荐
相关产品推荐

