You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至Jakarta Mail遇StreamProvider找不到异常求助(非Spring Boot)

解决Jakarta Mail发送邮件时的Not provider of jakarta.mail.util.StreamProvider异常

问题根源

这个异常是因为运行时缺少jakarta.mail.util.StreamProvider的具体实现,或是依赖版本不匹配、冲突导致的。你当前的依赖仅引入了API包,缺少对应实现类库的支持。

具体解决步骤

  1. 调整依赖结构,补充实现包

    • 移除单独的jakarta.mail-2.1.3.jar,Angus Mail是Jakarta Mail的官方实现,已包含API和实现逻辑,同时引入两者会导致冲突。
    • 添加angus-mail-activation-2.0.3.jar(与你使用的Angus Mail版本保持一致),该包提供Jakarta Activation的实现,同时包含StreamProvider的具体实现类。

    调整后的classpath依赖如下:

    <classpathentry kind="lib" path="/home/astump/src/codex/Java/asWeb/web/WEB-INF/lib/angus-mail-2.0.3.jar"/>
    <classpathentry kind="lib" path="/home/astump/src/codex/Java/asWeb/web/WEB-INF/lib/angus-mail-activation-2.0.3.jar"/>
    <classpathentry kind="lib" path="/home/astump/src/codex/Java/asWeb/web/WEB-INF/lib/jakarta.jakartaee-api-10.0.0.jar"/>
    
  2. 清理冲突依赖

    • 检查项目中是否存在旧的javax.mail相关jar包(如mail.jar、javax.mail-api.jar),若有必须删除,避免与Jakarta Mail的包发生类路径冲突。
    • 确保没有其他版本的Jakarta Mail/Activation API包混入项目,jakarta.jakartaee-api-10.0.0.jar作为规范API包,与Angus Mail实现兼容,无需额外添加其他API包。
  3. 保持导入包的正确性
    继续使用jakarta.mail.*和jakarta.activation.*的导入路径,不要切换到com.eclipse.angus.mail.*。Angus Mail是Jakarta Mail的底层实现,业务代码应基于Jakarta规范API编写,直接引用实现类会增加代码耦合性。

  4. 验证Gmail发送配置
    确保邮件发送配置符合Gmail要求:

    • SMTP服务器使用smtp.gmail.com,端口选择587(TLS)或465(SSL)
    • 若账户开启两步验证,需使用应用专用密码登录,而非普通账户密码
    • 若未开启两步验证,需允许账户访问低安全性应用(推荐使用应用专用密码更安全)

验证操作

修改依赖后,清理项目编译目录(如target/classes),重新编译部署到Tomcat 10,再测试邮件发送功能。

内容的提问来源于stack exchange,提问作者user3260912

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:56:11