如何使用 Thymeleaf 处理 TEXT 电子邮件模板?
How to process TXT e-mail template with Thymeleaf?
我正在尝试使用 Thymeleaf 从 Spring 应用程序发送 plain text
电子邮件。
这是我的电子邮件服务:
@Override
public void sendPasswordToken(Token token) throws ServiceException {
Assert.notNull(token);
try {
Locale locale = Locale.getDefault();
final Context ctx = new Context(locale);
ctx.setVariable("url", url(token));
// Prepare message using a Spring helper
final MimeMessage mimeMessage = mailSender.createMimeMessage();
final MimeMessageHelper message = new MimeMessageHelper(
mimeMessage, false, SpringMailConfig.EMAIL_TEMPLATE_ENCODING
);
message.setSubject("Token");
message.setTo(token.getUser().getUsername());
final String content = this.textTemplateEngine.process("text/token", ctx);
message.setText(content, false);
mailSender.send(mimeMessage);
} catch (Exception e) {
throw new ServiceException("Token has not been sent", e);
}
}
电子邮件已发送并送达邮箱。
这是我的 plain text
电子邮件模板:
Token url: ${url}
但是在发送的邮箱中 url
变量没有被它的值替换。为什么?
当我使用 html
经典 HTML Thymeleaf 语法时,变量被替换:
<span th:text="${url}"></span>
电子邮件文本模板的正确语法是什么?
使用这样的 HTML 模板,它将生成纯文本。
<html xmlns:th="http://www.thymeleaf.org" th:inline="text" th:remove="tag">
Token url: [[${url}]]
</html>
换一种方式,仍然使用html可能是这样
<span th:text="Token url:" th:remove="tag"></span><span th:text="${url}" th:remove="tag"></span>
您正在寻找的是生产 plain text
,因此百里香叶会 return 为您生产。
您也可以在纯文本模式下使用 Thymeleaf,如本例所示:
Dear [(${customer.name})],
This is the list of our products:
[# th:each="p : ${products}"]
- [(${p.name})]. Price: [(${#numbers.formatdecimal(p.price,1,2)})] EUR/kg
[/]
Thanks,
The Thymeleaf Shop
这意味着您可以拥有一个 text-file,里面只有这个:
Token url: [(${url})]
在此处查看这些功能的完整文档:
https://github.com/thymeleaf/thymeleaf/issues/395
编辑
如评论中所述,确保使用版本 >= 3.0 的 Thymeleaf:
<properties>
<thymeleaf.version>3.0.3.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.2</thymeleaf-layout-dialect.version>
</properties>
我正在尝试使用 Thymeleaf 从 Spring 应用程序发送 plain text
电子邮件。
这是我的电子邮件服务:
@Override
public void sendPasswordToken(Token token) throws ServiceException {
Assert.notNull(token);
try {
Locale locale = Locale.getDefault();
final Context ctx = new Context(locale);
ctx.setVariable("url", url(token));
// Prepare message using a Spring helper
final MimeMessage mimeMessage = mailSender.createMimeMessage();
final MimeMessageHelper message = new MimeMessageHelper(
mimeMessage, false, SpringMailConfig.EMAIL_TEMPLATE_ENCODING
);
message.setSubject("Token");
message.setTo(token.getUser().getUsername());
final String content = this.textTemplateEngine.process("text/token", ctx);
message.setText(content, false);
mailSender.send(mimeMessage);
} catch (Exception e) {
throw new ServiceException("Token has not been sent", e);
}
}
电子邮件已发送并送达邮箱。
这是我的 plain text
电子邮件模板:
Token url: ${url}
但是在发送的邮箱中 url
变量没有被它的值替换。为什么?
当我使用 html
经典 HTML Thymeleaf 语法时,变量被替换:
<span th:text="${url}"></span>
电子邮件文本模板的正确语法是什么?
使用这样的 HTML 模板,它将生成纯文本。
<html xmlns:th="http://www.thymeleaf.org" th:inline="text" th:remove="tag">
Token url: [[${url}]]
</html>
换一种方式,仍然使用html可能是这样
<span th:text="Token url:" th:remove="tag"></span><span th:text="${url}" th:remove="tag"></span>
您正在寻找的是生产 plain text
,因此百里香叶会 return 为您生产。
您也可以在纯文本模式下使用 Thymeleaf,如本例所示:
Dear [(${customer.name})],
This is the list of our products:
[# th:each="p : ${products}"]
- [(${p.name})]. Price: [(${#numbers.formatdecimal(p.price,1,2)})] EUR/kg
[/]
Thanks,
The Thymeleaf Shop
这意味着您可以拥有一个 text-file,里面只有这个:
Token url: [(${url})]
在此处查看这些功能的完整文档:
https://github.com/thymeleaf/thymeleaf/issues/395
编辑
如评论中所述,确保使用版本 >= 3.0 的 Thymeleaf:
<properties>
<thymeleaf.version>3.0.3.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.2</thymeleaf-layout-dialect.version>
</properties>