SpringBoot邮件发送报错:java.lang.ClassNotFoundException: javax.activation.FileTypeMap
SpringBoot 3.x邮件发送:解决
javax.activation.FileTypeMap找不到的问题 问题根源
你使用的Spring Boot 3.0.2基于Spring 6,已全面迁移到Jakarta EE 9+,原javax.*命名空间的API全部替换为jakarta.*。javax.activation.FileTypeMap属于旧Java EE API,在Jakarta生态中对应的是jakarta.activation.FileTypeMap,手动添加旧依赖会与Spring Boot 3的依赖体系冲突,导致类加载失败。
解决步骤
1. 引入正确的邮件依赖
直接使用Spring Boot官方的spring-boot-starter-mail starter,它会自动管理Jakarta Mail及相关依赖,无需手动添加单独的activation包:
Maven(pom.xml)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
Gradle(build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-mail'
务必移除之前手动添加的
javax.activation、jakarta.activation等单独依赖,避免依赖冲突。
2. 补全EmailConfig配置
你的配置缺少SMTP认证和加密属性,完善后才能正常发送邮件:
package com.aventix.api.configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import java.util.Properties; @Configuration public class EmailConfig { @Bean public JavaMailSender mailSender(){ JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost("smtp.gmail.com"); mailSender.setPort(587); mailSender.setUsername("你的Gmail地址"); mailSender.setPassword("你的Gmail应用密码"); // 注意:Gmail需用应用密码,不能用原账号密码 Properties props = mailSender.getJavaMailProperties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.debug", "false"); // 开启可查看邮件发送详细日志 return mailSender; } }
3. Gmail特殊配置
若使用Gmail发送邮件:
- 必须开启账号的两步验证
- 在Google账号设置中生成应用密码,用此密码替换配置中的密码
- 确保账号未限制第三方应用访问
内容的提问来源于stack exchange,提问作者Bhorah
相关产品推荐
相关产品推荐

