spring boot中javamailsender配置不生效主因是spring.mail.enabled未设为true、必要属性缺失、授权码误用、自定义bean覆盖自动配置、html邮件未设ishtml=true及字符集、thymeleaf模板路径与编码错误、云服务器端口限制及邮箱客户端兼容性问题。

Spring Boot中JavaMailSender配置不生效的常见原因
配了application.yml却发不出邮件,大概率是没触发自动配置或被其他Bean覆盖。Spring Boot 2.4+ 默认禁用spring.mail.host等属性的自动绑定,必须显式启用spring.mail.enabled=true,否则JavaMailSender根本不会初始化。
-
spring.mail.host、spring.mail.port、spring.mail.username、spring.mail.password必须全部非空,缺一个就静默失败 - 使用QQ邮箱等第三方服务时,
spring.mail.password不是登录密码,而是SMTP授权码,且需在邮箱后台开启SMTP服务 - 若自定义了
@Bean JavaMailSender,会覆盖Spring Boot的自动配置;想保留自动配置就别写这个Bean,改用@Autowired注入 - 日志级别调成
DEBUG,看是否有Creating JavaMailSender instance或Failed to connect类提示
发送HTML邮件时MimeMessageHelper的正确用法
直接拼接字符串塞HTML内容进去,容易乱码、样式丢失、图片不显示——核心问题是没设isHtml=true且没指定字符集。Spring封装的MimeMessageHelper必须显式声明HTML类型,否则默认当纯文本处理。
- 创建助手时务必传
true:new MimeMessageHelper(message, true, "UTF-8") - 设置正文用
setHtml(true)方法,不是setText(..., "text/html"),后者不生效 - 内联图片需用
addInline()并匹配cid:引用,外部CSS建议内联,避免被邮箱客户端拦截 - 模板里变量用Thymeleaf语法(如
${name})没问题,但渲染前要确保TemplateEngine已配置好StringTemplateResolver并设templateMode=HTML
Thymeleaf生成HTML邮件模板的路径与编码陷阱
模板文件找不到、中文变问号、CSS样式全丢——基本都卡在资源定位和字符集上。Thymeleaf默认从classpath:/templates/找,但邮件模板通常不在这个路径下,且读取时没强制UTF-8会导致乱码。
- 模板路径用
classpath:mail/templates/welcome.html,不要用相对路径或file:协议 - 在
TemplateResolver里明确设characterEncoding = "UTF-8",否则Windows系统下极易乱码 - 避免在模板里写
<meta charset="gbk">锛岄偖绠卞











