Сторонний ретранслятор шлюза электронной почты отказывается обрабатывать сообщение для адреса электронной почты, на который мы отправляем. Адрес в формате firstname..lastname @ recipientdomain.com (обратите внимание на две точки). Разрешено ли это правилами RFC?
RFC 2822 кажется, возражает против этого в разделе 3.4.1:
Локально интерпретируемая строка представляет собой строку в кавычках или точку-атом. Если строка может быть представлена как точка-атом (то есть она не содержит символов, кроме символов текста или ".", Окруженных символами текста), то СЛЕДУЕТ использовать форму точки-атома, а форму строки в кавычках НЕ СЛЕДУЕТ использоваться. Комментарии и складывающиеся пробелы НЕ ДОЛЖНЫ использоваться вокруг "@" в addr-spec.
Кроме того, в том же разделе он ссылается на это:
addr-spec = local-part "@" домен
локальная часть = точка-атом / строка в кавычках / obs-local-part
Я интерпретирую это так, что в локальной части может быть контент, разделенный точками, но не может быть двух последовательный точек, и он не может начинаться или заканчиваться точкой. При этом я не знаком с синтаксисом точка-атом, поэтому, возможно, я ошибаюсь здесь.
Может кто-нибудь подтвердить и объяснить?
Да вы правы. В процитированном вами разделе говорится, что это должна быть строка в кавычках ИЛИ точка-атом. Поскольку это явно не строка в кавычках (отсутствие вложения "
проясняет это) это должен быть точечный атом ...
Это приводит нас к определению точки-атома:
Посмотрите на это кроме RFC 5322 (3.2.3 - стр. 13) (RFC 2822 содержит аналогичный раздел) намек - это 1*
в dot-atom-text = 1*atext *("." 1*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
Ваша интерпретация верна. Локальная часть может содержать группы текста, разделенные точками, но использование нескольких последовательных точек не допускается.
Согласно раздел 3.4.1 RFC 5322 который вы указали в своем вопросе, точечный атом "не содержит символов, кроме символов текста или "." окруженный символами текста". Следовательно, по определению, точечный атом не может содержать двух или более последовательных точек.
Для справки, вот определение текста, взятое из Раздел 3.2.3 RFC 5322:
atext = ALPHA / DIGIT / ; Any character except controls,
"!" / "#" / ; SP, and specials.
"$" / "%" / ; Used for atoms
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
Конечно, никакие два MTA не применяют RFC одинаково, поэтому вы обнаружите, что некоторые MTA будут принимать двойные периоды, а другие - нет. Например, Exchange откажется доставлять адреса, содержащие двойные точки, но быстрый тест случайного выбора трех почтовых серверов, которые я использую, все поддерживает двойные точки.
Таким образом, строго в соответствии с RFC 5322, организация, на которой размещается ретранслятор, с которым у вас возникли проблемы, вполне вправе отклонять адреса, содержащие двойные точки.