电子邮件地址是否区分大小写?

Are email addresses case sensitive?

提问人:Stalker 提问时间:3/21/2012 最后编辑:Luke GirvinStalker 更新时间:6/15/2023 访问量:246281

问:

我已经读到,按照标准,电子邮件的第一部分是区分大小写的,但是我试图将电子邮件发送到 ,并且 - 它已经到达了每种情况。[email protected][email protected][email protected]

邮件服务器如何处理用户名?是否有可能错过案例并且该消息无法传递?使用完全相同的字母大小写真的非常重要吗,就像在提供电子邮件地址时注册时所写的一样?

电子邮件 SMTP RFC

评论

0赞 Luke Girvin 1/7/2015
相关问题 - stackoverflow.com/questions/9013726/...
0赞 djvg 4/13/2022
还相关:围绕电子邮件地址区分大小写的编程

答:

479赞 Mike E 3/22/2012 #1

来自 RFC 5321 的第 2.3.11 节

标准邮箱命名约定定义为 “本地part@domain”;当代用法允许更广泛的 应用程序而不是简单的“用户名”。因此,由于 当中间主机尝试 通过修改它们来优化传输,本地部分必须是 仅由在 地址的域部分。

所以是的,“@”前面的部分可能区分大小写,因为它完全在主机系统的控制之下。然而,在实践中,没有广泛使用的邮件系统根据大小写区分不同的地址。

但是,@ 符号后面的部分是域,根据 RFC 1035 第 3.1 节,

“名称服务器和解析器必须以不区分大小写的方式比较 [域]”

简而言之,您可以安全地将电子邮件地址视为不区分大小写。

评论

112赞 Geert-Jan 11/17/2013
“简而言之,您可以安全地将电子邮件地址视为不区分大小写。我会用更强硬的措辞:“将电子邮件地址视为区分大小写的方式是不安全的”,尤其是在检查用户数据库等中的重复项时。
88赞 Peter Bagnall 9/12/2014
我不同意这个结论。如果您正在数据库中寻找重复项 - 是的,不区分大小写的匹配可能是最好的方法,但我见过在发送之前将电子邮件地址转换为小写的代码。这不是一个好主意,因为它不太可能被交付。因此,您如何处理它取决于错误的后果是什么以及您当时对电子邮件地址的处理方式(整理唯一地址列表、发送电子邮件等)。
18赞 MSC 3/4/2015
有谁知道一个邮件产品列表,这些产品将 (a) 在用户 [email protected] 有效时拒绝 [email protected],或 (b) 允许创建两个不同的邮箱:[email protected] 和 [email protected]
88赞 Matthew James Briggs 11/25/2015
我在一家大公司工作,还有另一个人的名字和姓氏相同。我今天发现他的本地部分与我的不同之处仅在于大小写。这一直工作正常,所以我惊讶地看到“没有广泛使用的邮件系统根据大小写区分不同的地址”。我们使用 MS Exchange,我称之为“广泛使用”。
21赞 Adam111p 4/27/2016
RFC 5321 2.4.一般语法原则和事务模型 - SMTP 实现必须注意保留邮箱本地部件的大小写。特别是,对于某些主机,用户“smith”与用户“smith”不同。邮箱域遵循正常的 DNS 规则,因此不区分大小写。
61赞 PaulOTron2000 10/24/2012 #2

我知道这是一个老问题,但我只想在这里发表评论:在任何程度上,电子邮件地址都区分大小写,大多数用户积极使用需要大写的电子邮件地址是“非常不明智的”。他们很快就会停止使用这个地址,因为他们会丢失很多邮件。(除非他们有特定的理由使事情变得困难,并且他们只期望来自他们认识的特定发件人的邮件。

这是因为存在不完美的人类和不完美的软件,(令人惊讶!)它们将假设所有电子邮件都是小写的,因此,这些人和软件将使用地址的“小写版本”发送消息,而不管它是如何提供给他们的。如果收件人无法收到此类邮件,他们很快就会注意到他们丢失了很多邮件,并切换到仅小写的电子邮件地址,或者将他们的服务器设置为不区分大小写。

评论

20赞 Mattie 10/26/2012
这是对波斯特尔定律 en.wikipedia.org/wiki/Robustness_principle 的深刻应用。编写假设电子邮件地址的本地部分不区分大小写的软件仍然是错误的,但是是的,鉴于那里有很多错误的软件,如果您是接受邮件的人,那么要求区分大小写也不太可靠。
3赞 Mark A. Donohoe 5/4/2020
我最沮丧的一件事是网站强迫我用全小写电子邮件。刚刚向 Twitch.tv 发出了关于他们的支持网站的愤怒评论。他们甚至阻止您在他们的网站上输入大写字母。因此,虽然我知道我的电子邮件服务器将它们视为不区分大小写,并且我知道 RFC 声明它区分大小写,但网站永远不应该做出任何假设,而应该简单地传递用户输入的内容。男人太烦人了!!
2赞 PaulOTron2000 5/11/2020
就我个人而言,当我在某处输入电子邮件时,我更喜欢使用混合大小写,这样更清晰。例如:[email protected](不是我的真实地址。即使我收到没有大写的电子邮件,我也会这样做。
3赞 Klesun 6/19/2020
但是,作为软件作者,您更希望您的服务成为少数几个使用区分大小写的电子邮件为这个人做正确事情的服务之一。
0赞 sound wave 7/15/2022
在 Thunderbird 上,当我输入电子邮件地址时,它会自动将其转换为小写
50赞 l3x 12/5/2015 #3

这篇文章来晚了,但我有一些稍微不同的话要说......

>> "Are email addresses case sensitive?"

好吧,“这要看情况......” (TM)

一些组织实际上认为这是一个好主意,他们的电子邮件服务器强制区分大小写。

所以,对于那些疯狂的地方,“是的,电子邮件是区分大小写的。

注意:仅仅因为规范说你可以做某事并不意味着这样做是一个好主意。

KISS的原理表明,我们的系统使用不区分大小写的电子邮件。

而稳健性原则建议我们接受区分大小写的电子邮件。

溶液:

  • 存储区分大小写的电子邮件
  • 发送区分大小写的电子邮件
  • 执行不区分大小写的内部搜索

这意味着如果此电子邮件已经存在:[email protected]

...另一个用户出现并希望使用此电子邮件:[email protected]

...不区分大小写的搜索逻辑将返回“该电子邮件已存在”错误消息。

现在,你要做出一个决定:这个解决方案是否适合你的情况?

如果没有,您可以向那些需要支持其区分大小写的电子邮件的客户收取便利费,并实施允许 [email protected] 进入您的系统的自定义逻辑,即使 [email protected] 已经存在。

在这种情况下,您的电子邮件搜索/验证逻辑可能类似于以下伪代码:

if (user.paidEmailFee) {
   // case sensitive email
   query = "select * from users where email LIKE ?"
} else {
   // case insensitive email
   query = "select * from users where email ILIKE ?"
}
 

这样一来,您主要是强制执行不区分大小写,但如果客户使用支持此类废话的电子邮件系统,则允许他们为此支持付费。

p.s. ILIKE 是一个 PostgreSQL 关键字:http://www.postgresql.org/docs/9.2/static/functions-matching.html

评论

11赞 ThiefMaster 5/20/2016
完全匹配的 LIKE/ILIKE 是一个糟糕的主意。想象一下一封电子邮件包含或更有可能%_
27赞 epelc 9/20/2016
你的积分很棒!但是你的例子中的sql注入有点毁了它:(
9赞 xDaizu 12/20/2016
@epelc这个。完全同意。这种查询构建不应该写在任何地方,即使它只是一个示例。
2赞 Mark A. Donohoe 5/4/2020
@l3x,虽然我不像其他示例代码那样强烈反对上面的示例代码,特别是因为您确实将其称为伪代码并且仅用于说明目的,但也许上述所有注释都可以通过用简单的注释替换您的行来解决,因为这样可以使对话远离 SQL 注入主题并专注于您要展示的内容。换句话说,把它放在逻辑上,而不是实现上。这将使批评者保持沉默。query = ...query = // Insert case-sensitive/insensitive search here
1赞 AmigoJack 2/16/2021
我反对使用“电子邮件”一词来表示电子邮件地址。
21赞 Adam111p 4/27/2016 #4

IETF公司开放标准 RFC 5321 2.4. 一般语法原则和事务模型

SMTP 实现必须注意保留邮箱的大小写 本地零件。特别是,对于某些主机,用户“smith”是 与用户“史密斯”不同。

邮箱域遵循正常的 DNS 规则,因此不是大小写 灵敏

12赞 zaTricky 6/1/2017 #5

根据@l3x,这取决于。

显然,有两组一般情况的正确答案可能不同,第三组情况不那么普遍:

a) 您是发送私人邮件的用户

很少有现代电子邮件系统实现区分大小写,因此您可以忽略大小写并选择您喜欢使用的任何大小写。不能保证您的所有邮件都会被送达 - 但很少有邮件会受到负面影响,您不必担心

b) 您正在开发邮件软件

请参阅底部RFC5321 2.4 摘录。

在开发邮件软件时,您希望符合 RFC。如果您愿意,可以使自己用户的电子邮件地址不区分大小写(您可能应该这样做)。但为了符合 RFC,您必须将外部地址视为区分大小写

c) 以员工身份管理企业拥有的电子邮件地址列表

同一电子邮件收件人可能会多次添加到列表中 - 但使用不同的大小写。在这种情况下,尽管地址在技术上不同,但可能会导致收件人收到重复的电子邮件。您处理这种情况的方式与情况 a) 类似,因为您可以将它们视为重复项并删除重复条目。但是,最好将这些情况视为特殊情况,向两个地址发送“提醒”邮件,询问他们电子邮件地址的大小写是否准确。

从法律角度来看,如果您在未经确认/许可的情况下从两个地址删除重复项,您可能会对将私人信息/身份验证泄露给未经授权的地址负责,仅仅因为两个实际上独立的收件人具有相同的地址,但情况不同

摘自RFC5321 2.4:

邮箱的本地部分必须区分大小写。 因此,SMTP 实现必须注意保留以下情况 邮箱本地部件。特别是,对于某些主机,用户“smith” 与用户“史密斯”不同。然而,利用这个案例 邮箱本地部件的敏感性阻碍了互操作性,并且 气馁。

评论

3赞 Jim Ratliff 10/31/2022
为了完整起见,也来自RFC5321,但§4.1.2:“虽然上述对本地部分的定义相对宽松,但为了获得最大的互操作性,期望接收邮件的主机应避免定义本地部分需要(或使用)带引号的字符串形式或本地部分区分大小写的邮箱。对于需要生成或比较本地部分(例如,特定邮箱名称)的任何目的,所有带引号的表单都必须被视为等效的表单,并且发送系统应传输使用尽可能少的引用的表单。
1赞 zaTricky 10/31/2022
这很有趣。这意味着引用大写具有相似的 SHOULD/SHOULD NOT/MUST 要求。