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

Spring Boot集成Thymeleaf发送HTML邮件显示源码问题排查

解决Spring Boot + Thymeleaf发送邮件显示纯HTML源码的问题

我帮你梳理几个最可能导致这个问题的原因,都是日常开发中容易踩的坑:

  • 未正确设置邮件内容类型为HTML
    这是最常见的诱因!当你用MimeMessageHelper构建邮件时,如果没明确告诉邮件客户端这是HTML内容,它会默认把内容当作纯文本处理,自然就会把HTML源码原封不动显示出来。
    解决方法很简单:创建MimeMessageHelper时第二个参数传true(开启多部分邮件支持,同时允许HTML内容),并且调用setText()方法时,第二个参数也传true,明确标记内容为HTML:

    MimeMessage mimeMessage = emailSender.createMimeMessage();
    // 第二个参数true支持HTML/附件,同时指定UTF-8编码避免乱码
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
    helper.setSubject("你的邮件主题");
    helper.setTo("收件人邮箱地址");
    
    // 渲染Thymeleaf模板
    Context context = new Context();
    context.setVariable("object", yourObject); // 传入模板需要的变量
    // 注意:模板文件名不要带.html后缀,默认去templates目录下找
    String htmlContent = templateEngine.process("email-template", context);
    
    // 关键:第二个参数true指定这是HTML内容
    helper.setText(htmlContent, true);
    
    emailSender.send(mimeMessage);
    
  • Thymeleaf模板路径或名称错误
    哪怕模板代码没问题,如果模板放错了位置,或者调用process()时名称写错了,Thymeleaf就没法正确解析模板,直接把原模板的源码返回给你。
    检查这两点:

    • 模板文件必须放在src/main/resources/templates目录下(Spring Boot默认的Thymeleaf模板根目录)
    • 调用templateEngine.process()时,传入的名称要和模板文件名一致(比如模板是order-notify.html,就传order-notify,不要带.html后缀)
  • 编码设置缺失导致解析异常
    少数情况下,没指定正确的编码也会让邮件客户端误判内容类型。建议创建MimeMessageHelper时显式指定UTF-8编码,避免编码问题干扰内容识别。

  • 邮件客户端的显示设置问题
    最后可以排除下客户端的问题:有些邮件客户端可能默认强制显示纯文本模式,你可以在收件端手动切换到“显示HTML”模式试试。如果切换后能正常渲染,那就是客户端设置的锅,和代码无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:40:00