邮件模板特殊字符转义问题:Gmail中${token}内容被截断如何解决?
解决Gmail中包含特殊字符的临时密码被截断的问题
这个问题很常见——Gmail(以及大多数HTML邮件客户端)会把<字符解析为HTML标签的起始标记,导致后面的内容被当作未闭合的标签处理,最终被截断。下面是具体的解决方法,结合你的多部分MIME邮件模板来说明:
核心原因
HTML中<、>、&、"、'这些属于特殊字符,它们会被邮件客户端的HTML渲染引擎当作语法的一部分,而不是普通文本。你的token里的<触发了这个解析逻辑,所以Gmail只显示了<之前的内容。
解决方案
因为你的邮件是multipart/alternative格式,包含纯文本(text/plain)和HTML(text/html)两个部分,需要分别处理:
1. HTML部分(text/html):转义特殊字符为HTML实体
你需要把token中的特殊字符替换为对应的HTML实体,确保客户端把它们当作普通文本渲染:
<→<>→>&→&"→"'→'(兼容性更好)
你的token @.iJ<ep2C]a-d$}4xK{ 转义后应该变成:@.iJ<ep2C]a-d$}4xK{
2. 纯文本部分(text/plain):无需转义
纯文本部分不会被解析为HTML,所以直接保留原始token即可,客户端会正常显示所有字符。
修改后的邮件模板示例
发件人:info@mycompany.com 主题:新用户激活 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="alternative_boundary" --alternative_boundary Content-Type: text/plain; charset="UTF-8" 请使用以下临时密码激活你的账户:@.iJ<ep2C]a-d$}4xK{ --alternative_boundary Content-Type: text/html; charset="UTF-8" <p>请使用以下临时密码激活你的账户:<code>@.iJ<ep2C]a-d$}4xK{</code></p> --alternative_boundary--
额外建议
如果你的邮件模板系统支持自动转义变量(比如Jinja2、Handlebars等模板引擎的auto-escape功能),建议开启这个功能。它会自动识别并转义变量中的HTML特殊字符,避免手动转义时遗漏特殊字符的情况。
内容的提问来源于stack exchange,提问作者neridaj
相关产品推荐
相关产品推荐

