Content-Id header 的精确格式

The precise format of Content-Id header

消息部分Content-Idheader的格式我真的很困惑

在我看来,只有 RFC 2045 涵盖了 header 的格式,但是很简单:

In constructing a high-level user agent, it may be desirable to allow one body to make reference to another. Accordingly, bodies may be
labelled using the "Content-ID" header field, which is syntactically
identical to the "Message-ID" header field:

 id := "Content-ID" ":" msg-id

Like the Message-ID values, Content-ID values must be generated to be world-unique.

RFC 2822 像这样解释 msg-id 令牌的格式:

The message identifier (msg-id) is similar in syntax to an angle-addr construct without the internal CFWS.

message-id = "Message-ID:" msg-id CRLF

in-reply-to = "In-Reply-To:" 1*msg-id CRLF

references = "References:" 1*msg-id CRLF

msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS]

id-left = dot-atom-text / no-fold-quote / obs-id-left

id-right = dot-atom-text / no-fold-literal / obs-id-right

no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE

no-fold-literal = "[" *(dtext / quoted-pair) "]"

长话短说:它包含 at ('@') 符号,就像消息的 Message-Id header 一样。但是,几乎所有关于 MIME 格式的 reader-friendly 文章都给出了 Content-Id 没有 at 符号的示例(包括 not-really-global 标识符,例如 myimagecidinlineimage001 以及随机生成的不带 at 符号的 UUIDS)。如果有必要,他们肯定会强调“@”符号的重要性,就像他们对待 Message-Id header 一样,对吧?对吗?

我已经 运行 对 real-world 电子邮件客户端进行了一些测试,看看他们如何使用嵌入式内联图像撰写电子邮件:

我没有再测试任何电子邮件客户端(如果有人测试过,完成上面的列表就太好了),但这两个已经显示出显着的差异。 Google 不遵守 RFC 标准?它确实看起来很臭,我想知道那是因为我错过了什么,还是因为格式毕竟不是那么重要(在长 运行 中感觉相当令人不安)。我也有兴趣检查有多少流行的电子邮件客户端实际上丢弃了 'at' 符号。

按照规范所说的进行操作,而不是按照某些邮件客户端的操作进行操作。

所以是的,Content-Id header 应该有一个符合规范规定的值,因此应该有一个 '@' 符号。

电子邮件的世界是一个破烂不堪的地狱,许多不同的邮件客户端和服务器各司其职,不遵守标准。

作为过去 17 年编写邮件软件的人,我可以向您保证,这不是唯一 Google 偏离规范的地方。