电子邮件地址的本地部分允许使用两个句点吗?

电子邮件地址的本地部分允许使用两个句点吗?

第三方电子邮件网关中继拒绝处理我们发送的电子邮件地址的消息。该地址的格式为[电子邮件保护](请注意两个句点)。RFC 指南允许这样做吗?

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

本地解释的字符串要么是引号字符串,要么是点原子。如果字符串可以表示为点原子(即,它不包含除 atext 字符或 atext 字符包围的“.”以外的任何字符),则应使用点原子形式,不应使用引号字符串形式。不应在 addr-spec 中的“@”周围使用注释和折叠空格。

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

地址规范 = 本地部分“@”域

本地部分 = 点原子 / 引用字符串 / obs 本地部分

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

有人可以确认并解释一下吗?

答案1

是的,你说得对。你引用的部分说它必须是带引号的字符串或点原子。因为它显然不是带引号的字符串(没有封闭"就更清楚了)它必须是一个点原子......

这引出了点原子的定义:

看看这个,除了RFC 5322(3.2.3 - 第 13 页) (RFC 2822 包含类似部分)提示是1*in dot-atom-text = 1*atext *("." 1*atext)。这实际上意味着点原子由一个或多个“atext”字符组成的字符串,这些字符串由点分隔。0 个 atext 字符的字符串不计算在内,因此您不能有两个连续的点(以 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

答案2

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

按照RFC 5322 第 3.4.1 节您在问题中引用的点原子“不包含除 atext 字符之外的任何字符,或者不包含被 atext 字符包围的“.”“。因此,根据定义,点原子可能不包含两个或多个连续的周期。

作为参考,以下是 atext 定义,取自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,托管您遇到问题的中继的组织完全有权拒绝包含双句点的地址。

相关内容