电子邮件ID在本地部分末尾带有破折号


19

如果电子邮件的本地部分末尾有破折号(-),它是否是有效的电子邮件?例如,

an.unusual.email-@mydomain.com

或概括地说,这些字符(Characters !#$%&'*+-/=?^_``{|}~ (ASCII: 33, 35-39, 42, 43, 45, 47, 61, 63, 94-96, 123-126))中的任何一个是否有效,可以在电子邮件ID的开头和/或结尾处出现在电子邮件的本地部分中?

Google说这是无效的,所以暂时我也认为它也是无效的,尽管RFC仅在本地部分的开头和/或结尾部分排除了[点]字符。

上述情况的GMail错误

注意:我不关心域部分,因为DNS的使用使问题变得更加复杂,这使问题变得更加复杂。

https://social.technet.microsoft.com/Forums/ie/zh-CN/69f393aa-d555-4f8f-bb16-c636a129fc25/what-are-valid-and-invalid-email-address-characters


好问题。您是否看过这个Stack Overflow问题和答案线程?很多信息-目前很多信息已经过时-但仍然是一个很好的起点/
-JakeGould

很好的参考链接,看来Google将该电子邮件视为无效,而Microsoft则没有任何问题。
Jimson Kannanthara James

1
自从您创建Google以来就共享了此信息:Gmail会忽略电子邮件地址中的所有句点,因此,如果您的电子邮件是“ anunusualemail@gmail.com”,您还将收到发送到“ an.unusual.email@gmail.com”的邮件。它还会忽略电子邮件地址末尾的加号:“ anunusualemail+something@gmail.com”。
mowwwalker

1
我可以使用自己的邮件服务禁止用户名中的字母“ u”。只是因为。
Agent_L

Answers:


60

如果电子邮件的本地部分末尾有破折号(-),它是否是有效的电子邮件?[...] Google说这是无效的,所以暂时我也认为它也是无效的,尽管RFC仅在本地部分的开始和/或结束处排除了[点]字符。

没错 您只会看到它被Google拒绝了,因为它执行了完全不同的检查- 与许多其他提供商一样,他们对本地部分可以有自己的政策。


Google或其他任何人都有义务接受所有可能有效的电子邮件地址,除非该表格实际上是在要求现有的有效电子邮件地址(可能是来自提供商)。例如,如果Gmail的“ 收件人:/抄送:”字段拒绝了有效地址,那将是一个错误。

但是,您突出显示的字段不会要求您提供现有的电子邮件地址;它要求在Google系统上提供一个帐户名,只有在创建帐户后名称才会作为电子邮件地址的基础。没有什么可以阻止Google或其他任何人在自己的系统上限制有效帐户名(甚至,甚至邮箱名)的集合。

或者换句话说,为“本地部分”定义允许的字符仅意味着邮件应用程序SMTP服务器必须在RFC 822标头和SMTP命令中接受此类地址-但未提及能够创建此类邮箱的任何内容。(实际上,早在撰写早期电子邮件RFC时,大多数邮箱仍与操作系统级帐户绑定,它们的名称具有相似甚至更严格的限制。)

例如,RFC 5321的这一部分(ABNF下方的4.1.2节)明确表示,允许接收主机,并且实际上应该对自己的邮箱的命名方式有更严格的限制:

虽然以上对本地部分的定义是相对允许的,但为了获得最大的互操作性,希望接收邮件的主机应避免在本地部分需要(或使用)引号字符串形式或本地部分为大小写的情况下定义邮箱-敏感。

因此,尽管anunusualemail-@gmail.com 语法上讲有效的,但这并不意味着Google必须允许您创建它。


6
作为一个有趣的旁注,google会忽略电子邮件地址(gmail.googleblog.com/2008/03/…)中的句点,该点在RFC中也未指定。因此,myname @ gmail.com与my.name@gmail.com或myname@gmail.com会位于同一位置。
childofsoong

4
@JimsonKannantharaJames通常,如果要检查电子邮件是否有效,则应实际将电子邮件发送到该地址并强制用户采取措施。仅基于地址的语法进行的任何检查实际上都应该只是抓住用户输入错误的内容。
Michael Mior

1
@grawity哦,我知道-我要举一个例子,说明RFC中未指定但允许的另一件事。
childofsoong

1
@ user71659如果您在必要的地方没有正确转义控制字符,则会遇到更大的问题。最终,电子邮件是由用户输入的,用户输入始终应视为危险。假定数据库中的某些字段是安全的,因为某些验证规则可能非常危险。如果几个月后其他人从另一个没有相同验证的表单中填充该字段,会发生什么情况?
Michael Mior

2
@ user71659您将两个不同的问题混为一谈,并弄混了这个论点。MichaelMior是完全正确的状态,以验证该电子邮件地址存在,你不得不发送电子邮件到需要用户操作该地址。
kumarharsh

7

G Suite(即正式的Google Apps for Your Domain)确实允许在电子邮件地址中使用连字符(破折号),即使是最后一个字符也是如此。

用户名可以包含字母(az),数字(0-9),破折号(-),下划线(_),撇号(')和点号(。)。

来源:名称和密码准则

如您所述,Gmail不允许在电子邮件地址中使用连字符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.