跳至内容

编码食谱/验证电子邮件地址

来自维基教科书,开放世界中的开放书籍

正则表达式?

[编辑 | 编辑源代码]

有很多很多提出的正则表达式解决方案来解决这个问题,但是电子邮件地址格式 如此复杂,以至于仅用正则表达式很难做到。另一方面,大多数人实际使用的电子邮件地址都属于标准的一个小子集,因此可以在互联网上广泛地找到各种可用正则表达式,其准确性各不相同。如果你想看看一个执行电子邮件验证过程子集的酷炫正则表达式,请仔细观察这个;这里还有一些快速但不完全完美的解决方案这里

实用解决方案

[编辑 | 编辑源代码]

由于解析电子邮件地址非常困难,因此甚至尝试解析也没有意义;特别是对于某人来说,提供一个格式正确但仍然无法工作的电子邮件地址将是微不足道的。这意味着检测电子邮件地址是否有效的最佳方法是简单地向其发送一封电子邮件。如果你能够验证电子邮件是否已收到,那么你就可以确定电子邮件地址是有效的(尽管它不能保证在任何时间段内都有效,因为许多服务都提供临时电子邮件地址)。

最常见的方法是向某人发送一封电子邮件,其中包含指向具有长随机字符串附加的 http 服务的链接,只有电子邮件和你的服务器包含随机密钥,因此某人必须阅读电子邮件才能找到正确的链接。

随机字符串的目的是减少某人可以让服务器相信电子邮件地址存在,而实际上它不存在的可能性。例如,假设电子邮件中发送的链接形式为 http://myserver.com/[email protected]。某人可以使用现有的有效电子邮件地址查看模式,并随后使用任何随机电子邮件地址调用服务器,即使没有收到包含链接的实际邮件。

某些服务器在打开链接时需要身份验证。例如,声称电子邮件地址的用户必须在验证时提供其用户 ID 和密码。虽然这对于验证页面上显示的数据的机密性(包括地址已被验证为现有地址的声明)很有用,但它不能防止注册不存在的地址。只有上面描述的长期随机字符串才能做到这一点。

还要注意,字符串必须仅从客户端的角度来看是随机的,不一定从服务器的角度来看是随机的。例如,服务器可以对 url 进行数字签名,并验证签名。在这种情况下,服务器不需要存储随机密钥才能验证它。

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书