Answers:
标准邮箱命名约定定义为“ local-part @ domain”。与简单的“用户名”相比,现代用法允许更广泛的应用程序集。因此,由于长期存在的问题历史,当中间主机试图通过修改它们来优化传输时,本地部分务必只能由地址的域部分中指定的主机来解释和分配语义。
因此,是的,“ @”之前的部分可能区分大小写,因为它完全在主机系统的控制之下。但是实际上,没有广泛使用的邮件系统根据大小写区分不同的地址。
但是,@符号后的部分是域,根据RFC 1035第3.1节,
“名称服务器和解析器必须以不区分大小写的方式比较[域]”
简而言之,您可以安全地将电子邮件地址视为不区分大小写。
我知道这是一个老问题,但是我只想在这里发表评论:无论如何,电子邮件地址都区分大小写,大多数用户“非常不明智”地主动使用需要大写字母的电子邮件地址。他们很快就会停止使用该地址,因为他们会丢失很多邮件。(除非他们有使事情变得困难的特定原因,并且他们只希望收到他们认识的特定发件人的邮件。)
那是因为存在不完善的人以及不完善的软件((惊喜!),它将假定所有电子邮件都是小写的,因此,这些人和软件将使用地址的“小写版本”发送邮件,而不管其提供方式如何给他们。如果收件人无法接收到此类消息,则很快就会发现收件人丢失了很多消息,并切换到仅使用小写字母的电子邮件地址,或者将服务器设置为不区分大小写。
这篇文章太晚了,但是我有一点话要说...
>> "Are email addresses case sensitive?"
好吧,“取决于...”(TM)
一些组织实际上认为这是个好主意,他们的电子邮件服务器要求区分大小写。
因此,对于那些疯狂的地方,“是的,电子邮件区分大小写。”
注意:仅仅因为规范说您可以做某事并不意味着这样做是个好主意。
KISS的原则表明,我们的系统使用不区分大小写的电子邮件。
而健壮性原则表明我们接受区分大小写的电子邮件。
解:
这意味着如果此电子邮件已经存在:user@x.com
...,并且另一个用户出现并希望使用此电子邮件:USER@x.com
...不区分大小写的搜索逻辑将返回“该电子邮件已存在”错误消息。
现在,您要做出一个决定: 这种解决方案对您而言是否足够?
如果不是这样,您可以向那些需要支持区分大小写的电子邮件的客户收取便利费,并实施允许USER@x.com进入系统的自定义逻辑,即使user@x.com已经存在。
在这种情况下,您的电子邮件搜索/验证逻辑可能类似于以下伪代码:
if (user.paidEmailFee) {
// case sensitive email
query = "select * from users where email LIKE ' + user.email + '"
} else {
// case insensitive email
query = "select * from users where email ILIKE ' + user.email + '"
}
这样,您主要是在强制不区分大小写,但是如果客户使用的是支持这种废话的电子邮件系统,则可以让他们付费。
ps ILIKE是PostgreSQL关键字:http : //www.postgresql.org/docs/9.2/static/functions-matching.html
%
或更多可能的电子邮件_
query = ...
行替换为来解决以上所有注释。简单的query = // Insert case-sensitive/insensitive search here
注释,使对话远离SQL注入主题,并专注于您要显示的内容。换句话说,保持逻辑,而不是实现。它将使批评者保持沉默。
每@ l3x,这取决于。
显然,在两种常见情况下,正确答案可能有所不同,而在第三种情况下,答案并不那么普遍:
a)您是发送私人邮件的用户:
很少有现代化的电子邮件系统实施情况的敏感性,所以你可能罚款,忽略大小写,并选择您觉得什么样的情况下使用。无法保证您的所有邮件都会被递送-但是很少有邮件会受到负面影响,您不必担心。
b)您正在开发邮件软件:
请参阅底部的RFC5321 2.4摘录。
在开发邮件软件时,您希望符合RFC。你可以让自己的用户的电子邮件地址不区分大小写的,如果你想(和你应该)。但是为了符合RFC,您必须将外部地址视为区分大小写。
c)以员工身份管理企业拥有的电子邮件地址列表:
同一电子邮件收件人有可能多次添加到列表中,但使用了不同的大小写。在这种情况下,尽管地址在技术上有所不同,但可能导致收件人收到重复的电子邮件。您如何看待这种情况是在你类似情况)可能是罚款,将它们视为重复和删除重复项。最好将这些邮件视为特殊情况,方法是将“提醒”邮件发送到两个地址,询问它们是否重复,如果重复,则询问收件人希望使用哪个电子邮件地址。
从法律的角度来看,如果您从两个地址中删除未经确认/允许的重复副本,您可能要负责将私人信息/身份验证泄露给未经授权的地址,这仅仅是因为两个实际分开的收件人在不同的情况下拥有相同的地址。
摘自RFC5321 2.4:
邮箱的本地部分必须视为区分大小写。因此,SMTP实现必须注意保留邮箱本地部分的大小写。特别是,对于某些主机,用户“史密斯”不同于用户“史密斯”。但是,利用邮箱本地部分的区分大小写会阻碍互操作性,因此不建议使用。