Postmark模板动态变量HTML被识别为纯文本问题排查
解决Postmark模板中动态变量HTML被当作纯文本的问题
嘿,这个问题我之前也踩过坑!Postmark默认会自动转义模板变量里的HTML内容,这是它的安全机制,用来防止XSS攻击,所以你传入的<br>标签才会被当成纯文本显示出来,而模板里直接写的HTML因为是模板本身的内容,不会被转义,所以能正常解析换行。
快速解决方案
只需要修改Postmark模板里的变量语法,把双大括号改成三大括号:
修改前的模板代码:
<tr> <td> 1. 以下是包含br换行的文本:{{body}} </td> </tr>
修改后的模板代码:
<tr> <td> 1. 以下是包含br换行的文本:{{{body}}} </td> </tr>
为什么这样有效?
Postmark的模板引擎(Handlebars)中:
{{变量}}:会自动转义HTML内容,把<、>等字符转换成实体编码(比如<、>),所以浏览器会把它们当成纯文本显示。{{{变量}}}:会跳过转义步骤,直接渲染变量里的HTML内容,这样你的<br>标签就能正常生效了。
注意事项
如果你传入的body内容包含用户输入的内容,一定要先做XSS过滤!因为关闭转义后,恶意HTML代码会直接在邮件中执行,带来安全风险。如果是你自己生成的可信HTML,就不用担心这个问题。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

