最大互联网电子邮件消息ID长度

时间:2015-05-06 14:05:25

标签: validation email maxlength

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

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

2 个答案:

答案 0 :(得分:12)

如果我对电子邮件有所了解,那一定是它是fuzzing电子邮件软件的大规模分布式系统。也就是说,无论RFC说什么,你都会发现违反它们的电子邮件,一些电子邮件软件应对和一些失败。我认为大多数人都会考虑到robustness principle

有了这个,我认为符合RFC的最大Message-ID长度是995个字符。

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

答案 1 :(得分:3)

实际上没有限制

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。