5

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

为什么?为什么不?

4

5 回答 5

16

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

本规范是 Request For Comments (RFC) 2822 的修订版,它本身取代了 Request For Comments (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 节)

于 2011-04-01T15:35:01.570 回答
7

这取决于您是指标题中的地址 (RFC 5322) 还是信封地址 (RFC 5321),在后一种情况下,您是否包括 <>、<> 之间的所有内容(即源路由),或者只是邮箱。

它根据 RFC 5322是有效的,但是 RFC 5322 允许大量有趣的东西,比如评论!独角兽!蛋糕!小马!. 几乎可以使用 Perl 的“常规”表达式解析它们:Mail::RFC822::Address

根据RFC 5321 第 4.1.3 节,它在语法上是无效的,因为该语法只允许 1.2.3.4 形式的地址文字或带有“标准标签:”形式的前缀(例如)。我假设您的意思是“邮箱”,即 <> 之间的所有内容,但不包括源路由。[IPv6:::1]

我会使用后一种定义,因为如果我的 SMTP 服务器不接受电子邮件地址,它就不是很好。(是的,这是一个有点可怕的定义,但我认为互联网不会很快脱离 SMTP。)

(此外,还有 RFC 5336 又名“UTF8SMTP”。我不知道有人使用它。)

于 2011-04-12T01:18:41.920 回答
3

不可以,RFC2822允许将 IP 地址用作域,但您必须使用有效的 IP 地址。

你的例子应该是root@[127.0.0.1].

于 2011-04-01T15:22:47.590 回答
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>
于 2011-04-01T15:24:45.973 回答
-3

不,

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

域部分必须满足用方括号括起来的主机名或 IP 地址的定义。

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

查看以下将验证电子邮件地址的电子邮件验证器代码(减去 ip 地址验证位) 。这也可以很容易地改装为使用 ip 地址域名。

于 2011-04-11T14:10:49.953 回答