第三方电子邮件网关中继拒绝处理我们发送到的电子邮件地址的邮件。地址的格式为firstname..lastname@recipientdomain.com(注意两个句点)。RFC 指南允许这样做吗?
RFC 2822似乎在第 3.4.1 节反对这一点:
本地解释的字符串是带引号的字符串或点原子。如果字符串可以表示为一个点原子(也就是说,它不包含除 atext 字符或被 atext 字符包围的“.”之外的任何字符),那么应该使用点原子形式,而不应该使用带引号的字符串形式使用。addr-spec 中的“@”周围不应使用注释和折叠空格。
此外,在同一部分中,它引用了以下内容:
addr-spec = 本地部分“@”域
本地部分 = 点原子 / 带引号的字符串 / obs-本地部分
我解释这意味着 localpart 可以有由点分隔的内容,但不能有两个连续的点,也不能以点开始或结束。话虽如此,我不熟悉点原子语法,所以也许我在这里弄错了。
有人可以确认并解释一下吗?
Phi*_*ing 15
是的,你是对的。您引用的部分说它必须是带引号的字符串或点原子。由于它显然不是带引号的字符串(缺少封闭"说明这一点),因此它必须是一个点原子...
这将我们引向点原子的定义:
看看这个,除了RFC 5322 (3.2.3 - page 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
Run Code Online (Sandbox Code Playgroud)
你的解释是正确的。本地部分可能包含由句点分隔的多组文本,但不允许有多个连续的句点。
根据您在问题中引用的 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
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
Run Code Online (Sandbox Code Playgroud)
当然,没有两个 MTA 以相同的方式强制执行 RFC,因此您会发现一些 MTA 会接受双周期,而另一些则不会。例如,对于包含双句点的地址,Exchange 将拒绝投递,但我随机选择的 3 台邮件服务器的快速测试均支持双句点。
因此,严格按照 RFC 5322,托管您遇到问题的中继的组织完全有权拒绝包含双句点的地址。