web-dev-qa-db-ja.com

ThymeleafでTXTメールテンプレートを処理する方法は?

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>

電子メールテキストテンプレートの適切な構文は何ですか?

9
Artegon

この例のように、プレーンテキストモードでも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>
12
yglodt

このような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はそれを返します。

1
Rayweb_on