是root@[127.1]
语法上有效的电子邮件地址吗?
为什么?为什么不?
您需要查看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 节)
这取决于您是指标题中的地址 (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”。我不知道有人使用它。)
不可以,RFC2822允许将 IP 地址用作域,但您必须使用有效的 IP 地址。
你的例子应该是root@[127.0.0.1]
.
根据您在标签中提到的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>
不,
电子邮件有效性有一些广泛的定义,如果您将地址分成两部分,本地(@ 符号之前)和域(@ 符号之后)。本地部分可以是字母数字,带有以下特殊字符“.”、“-”和“_”,本地部分不能包含连续的句点。
域部分必须满足用方括号括起来的主机名或 IP 地址的定义。
由于您的示例不符合有效主机名 (foo.bar) 的要求,并且它不包含用方括号括起来的有效 IP 地址,因此它不是有效的电子邮件地址。
查看以下将验证电子邮件地址的电子邮件验证器代码(减去 ip 地址验证位) 。这也可以很容易地改装为使用 ip 地址域名。