我正在使用spring thymeleaf制作电子邮件模板。我需要在模板中包含MS-outlook [if mso]的检查。我需要在块内设置一个变量。我想知道是否有办法做到这一点。
<!--[if mso]><p style="line-height:0;margin:0;"> </p><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" th:href="@{|${baseUrl}/#/signup?email=${registrationRequest.email}&key=${registrationRequest.registrationToken}|}" style="width:124px" arcsize="8%" strokecolor="#339561" filled="t"><v:fill type="gradient" angle="180" color="#44C781" color2="#3AA96E"></v:fill><v:textbox style="mso-fit-shape-to-text:t" inset="0px,11px,0px,11px"><center style="font-size:14px;line-height:24px;color:#FFFFFF;font-family:Tahoma,sans-serif;font-weight:bold;mso-line-height-rule:exactly;mso-text-raise:4px">Register</center></v:textbox></v:roundrect><![endif]-->
答案 0 :(得分:2)
您可以通过变量提供整个MS Outlook特定的HTML代码块,包括特殊的开始和结束注释,但这样做会删除Thymeleaf在该块中执行变量替换的能力。
通过使用两个变量而不是一个变量,可以非常轻松地实现保留变量替换:启动MSO注释变量和结束MSO注释变量 - 这些变量分别只生成MSO和结束MSO注释。
将Outlook特定代码保留在模板中并将其包装在开头/结尾标记中,如下所示:
<div class="col-md-3">
@Html.TextBox("ddlUser", null, new { @id = "ddlUser", @class = "form-control" })
</div>
答案 1 :(得分:0)
我通过在服务器端移动整个[if mso]块解决了这个问题。我附加了所需的变量,并使用
在模板中渲染了块<div th:remove="tag" th:utext="${msoTemplate}"></div>
答案 2 :(得分:0)
我认为使用if mso伪注释的更好方法是使用th:block
<th:block th:utext="${ifgtemso9}"></th:block>
.. your html ...
<th:block th:utext="${endif}"></th:block>
当您设置模型或上下文时,您可以执行以下操作:
ctxEmail.setVariable("ifgtemso9","<!--[if gte mso 9]>");
ctxEmail.setVariable("ifnotmso15comment","<!--[if !mso 15]><!-->");
ctxEmail.setVariable("endif","<!--<![endif]-->");
ctxEmail.setVariable("endif_end","<![endif]-->");
然后在utext中使用相应的变量。
(我在这里直接用上下文调用百里香,但我相信你知道如何自己设置模型参数)