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