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

Spring Boot集成JavaMail引入dsn依赖后读取投递失败邮件报ClassNotFoundException

问题根源

你的Spring Boot版本属于2.x系列,默认使用javax.*命名空间的Java EE规范API,而高版本dsn依赖默认引入了jakarta.*命名空间的Activation API,和Spring Boot自带的javax.activation实现产生了包名冲突,导致类加载失败。

解决方案

步骤1:调整DSN依赖配置

修改dsn依赖,排除其自带的Jakarta Activation相关传递依赖,保持和Spring Boot starter-mail中的依赖版本兼容:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>dsn</artifactId>
    <version>1.6.7</version>
    <exclusions>
        <exclusion>
            <groupId>jakarta.activation</groupId>
            <artifactId>jakarta.activation-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.activation</groupId>
            <artifactId>jakarta.activation</artifactId>
        </exclusion>
    </exclusions>
</dependency>

删除你额外添加的所有jakarta.activation相关依赖,Spring Boot的spring-boot-starter-mail已经自带了兼容的Activation实现,不需要额外引入。

步骤2:手动注册DSN内容处理器(可选,部分场景需要)

如果调整依赖后仍报错,可在项目启动类中添加DSN类型的内容处理器注册逻辑,避免类加载器找不到对应处理器:

import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class YourApplication {

    public static void main(String[] args) {
        // 注册DSN邮件类型的内容处理器
        MailcapCommandMap mailcap = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
        mailcap.addMailcap("message/delivery-status;; x-java-content-handler=com.sun.mail.dsn.DeliveryStatus");
        mailcap.addMailcap("message/disposition-notification;; x-java-content-handler=com.sun.mail.dsn.DispositionNotification");
        mailcap.addMailcap("multipart/report;; x-java-content-handler=com.sun.mail.dsn.MultipartReport");
        CommandMap.setDefaultCommandMap(mailcap);
        
        SpringApplication.run(YourApplication.class, args);
    }
}

步骤3:排查DevTools类加载问题

你的报错堆栈中出现了Spring Boot DevTools的RestartClassLoader,它的双类加载器机制可能会导致类加载冲突,可先在application.properties中添加配置禁用重启测试:

spring.devtools.restart.enabled=false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:02