我即将在可能包含不安全用户输入的代码中发送 html 电子邮件。我注意到,如果我对主题进行 html 转义,GMail 将显示转义的内容(因此,如果我的主题是"This & That"
,我将其清理为"This & That"
,Gmail 将显示后者)。雷鸟也是如此。假设所有电子邮件客户端都不需要转义主题 html 是否安全?
3 回答
无需在主题行中编码 HTML 实体。在 HTML 正文中进行编码的原因是,如果您使用 XHTML,因为它源自 XML,所以将&
其视为保留字符。
但是,电子邮件的主题行不是 HTML、XML 或 XHTML。这只是纯文本。因此,您不需要将 & 符号编码为&
. 如果您对它进行编码,因为它没有被解析为 HTML,它将显示为已编码。
如果您想包含非 ASCII 字符(例如£
),那么您需要将整个“信封”(包括电子邮件正文)编码为 UTF-8。
因此,在代码中,以下内容将显示为:
| Subject Line | Body
====================================
& | & | &
& | & | &
UTF-8 £ | £ | £
ASCII £ | n/a | n/a
£ | £ | £
注意:Microsoft Office 有一个奇怪的 UTF-8 实现,所以不是所有的 UTF-8 字符都可以工作。
主题不需要进行 html 转义,但是可以转义。最初的 SMTP 规范定义消息应该是 ascii(RFC822第 3 节)。这在RFC2822中得到了证实,但是RFC2047定义了标题扩展,允许您对 mime 消息中的标题字段进行编码以允许非 ascii 文本。
这种编码字格式允许您在电子邮件标题中使用像 utf-8 这样的编码。例如:
=?iso-8859-1?q?this=20is=20some=20text?=
这是“这是一些文本”的 ISO-8859-1 编码版本。此方法可用于对诸如英镑符号 (£) 或重音/非 ascii 字符之类的内容进行 enode。
主题字段位于“HTML 内容”之外。它与 HTML 没有任何关系。
但是,我没有这方面的参考......