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

Spring Boot部署服务器后发送邮件报jakarta.mail.Provider缺失错误

解决方案

针对你遇到的java.lang.NoClassDefFoundError: jakarta/mail/Provider问题,结合本地正常、服务器报错的场景,给你几个排查方向:

  • 检查依赖打包情况
    确认你的com.sun.mail:jakarta.mail:1.6.7依赖是否被正确打包到部署包中:

    • 如果用Maven,检查依赖的<scope>是否为compile(默认值),不要设为provided——这个范围意味着依赖由服务器提供,但你的服务器显然没有这个类。
    • 解压生成的war/jar包,查看WEB-INF/lib(war包)或BOOT-INF/lib(Spring Boot jar包)目录,确认是否存在jakarta.mail-1.6.7.jar。如果缺失,检查打包配置是否排除了该依赖。
  • 排查服务器类加载冲突
    服务器(比如Tomcat、Jetty)自身的lib目录可能存在旧版本的mail相关jar,和你的依赖冲突:

    • 登录服务器,查看应用服务器的全局lib目录(如Tomcat的CATALINA_HOME/lib),如果有javax.mail.jar、jakarta.mail.jar这类旧文件,删除它们,避免类加载优先级问题。
    • 用mvn dependency:tree(Maven)或gradle dependencies(Gradle)查看项目依赖树,排查是否有其他依赖间接引入了冲突的mail版本,找到后用<exclusions>标签排除冲突依赖。
  • 确认依赖版本兼容性
    com.sun.mail:jakarta.mail:1.6.7是基于Jakarta EE 8的版本,如果你的项目或服务器运行环境是Jakarta EE 9+,会存在API包名不兼容的问题(Jakarta EE 9将javax.*迁移到jakarta.*):

    • 尝试升级依赖版本到适配Jakarta EE 9+的版本,比如com.sun.mail:jakarta.mail:2.0.1,同时确保项目的Java版本符合要求(2.x版本要求Java 8+)。
  • 调整打包配置
    如果是Spring Boot应用:

    • 确认spring-boot-maven-plugin或spring-boot-gradle-plugin配置正确,没有通过<excludes>排除mail相关依赖。
    • 若部署为war包,检查pom.xml中packaging是否设为war,且spring-boot-starter-tomcat的scope设为provided时,没有影响mail依赖的打包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:55:22