最大 Internet 电子邮件 Message-ID 长度

Maximum internet email Message-ID length

我正在寻找 Internet Message-ID 字段允许的最大字符长度,以便在应用程序中进行验证。我查看了 RFC-2822 and Wikipedia "Message-ID" as well as this SO question 等来源以及其他不同的地方。我能找到的最接近的答案是“998 个字符”,因为这是规范允许互联网消息中每一行的最大长度(来自 RFC-2822),并且 Message-ID 字段不能是多行。

998个字符是确定的答案吗?没有这个限制吗?

如果我从电子邮件中了解到一件事,那一定是它是一个针对 fuzzing email software. That is, no matter what the RFCs say, you will find emails violating them, some email software coping and some failing. I think most will limp along with the robustness principle 的大规模分布式系统。

除此之外,我认为符合 RFC 的最大 Message-ID 长度为 995 个字符。

您引用的 RFC 的最大行长度为 998 个字符。这将包括 "Message-ID:" 字段名称,但您可以在字段名称和字段主体之间进行换行。包含实际 Message-ID 的行将包含 space(折叠白色 space)、“<”、Message-ID 和“>”。从语义上讲,尖括号不是 Message-ID 的一部分。因此,您最终得到最多 998 - 3 = 995 个字符。

其实没有限制

RFC2822 定义了这些作品:

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

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

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

obs-id-left     =       local-part

local-part      =       dot-atom / quoted-string / obs-local-part

quoted-string   =       [CFWS]
                        DQUOTE *([FWS] qcontent) [FWS] DQUOTE
                        [CFWS]

CFWS            =       *([FWS] comment) (([FWS] comment) / FWS)

FWS             =       ([*WSP CRLF] 1*WSP) /   ; Folding white space

所以id-left可以是local-part也可以是quoted-string(因此有多个FWS) 所以你可以根据需要折叠它多次以适应任何任意 有效载荷的长度并且仍然符合给定的限制 通过 RFC。