【问题标题】:Maximum internet email Message-ID length最大互联网电子邮件消息 ID 长度
【发布时间】:2015-07-16 17:32:41
【问题描述】:

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

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

【问题讨论】:

    标签: validation email maxlength


    【解决方案1】:

    如果我学到了关于电子邮件的一件事,那一定是它是一个用于fuzzing 电子邮件软件的大规模分布式系统。也就是说,无论 RFC 怎么说,您都会发现违反它们的电子邮件、一些电子邮件软件应对和一些失败。我认为大多数人会在脑海中一瘸一拐地想到robustness principle

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

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

    【讨论】:

      【解决方案2】:

      其实没有限制

      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。

      【讨论】:

      • 当然,如果选择接受符合 RFC-822 的任意消息,它甚至没有规定最大行长度。
      猜你喜欢
      • 2021-10-12
      • 2019-08-04
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      相关资源
      最近更新 更多