Deux périodes sont-elles autorisées dans la partie locale d'une adresse e-mail?

13

Un relais de passerelle de messagerie tiers refuse de traiter un message pour une adresse e-mail à laquelle nous envoyons. L'adresse est au format prénom ... nom @ destinatairedomaine.com (notez les deux points). Est-ce autorisé par les directives RFC?

La RFC 2822 semble s'opposer à cela dans la section 3.4.1:

La chaîne interprétée localement est soit une chaîne entre guillemets, soit un atome de points. Si la chaîne peut être représentée sous la forme d'un point-atome (c'est-à-dire qu'elle ne contient aucun caractère autre que des caractères atext ou "." Entouré de caractères atext), alors la forme point-atom DEVRAIT être utilisée et la forme chaîne-citée NE DEVRAIT PAS être utilisé. Les commentaires et les espaces blancs pliants NE DEVRAIENT PAS être utilisés autour du "@" dans les spécifications de l'adr.

De plus, dans cette même section, il fait référence à ceci:

addr-spec = local-part "@" domaine

local-part = point-atom / quoted-string / obs-local-part

J'interprète cela comme signifiant que la partie locale peut avoir un contenu séparé par des points mais il ne peut pas y avoir deux points successifs , et il ne peut ni commencer ni se terminer par un point. Cela étant dit, je ne connais pas la syntaxe des atomes-points, alors je me trompe peut-être ici.

Quelqu'un peut-il confirmer et expliquer?

Mike B
la source

Réponses:

13

Oui tu as raison. La section que vous avez citée indique que ce doit être une chaîne entre guillemets OU un atome de point. Comme ce n'est clairement pas une chaîne entre guillemets (le manque d'encadrement le "montre clairement), ce doit être un atome de points ...

Cela nous amène à la définition de point-atome:

Regardez cette exception de la RFC 5322 (3.2.3 - page 13) (RFC 2822 contient une section similaire) l'indice est 1*en dot-atom-text = 1*atext *("." 1*atext). Cela signifie effectivement qu'un atome de points est composé de chaînes d'un ou plusieurs caractères "atext" séparés par des points. Une chaîne de 0 caractères atext ne compte pas et vous ne pouvez donc pas avoir deux points successifs (séparés par 0 caractères) ou un point de début ou de fin.

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
Philip Couling
la source
4

Votre interprétation est correcte. La partie locale peut contenir des groupes de texte séparés par des périodes, mais plusieurs périodes consécutives ne sont pas autorisées.

Conformément à la section 3.4.1 de la RFC 5322 que vous avez citée dans votre question, un atome de point " ne contient aucun caractère autre que des caractères textuels ou". "Entouré de caractères textuels ". Par conséquent, par définition, un atome de points peut ne pas contenir deux périodes consécutives ou plus.

Pour référence, voici la définition atext, tirée de la section 3.2.3 de la RFC 5322 :

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

Bien sûr, aucun MTA n'applique les RFC de la même manière, vous constaterez donc que certains MTA accepteront des périodes doubles alors que d'autres ne le feront pas. Par exemple, Exchange refusera de livrer pour des adresses contenant des périodes doubles, mais un test rapide d'une sélection aléatoire de 3 serveurs de messagerie que j'utilise prend en charge toutes les périodes doubles.

Donc, strictement selon la RFC 5322, l'organisation hébergeant le relais avec lequel vous rencontrez des problèmes est tout à fait en droit de refuser les adresses contenant des périodes doubles.

Richard Keller
la source