root@[127.1]是一个语法上有效的电子邮件地址吗?

5

root@[127.1]不是符合语法的电子邮件地址。

为什么?为什么不?


1
仅仅是我们在思考这个问题的事实已经足够了,:-) - thkala
1
如果我查看stackoverflow的常见问题解答,这个问题不适合在该网站上发布。 - SynerCoder
SynerCoder:网站上有数百个与电子邮件语法验证相关的问题。你从未编写过验证电子邮件地址的代码吗? - knorv
5个回答

15

您需要检查RFC 5322,第3.4.1节。

本规范是对请求评论(RFC)2822的修订版,它本身取代了请求评论(RFC)822,“ARPA Internet文本消息格式标准”,更新以反映当前实践并合并在其他RFC中指定的增量更改。

我将您的电子邮件地址通过http://isemail.info/进行了检查,结果如下:

总体结果为根据RFC 5322的广义定义,该地址仅有效。否则无效。

具体诊断为域文字面值不是有效的RFC 5321地址文字面值

这是电子邮件RFC的相关段落:

domain-literal = [CFWS]“[”*([FWS] dtext)[FWS]“]”[CFWS]

(RFC 5322第3.4.1节)


7
这取决于您指的是标题中的地址(RFC 5322)还是信封地址(RFC 5321),在后一种情况下,是否包括<>、<>之间的所有内容(即源路由),或者只包括邮箱。根据RFC 5322,这是有效的,但RFC 5322允许很多有趣的东西!,比如注释!独角兽!蛋糕!小马!。使用Perl的“常规”表达式可以解析它们:Mail::RFC822::Address。根据RFC 5321第4.1.3节语法无效,因为该语法仅允许形式为1.2.3.4或形式为“standard-tag:”(例如[IPv6:::1])的地址文字。我假设您指的是“Mailbox”,即<>之间的所有内容,但不包括源路由。我会使用后一种定义,因为如果我的SMTP服务器无法接受电子邮件地址,则该电子邮件地址没什么用。(此外,还有RFC 5336,也称为“UTF8SMTP”。我不知道有谁在使用它。)

3
不,RFC2822 允许使用 IP 地址作为域名,但必须使用有效的 IP 地址。
你的示例应该是 root@[127.0.0.1]

附加信息:使用这种方括号表示法被称为域字面量。 - SamG
7
“127.1”是一个有效的IP地址,它在某些情况下代表“127.0.0.1”,但并非所有工具都支持这种表示方法。 - thkala
2
你链接的那个部分的语法允许 root@[foo]。它在语法上是有效的。 - R. Martinho Fernandes
1
哎呀,我的意思是 root@[127.1]。它允许方括号内的几乎所有内容。 - R. Martinho Fernandes
3
RFC5321第4.1.3节规定:“对于IPv4地址,该形式使用由点号分隔并用括号括起来的四个小十进制整数,例如[123.255.37.2],表示一个( IPv4 )以字节序列形式表示的Internet地址。” - qbert220

2
根据你在标签中提到的RFC-822,是的,它在语法上是有效的,因为语法允许这样做。以下是相关规则:
 addr-spec   =  local-part "@" domain        ; global address    
 
 domain      =  sub-domain *("." sub-domain)
 
 sub-domain  =  domain-ref / domain-literal

 domain-literal =  "[" *(dtext / quoted-pair) "]"

 dtext       =  <any CHAR excluding "[",     ; => may be folded
                 "]", "\" & CR, & including
                 linear-white-space>

-3

不是有效的电子邮件地址。

电子邮件的有效性有一些广泛的定义,如果将地址分成两个部分,本地部分(@符号之前)和域名部分(@符号之后)。本地部分可以是字母数字,带有以下特殊字符“。”,“-”和“_”,本地部分不能包含连续的句点。

域名部分必须符合主机名或由方括号括起来的IP地址的定义。

由于您的示例不符合有效主机名(foo.bar)的要求,并且它不包含由方括号括起来的有效IP地址,因此它不是有效的电子邮件地址。

请查看以下电子邮件验证器代码(减去IP地址验证部分),它将验证电子邮件地址。这可以很容易地改装为与IP地址域名一起使用。


“本地部分”通常包括+,RFC 5321/5322语法还允许许多其他有趣的事情。 - tc.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接