在解决电子邮件消息显示问题的过程中,我注意到电子邮件标题包含 HTML。
例子:
From: <[email protected]>
To: <[email protected]>
Date: 11 Feb 13 12:00:23
Subject: Foo Test
Message: <html><head><meta http-equiv="Content-Language" content="en-us"
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Foo Test 123</title><body>Hi
Message-ID: <[email protected]>
邮件标头由我不管理的上游服务器添加。我看到的原始问题是标头中的 HTML 文本缺少一个标签,因此电子邮件阅读器认为邮件的其余部分(包括其他标头)是邮件正文的一部分(这导致 mime 源显示在正文中,而不是呈现的 HTML 中)。
在我看来这绝对是错误的——我无法想象在标题中包含 HTML 会有什么用处。话虽如此,我似乎找不到 RFC 中明确定义标题中可以(或不能)包含什么的部分。有人能给我指出正确的方向吗?
具体来说,我想知道:电子邮件标题中可以放置哪些类型的内容以及标题名称/值中可以指定哪些类型的字符有任何限制吗?
答案1
答案2
对于标题中可以放置的内容几乎没有任何限制。rfc5322 第 2.2 节只规定了头字段名称必须是可打印字符。只要这是真的,并且内容是“折叠”正确地说,你可以在标题中放入几乎任何内容。
我还看到过,如果编码不正确,标题会被错误地呈现为正文,最终传输一个空白行,以便客户端认为正文已经开始,因此您可以检查编码以确保它不是罪魁祸首。
然而我认为杰拉尔德是正确的,因为您可能不想问消息格式是否合法,而应该问是谁以及为什么有人将其添加到标题中。
答案3
这不是 HTML,而是RFC 822(第 3.4.6 节)用于分隔邮箱。相关部分内容如下:
There are three types of brackets which must occur in matched
pairs, and which may NOT be nested:
o Colon/semi-colon (":" and ";") are used in address
specifications to indicate that the included list of
addresses are to be treated as a group.
o Angle brackets ("<" and ">") are generally used to
indicate the presence of a one machine-usable refer-
ence (e.g., delimiting mailboxes), possibly including
source-routing to the machine.
也有解释称第 6.1 节(语法)如下:
mailbox = addr-spec ; simple address
/ phrase route-addr ; name & addr-spec
route-addr = "<" [route] addr-spec ">"
这主要用于以明文形式显示一个人的姓名以及他们的电子邮件地址,例如
John Doe <[email protected]>
在您给出的示例中,名称为空白,后跟电子邮件地址。