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

如何在HTML中传递值?注册时用户值填充邮件模板发送问题

解决HTML邮件模板动态填充变量的问题

看起来你已经找对了方向——用Thymeleaf作为模板引擎来渲染带动态变量的HTML邮件,不过代码里有几个小细节需要调整,才能让变量正确填充到模板里。下面是具体的修复和优化建议:

1. 修正HTML模板的Thymeleaf表达式语法

你的模板里存在表达式嵌套错误,Thymeleaf中不需要在${}内部再套一层${}。推荐两种更规范的写法:

写法一:字符串拼接

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
<title th:remove="all">Template for HTML email</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
<p th:text="'Hello Dear, ' + ${name}"> Hello Dear John Doe</p> 
<p th:text="'Welcome.Please visit, http://aa.ru/activate-account/' + ${activationCode}"> Welcome. Please visit http://aa.ru/activate-account/%s </p> 
<p> Thanks </p> 
</body> 
</html>

写法二:更简洁的文本内联表达式

用|包裹内容可以直接内嵌变量,可读性更强:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
<title th:remove="all">Template for HTML email</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
<p th:text="|Hello Dear, ${name}|"> Hello Dear John Doe</p> 
<p th:text="|Welcome.Please visit, http://aa.ru/activate-account/${activationCode}|"> Welcome. Please visit http://aa.ru/activate-account/%s </p> 
<p> Thanks </p> 
</body> 
</html>

2. 完善TemplateEngine的初始化配置

你的Java代码里创建了TemplateEngine实例,但缺少将模板解析器绑定到引擎的关键步骤,这会导致模板无法被正确加载解析。补充后的完整配置如下:

// 初始化并配置模板解析器
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setResolvablePatterns(Collections.singleton("html/*"));
templateResolver.setPrefix("/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML); // 明确设置HTML模板模式
templateResolver.setCharacterEncoding("UTF-8"); // 统一编码避免乱码

// 将解析器绑定到TemplateEngine
TemplateEngine springTemplateEngine = new TemplateEngine();
springTemplateEngine.setTemplateResolver(templateResolver);

// 后续的变量填充和模板渲染逻辑
Context context = new Context(); 
context.setVariable("name",user.getUsername()); 
context.setVariable("activationCode",user.getActivationCode()); 
String text = springTemplateEngine.process("email-template.html",context); 

// 邮件发送逻辑
if (!org.springframework.util.StringUtils.isEmpty(user.getEmail())) { 
    mailSenderService.send(user.getEmail(), "Activation code", text); 
}

注意:确保你的模板文件路径正确——如果模板放在src/main/resources/templates/email-template.html,当前的前缀后缀配置是完全适配的。

3. 优化邮件发送的编码与格式

为了避免邮件内容乱码,建议在mailSenderService内部明确指定HTML格式和编码(以Spring的JavaMailSender为例):

public void send(String to, String subject, String htmlContent) {
    MimeMessage message = javaMailSender.createMimeMessage();
    try {
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(htmlContent, true); // 第二个参数true表示发送HTML格式邮件
        javaMailSender.send(message);
    } catch (MessagingException e) {
        // 处理发送异常
        e.printStackTrace();
    }
}

验证效果

完成上述调整后,当传入name=Samir、activationCode=blabla时,你收到的邮件内容会和预期完全一致:

Hello Dear, Samir
Welcome.Please visit, http://aa.ru/activate-account/blabla
Thanks


内容的提问来源于stack exchange,提问作者Самир Шахмурадлы

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:14:35