电子邮件地址的本地部分是否允许两个句点?


13

第三方电子邮件网关中继拒绝处理我们要发送到的电子邮件地址的消息。地址的格式为firstname..lastname @ recipientdomain.com(请注意两个句点)。RFC准则允许这样做吗?

RFC 2822在3.4.1节中似乎对此表示反对:

本地解释的字符串可以是带引号的字符串或点原子。如果该字符串可以表示为点原子(即,除文本字符或被文本字符包围的“。”外,不包含其他字符),则应使用点原子形式,而不应使用带引号的字符串形式使用。在addr-spec中的“ @”周围不应使用注释和可折叠的空格。

此外,在同一部分中,它引用了以下内容:

addr-spec =本地部分“ @”域

本地部分=点原子/带引号的字符串/ obs本地部分

我将其解释为意味着localpart的内容可以由点分隔,但不能有两个连续的点,并且不能以点开头或结尾。话虽如此,我对点原子语法并不熟悉,所以也许我在这里弄错了。

有人可以确认并解释吗?

Answers:


13

是的,你是对的。您引用的部分说它必须是带引号的字符串或点原子。由于它显然不是用引号引起来的字符串(缺乏封闭性"使之很清楚),因此它必须是点原子。

这导致我们对点原子的定义:

RFC 5322(3.2.3-第13页) (RFC 2822包含类似的章节)中看一下1*,提示是in 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

4

您的解释是正确的。本地部分可能包含由句点分隔的文本组,但是不允许多个连续的句点。

根据您在问题中引用的RFC 5322的3.4.1节,点原子“不包含除文本字符或“。”以外的字符,这些字符被文本字符包围 ”。因此,根据定义,点原子可以不包含两个或更多个连续的周期。

作为参考,以下是文本定义,取自RFC 5322的3.2.3节

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

当然,没有两个MTA以相同的方式执行RFC,因此您会发现某些MTA将接受双倍期限,而其他MTA则不会。例如,Exchange将拒绝传递包含双倍句号的地址,但对我使用的所有3个邮件服务器的随机选择进行的快速测试都支持双倍句点。

因此,严格按照RFC 5322的规定,托管有问题的中继的组织完全有权拒绝包含双句号的地址。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.