SpringアプリケーションからThymeleafを使用して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
メールテンプレートです:
トークンのURL:$ {url}
ただし、配信されたメールボックスでは、url
変数はその値に置き換えられません。どうして?
html
クラシックHTMLThymeleaf構文を使用すると、変数が置き換えられます。
<span th:text="${url}"></span>
電子メールテキストテンプレートの適切な構文は何ですか?
この例のように、プレーンテキストモードでも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
つまり、これだけを含むテキストファイルを作成できます。
Token url: [(${url})]
これらの機能の完全なドキュメントをここで見てください:
https://github.com/thymeleaf/thymeleaf/issues/395
編集
コメントで述べたように、Thymeleafのバージョン> = 3.0を使用してください。
<properties>
<thymeleaf.version>3.0.3.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.2</thymeleaf-layout-dialect.version>
</properties>
このような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
を生成することです。そうすれば、thymeleafはそれを返します。