将 html 数据传递给 Quarkus 模板

Pass html data to Quarkus Template

我正在使用 Quarkus Mailer 和 Quarkus Template 创建一个仅负责发送电子邮件的端点。现在它只接收主题、正文和电子邮件应该发送到的电子邮件。我正在使用 Quarkus 模板,因此我有一个适用于所有电子邮件的基本 html 模板。但是我希望能够通过端点传递 html 以便我能够在模板的内容中呈现不同的样式。

这是呈现正文的模板部分:

<tr style='mso-yfti-irow:5;height:343.95pt'>
    <td width=621 valign=top style='width:466.05pt;border-top:none;border-left: solid #0E133C 2.25pt;border-bottom:none;border-right:solid #0E133C 2.25pt; padding:2.0cm 1.0cm 1.0cm 1.0cm;height:343.95pt'>
       <p class=MsoNormal><span lang=PT style='mso-ansi-language:PT'>{sendEmailRequest.getBody()}<o:p></o:p></span></p>
    </td>
</tr>

基本上,“sendEmailRequest.getBody()”具有 html 内容,目前呈现如下:

这是用于发送电子邮件的代码:

public void sendEmail(final SendEmailRequest sendEmailRequest) {
        final String html = template.data("sendEmailRequest", sendEmailRequest).render();

        mailer.send((new Mail()).setSubject(sendEmailRequest.getSubject())
                .setHtml(html)
                .setTo(sendEmailRequest.getTos()));
    }

请记住,我想继续使用电子邮件的基本模板,而不是直接使用从 DTO 收到的正文作为整个电子邮件正文。我已经设法从端点使用 html,但是没有使用模板。

我在 Quarkus 存储库中发布了与问题相同的问题,并提供了解决方案。

您可以在这里查看:https://github.com/quarkusio/quarkus/issues/23893

解决方法:

You need to output the unescaped value: (1) either use the raw or safe computed properties in the template ({content.raw} or {content.safe}) or (2) wrap the String value in a io.quarkus.qute.RawString (template.data("content", new RawString(content)).render()).