Spring Boot 集成 JavaMail 发送邮件
Spring Boot 集成 JavaMail 发送邮件
1. 环境准备
1.1 依赖配置
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
1.2 邮箱服务选择
支持主流邮箱服务:
- QQ邮箱(SMTP服务器:smtp.qq.com)
- 163邮箱(SMTP服务器:smtp.163.com)
- Gmail(SMTP服务器:smtp.gmail.com)
⚠️ 注意:需开启邮箱的SMTP服务权限,并获取授权码(非登录密码)
2. 配置详解
2.1 配置文件设置
spring:mail:host: smtp.qq.com # SMTP服务器地址port: 465 # SMTP端口(SSL加密)username: your@qq.com # 发件人邮箱password: authorization-code # 授权码properties:mail:smtp:ssl: true # 启用SSL加密auth: true # 启用身份验证starttls.enable: true # 启用STARTTLS
2.2 授权码获取流程
- 登录邮箱控制台
- 进入「设置」-「账户」-「POP3/IMAP/SMTP服务」
- 开启SMTP服务
- 获取授权码(6位数字)
- 将授权码替换配置文件中的密码字段
3. 发送邮件实现
3.1 接口定义
public interface MailService {void sendSimpleMail(String to, String subject, String content);
}
3.2 服务实现
@Service
public class MailServiceImpl implements MailService {@Autowiredprivate JavaMailSender javaMailSender;@Overridepublic void sendSimpleMail(String to, String subject, String content) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom("your@qq.com"); // 发件人邮箱message.setTo(to); // 收件人邮箱message.setSubject(subject); // 邮件主题message.setText(content); // 邮件内容javaMailSender.send(message);}
}
3.3 测试调用
@SpringBootTest
public class MailTest {@Autowiredprivate MailService mailService;@Testpublic void testSendMail() {mailService.sendSimpleMail("recipient@126.com", "测试邮件", "这是一封通过Spring Boot发送的测试邮件");}
}
4. 进阶功能实现
4.1 带附件邮件
public void sendAttachmentsMail(String to, String subject, String content, String[] attachments) {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom("your@qq.com");helper.setTo(to);helper.setSubject(subject);helper.setText(content, true); // true表示HTML格式for (String attachment : attachments) {helper.addAttachment(new File(attachment));}javaMailSender.send(message);
}
4.2 带图片邮件
public void sendInlineImageMail(String to, String subject, String content, String imagePath) {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom("your@qq.com");helper.setTo(to);helper.setSubject(subject);helper.setText(content, true);helper.addInline("logo", new File(imagePath)); // 图片ID和路径javaMailSender.send(message);
}
5. 常见问题解决方案
5.1 连接异常处理
- 检查SMTP服务器地址和端口是否正确
- 确认SSL/TLS配置是否匹配服务器要求
- 验证授权码是否有效(建议每3个月更新)
- 检查防火墙是否阻止了465/587端口
5.2 邮件被标记为垃圾邮件
- 使用发件人昵称(如:
小甜甜<your@qq.com>
) - 避免使用"请查收"等营销性措辞
- 确保邮件内容与收件人相关
- 添加邮件签名(包含退订链接)
5.3 邮件发送失败
- 检查邮箱配额是否已满
- 查看邮箱服务器日志(如QQ邮箱的"收件箱"->“垃圾箱”)
- 使用邮件调试工具(如MailHog)
- 增加重试机制和异常处理
6. 安全建议
- 密码管理:使用加密存储授权码,避免明文存储
- 环境隔离:开发/测试环境与生产环境使用不同邮箱账户
- 访问控制:限制邮件服务接口的访问权限
- 日志审计:记录邮件发送日志,定期检查异常行为
- 敏感信息:避免在邮件内容中传输敏感数据
7. 补充说明
概念 | 说明 |
---|---|
SMTP | 简单邮件传输协议,用于发送邮件 |
SSL/TLS | 加密通信协议,保障数据传输安全 |
MIME | 多用途互联网邮件扩展,支持附件和图片 |
JavaMailSender | Spring Boot 提供的邮件发送抽象接口 |
SimpleMailMessage | 简单邮件消息类,用于发送基础邮件 |
📌 注意:实际生产环境建议使用邮件网关服务(如Amazon SES、阿里云邮件服务)替代直接使用邮箱SMTP,以获得更好的可靠性和安全性。