Разрешены ли два периода в локальной части адреса электронной почты?

13

Сторонний ретранслятор почтового шлюза отказывается обрабатывать сообщение для адреса электронной почты, на который мы отправляем. Адрес указывается в формате namenamelastlast @ receientdomain.com (обратите внимание на два периода). Это разрешено руководящими принципами RFC?

RFC 2822, кажется, возражает против этого в разделе 3.4.1:

Локально интерпретируемая строка - это либо строка в кавычках, либо точка-атом. Если строка может быть представлена ​​в виде точечного атома (то есть она не содержит никаких символов, кроме символов atext или «.», Окруженных символами atext), тогда ДОЛЖНА использоваться форма точечного атома, а форма в кавычках НЕ ДОЛЖНА использоваться. Комментарии и складывающиеся пробелы НЕ ДОЛЖНЫ использоваться вокруг «@» в addr-spec.

Кроме того, в том же разделе он ссылается на это:

домен addr-spec = local-part "@"

local-part = точка-атом / цитируемая строка / obs-local-part

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

Может кто-нибудь, пожалуйста, подтвердите и объясните?

Майк Б
источник

Ответы:

13

Да вы правы. В цитируемом вами разделе говорится, что это должна быть строка в кавычках ИЛИ атом точки. Поскольку это явно не строка в кавычках (отсутствие вложения "делает это ясным), это должен быть точечный атом ...

Это приводит нас к определению точечного атома:

Посмотрите на это, за исключением RFC 5322 (3.2.3 - стр. 13) (RFC 2822 содержит аналогичный раздел), подсказка заключается 1*в dot-atom-text = 1*atext *("." 1*atext). Это фактически означает, что точка-атом состоит из строк одного или нескольких символов «atext», разделенных точками. Строка из 0 символов текста не считается, и поэтому вы не можете иметь две последовательные точки (разделенные 0 символами) или начальную или конечную точку.

RFC 5322                Internet Message Format             October 2008


   atext           =   ALPHA / DIGIT /    ; Printable US-ASCII
                       "!" / "#" /        ;  characters not including
                       "$" / "%" /        ;  specials.  Used for atoms.
                       "&" / "'" /
                       "*" / "+" /
                       "-" / "/" /
                       "=" / "?" /
                       "^" / "_" /
                       "`" / "{" /
                       "|" / "}" /
                       "~"

   atom            =   [CFWS] 1*atext [CFWS]

   dot-atom-text   =   1*atext *("." 1*atext)

   dot-atom        =   [CFWS] dot-atom-text [CFWS]

   specials        =   "(" / ")" /        ; Special characters that do
                       "<" / ">" /        ;  not appear in atext
                       "[" / "]" /
                       ":" / ";" /
                       "@" / "\" /
                       "," / "." /
                       DQUOTE
Филип Коуллинг
источник
4

Ваша интерпретация верна. Локальная часть может содержать группы атрибутов, разделенных точками, но несколько последовательных периодов не допускаются.

В соответствии с разделом 3.4.1 RFC 5322, который вы процитировали в своем вопросе, атом точки «не содержит никаких символов, кроме символов текста или«. », Окруженных символами текста ». Следовательно, по определению, точечный атом не может содержать два или более последовательных периода.

Для справки, вот определение atext, взятое из Раздела 3.2.3 RFC 5322 :

atext           =       ALPHA / DIGIT / ; Any character except controls,
                        "!" / "#" /     ;  SP, and specials.
                        "$" / "%" /     ;  Used for atoms
                        "&" / "'" /
                        "*" / "+" /
                        "-" / "/" /
                        "=" / "?" /
                        "^" / "_" /
                        "`" / "{" /
                        "|" / "}" /
                        "~"

Конечно, нет двух MTA, которые бы одинаково применяли RFC, поэтому вы обнаружите, что некоторые MTA будут принимать двойные периоды, а другие - нет. Например, Exchange откажется доставлять по адресам, содержащим двойные периоды, но быстрый тест случайного выбора из 3 почтовых серверов, которые я использую, поддерживают все двойные периоды.

Строго говоря, в соответствии с RFC 5322, организация, в которой находится ретранслятор, с которым у вас возникли проблемы, вполне может отказаться от адресов, содержащих двойные периоды.

Ричард Келлер
источник