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

Thymeleaf开发的Web应用发邮件未用UTF-8乱码,求问题排查思路

Thymeleaf Web应用邮件发送乱码问题求助

我正在使用Thymeleaf开发一款Web应用,其中一项功能为应用内完成特定变更后,向测试用户发送通知邮件。但用户收到的邮件内容出现乱码,经确认是邮件未使用UTF-8编码导致,目前尚未定位到问题根源,希望帮忙找出遗漏的配置点。

补充说明

  • 当前使用的IDE为IntelliJ
  • 邮件发送相关代码如下:
import email.MailSender;

MailSender sender = MailSenderProvider.getMailSender();

sender.sendMail(studentEmail,"Du har fått en ny handledare","Hej! "+name+ " <br>" + "Du har fått en ny handledare "+ " <br>"+
                        "logga in på: "+  "<a href='vfusocionom.hig.se'>" + "Vfusocionom.hig.se " + "</a>"+ "<br>"  +"för att se extra detaljer"  );
  • 乱码现象如下:
    邮件乱码截图

排查方案

按优先级从高到低逐一核对以下配置:

1. 邮件发送客户端编码配置

确认你使用的MailSender实现是否显式指定UTF-8编码:

  • 若使用Spring封装的JavaMailSender,在配置文件中添加:
spring.mail.default-encoding=UTF-8
  • 若使用自定义邮件发送实现,构造MimeMessage时必须显式设置编码:
MimeMessage message = mailSender.createMimeMessage();
// 第二个参数为true表示支持多部分内容,第三个参数强制指定UTF-8编码
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
// 后续依次设置收件人、主题、内容即可

2. 邮件内容类型配置

如果发送的是HTML格式邮件,设置内容时需要指定完整的content type:text/html;charset=UTF-8,不可仅设置为text/html。

3. 项目全局编码配置

确认IntelliJ项目编码配置正确,避免硬编码的特殊字符在编译阶段就出现编码错误:

  1. 打开 File > Settings > Editor > File Encodings
  2. 将Global Encoding、Project Encoding、properties文件默认编码全部设置为UTF-8
  3. 勾选Transparent native-to-ascii conversion选项

4. Thymeleaf模板编码配置(若使用模板渲染邮件内容)

如果后续改用Thymeleaf渲染邮件模板,需要单独配置邮件模板解析器的编码:

@Bean
public SpringResourceTemplateResolver emailTemplateResolver() {
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
    resolver.setPrefix("classpath:/templates/email/");
    resolver.setSuffix(".html");
    resolver.setTemplateMode(TemplateMode.HTML);
    resolver.setCharacterEncoding("UTF-8");
    resolver.setCacheable(false);
    return resolver;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:03