Spring Boot 中用 JavaMailSender 发送邮件需配置 SMTP(如 QQ 邮箱 host=smtp.qq.com、port=587、password 为授权码)、注入 Bean 后调用 send();纯文本用 SimpleMailMessage,HTML 或附件需 MimeMessageHelper;注意安全配置、异步处理与模板渲染。

在 Spring Boot 中用 JavaMailSender 发送邮件,核心是配置好 SMTP 服务、注入发送器、调用 API 构建并发送消息。整个过程不复杂,但细节容易出错,比如授权码误用密码、端口与加密方式不匹配、中文乱码或附件路径异常。
基础依赖和配置
项目需引入 spring-boot-starter-mail:
- Maven 中添加依赖即可,无需额外引入 JavaMail API
- 配置项写在
application.yml或application.properties中,关键字段包括 host、port、username、password 和加密参数 - 注意:password 必须是邮箱开启 SMTP 后生成的授权码(如 QQ 邮箱的 16 位字符串),不是登录密码
- 不同邮箱服务商对应不同 host 和 port:
• QQ 邮箱:smtp.qq.com,推荐端口 587(STARTTLS)或 465(SSL)
• 163 邮箱:smtp.163.com,端口 25 或 465
• Gmail:smtp.gmail.com,需启用两步验证并生成应用专用密码,端口 587
• 阿里云企业邮箱:smtp.mxhichina.com,端口 25 或 465
发送纯文本邮件
直接使用 SimpleMailMessage 最快捷:
- 注入
JavaMailSenderBean(Spring Boot 自动配置好) - 创建
SimpleMailMessage实例,设置 from、to、subject、text - 调用
mailSender.send()即可发送 - 若收件人多个,
setTo(String[])或setTo(List<String>)均可
发送 HTML 邮件或带附件邮件
需改用 MimeMessage 和 MimeMessageHelper:
立即学习“Java免费学习笔记(深入)”;
- 通过
mailSender.createMimeMessage()创建 MimeMessage - 用
MimeMessageHelper设置是否为 multipart(附件/HTML 必须设为 true) - HTML 内容用
setText(htmlContent, true),第二个参数设为true表示是 HTML - 添加附件:调用
addAttachment(filename, fileResource),支持FileSystemResource、ClassPathResource等 - 内联图片(如 logo)可用
addInline()并在 HTML 中用cid:xxx引用
安全与最佳实践
生产环境务必注意以下几点:
- 敏感配置(如 password)不要硬编码,应通过环境变量或配置中心管理,例如
spring.mail.password=${MAIL_PASSWORD} - 开启
debug: true可在控制台查看 SMTP 交互日志,便于排查 535(认证失败)、554(被拒发)等错误 - 发送耗时操作建议加
@Async异步处理,避免阻塞主请求线程 - 批量发送时,避免在循环中反复 new MimeMessage;可复用 helper 或拆分任务并发执行
- 模板类邮件推荐结合 Thymeleaf,用
templateEngine.process()渲染 HTML 字符串再传入 MimeMessageHelper


















