如何在电子邮件主题行中添加 HTML 效果?

vis*_*era 4 email html-email

我正在使用 Apache Commons Email API 从我的应用程序发送电子邮件。我无法获得已发送电子邮件的正确主题行。例如,有问题的主题行:“ This is my email Subject line companyName<sup>\xc2\xae</sup>”。我预计主题是“I want something likewise - companyName\xc2\xae ”,但上标效果没有显示。

\n

Ste*_*n C 6

主题行的呈现由电子邮件客户端执行;即电子邮件收件人用来阅读其邮件的工具。这些工具实现了名为 RFC 822 的标准,该标准指定了电子邮件的表示方式;例如,电子邮件标题是什么,它们的含义是什么,以及电子邮件正文(内容)的表示方式。

\n

问题就在这里。RFC 822 于 1982 年指定。那比 Unicode 早很多年。RFC 822 已经更新了几次,最新版本是RFC 5322。但是,RFC 5322 仍然保留电子邮件标头字段(例如“主题:”字段)必须由 ASCII 字符组成的限制。(换句话说,直接在主题中使用 UTF-8 将违反规范。)

\n

幸运的是,有一个解决方法。RFC 1342标准提供了一种语法,用于通过 ASCII 传递以另一种字符编码(例如 UTF-8)编码的文本。MIME 规范已明确表示\n您可以在电子邮件标头中进行 RFC 1342 编码。

\n

RFC 1342编码的一般形式是:

\n
    =?charset?encoding?encoded-text?=\n
Run Code Online (Sandbox Code Playgroud)\n

其中charset是标准字符集名称,encodingQB(带引号的字符串或 base64),encoded-text是指定字符集中表示的文本,并使用指定编码进行编码。例如:

\n
    =?utf-8?Q?hello?=\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅 RFC 了解更多详细信息。

\n

请注意,如果您使用javax.mailAPI 构建电子邮件,设置 UTF-8 编码电子邮件主题的正确方法如下:

\n
    message.setSubject("We love Java\xc2\xae !!", "UTF-8");\n
Run Code Online (Sandbox Code Playgroud)\n

或者使用 Java 的\\uxxxxUnicode 转义。

\n

不幸的是,Apache Commons Email API 不允许您这样做。但是(如果我正确阅读了代码),它将尝试使用电子邮件的字符集对包含非 ASCII 字符的标头字段进行编码(请参阅setCharset()或默认字符集对包含非 ASCII 字符的标头字段进行编码。

\n

因此,如果在使用 Apache Commons Email API 时未正确传递普通的“ \xc2\xae”,解决方案是使用setCharset("UTF-8")设置电子邮件的字符集。(事实上​​,证据表明该角色已经被正确处理,因此这可能是多余的。)

\n
\n

这解决了 Unicode 字符的问题。您还尝试在“主题:”中包含 HTML 标记。据我所知,任何电子邮件规范都不支持邮件标头中的 HTML 标记。事实上,如果电子邮件发送者确实尝试在“Subject:”标头中呈现 HTML 标记,则可以说是违反规范的。

\n

不过还有另一种选择,因为 Unicode 允许您修改字符以使其成为下标或上标;有关详细信息,请参阅此维基百科页面。如果您尝试此方法,您将受到收件人电子邮件客户端的 Unicode 呈现的支配。

\n