为什么Django只降低normalize_email中电子邮件地址的域名部分?

时间:2017-05-22 16:15:20

标签: django

我注意到有人设法在一个用Django制作的网站上注册了两次,只有一封电子邮件Foo@example.comfoo@example.com

我检查了代码,发现BaseUserManager中有一个名为normalize_email的类方法,根据文档,...

Normalizes the email address by lowercasing the domain part of it.

我知道电子邮件地址可能类似JaneDoe@example.com,如果@之前的部分也被转换,则会省略名字和姓氏之间的区别。然而,上述问题上升了。为什么以后不区分大小写地检查电子邮件地址的唯一性?它是否有合理的解释或是否需要报告和修复?

1 个答案:

答案 0 :(得分:4)

根据RFC 5322中的规范,本地部分区分大小写,而域部分不区分大小写。这意味着Foo@example.comfoo@example.com实际上是不同的地址,而foo@Example.comfoo@example.com是相同的。

但是,每个电子邮件服务都可以随意实现本地寻址。许多电子邮件服务选择将本地部分视为不区分大小写。某些电子邮件服务(例如Gmail)选择仅将可选+符号之前的部分解释为您的实际邮件地址。然后可以使用后缀对邮件进行排序,例如,所有发往foo+stackoverflow@example.com的邮件都会传递到foo@example.com,并可以分类到stackoverflow文件夹。这些在技术上是所有不同的地址,但电子邮件服务将它们解释为相同的地址。

Django遵循RFC,因此只有在保证根据规范指向相同地址时才会对地址进行规范化。