Максимальная длина электронной почты в Интернете

Я ищу максимальную длину символа, разрешенную для интернет-поля Message-ID для целей проверки в приложении. Я рассмотрел такие источники, как RFC-2822 и Wikipedia "Message-ID", а также этот вопрос SO среди других различных мест. Самый близкий ответ, который я могу найти, это "998 символов", потому что это максимальная длина, которую спецификация разрешает для каждой строки в интернет-сообщении (из RFC-2822), а поле Message-ID не может быть нескольких строк.

Является ли 998 символов окончательным ответом? Нет ли такого предела?

Ответ 1

Если есть одна вещь, которую я узнал об электронной почте, это должно быть то, что она представляет собой широко распространенную систему для путаного программного обеспечения электронной почты. То есть, независимо от того, что говорят RFC, вы обнаружите, что их нарушают электронные письма, некоторые проблемы с копированием электронной почты и некоторые сбои. Я думаю, что большинство из них будет хромать вместе с принципом прочности.

Учитывая это, я думаю, что максимальная длина ID-сообщения, совместимая с RFC, составляет 995 символов.

Максимальная длина линии для RFC, которую вы цитируете, составляет 998 символов. Это будет включать в себя имя поля "Message-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.