使用 SMTP 验证来验证电子邮件地址是一个好习惯吗?

问题描述 投票:0回答:3

假设我有一个网站,其某些功能需要电子邮件验证(例如用户注册)。当然,我会使用正则表达式验证电子邮件,但有一次我在别人的代码中看到了 SMTP 验证。 SMTP 验证有什么好处和坏处?

我可以假设以下优点和缺点:

优点:

  • 我们可以检查一些电子邮件地址是否存在(并非所有 SMTP 服务器都允许此功能)。

缺点:

  • 我们的网站可能会被屏蔽
  • 也许我们可以用它来让网络服务器宕机。网络服务器将获取电子邮件地址的域部分并向其发出请求。我们可以创建假的 SMTP 服务器,该服务器将接收请求,但响应会造成很大的延迟。也许如果我们强迫网络服务器进行数十次这样的检查,它将无法回答其他客户端。
  • 并非所有 SMTP 服务器都提供此功能。

请有建设性。

smtp email-validation
3个回答
9
投票

“SMTP 验证”我认为是指 SMTP

VRFY
命令,在当今时代,如果你相信它,那你就是傻瓜了。如果您是垃圾邮件发送者,这是一个很棒的功能,因为它允许您枚举给定服务器的电子邮件地址。

头脑正常的人不会将此命令暴露给互联网并让它以

252 send some mail, i'll try my best
以外的任何内容进行响应,即“我只会在实际邮件交易期间验证电子邮件地址”。

如今,VRFY唯一的

合理
用途是作为垃圾邮件过滤设备和隐藏在其后面的邮件服务器之间的内部接口。

TL;DR 不要使用“SMTP 验证”,它会非常不可靠充其量

如果您想验证用户是否输入了有效的电子邮件地址,请向其发送一封包含激活链接/代码的电子邮件。


0
投票

我知道这个话题有点老了,但当我尝试实现类似的东西时我遇到了这个问题,只是想分享我的想法。

就我而言,我有一个注册表单,在线平台的客户可以在其中输入他们的电子邮件地址(这可能已经花费了金钱才能将他们带到那里,因为有些是通过付费广告来的)。无论如何,他们必须双重选择。所以最终有一封确认的电子邮件不是问题。

但是客户选择了一个用户名,输入了一堆数据(包括一个有拼写错误的电子邮件地址)。结果是什么?对,用户没有收到确认邮件,无法继续。他可能认为它会稍后到达并做其他事情。他很可能完全忘记了登记并消失了。即使他不这样做,他也必须重新填写表格,选择一个不太吸引人的用户名,或者要求管理员更改数据库中的电子邮件。

就我而言,当用户更改到另一个输入字段时,我已经将电子邮件地址传输到网络服务器。这样做是为了检查是否已有具有相同地址的帐户。因此很容易在服务器端添加一些额外的检查。

第一件事是简单的语法检查。没有多大帮助,但出于安全原因无论如何都需要进一步处理。

然后地址被分为本地部分和域部分。虽然我们不能在不询问服务器的情况下谈论本地部分,但我们仍然可以检查域部分是否输入正确。该脚本唯一执行的操作是检查该域是否有 MX 服务器。如果列表为空,则域部分中存在拼写错误的可能性很高。

如果您想更进一步,您仍然可以使用 VRFY 或尝试发送一封虚假电子邮件,您在 RCPT TO 后中止。如果服务器告诉您邮箱存在或者要求您发送邮件并看看会发生什么,您仍然不能说出任何可靠的话。但我想在负面情况下,您可以非常确定实际上不存在具有该名称的邮箱。 不过,我会使用一些便宜的外部云服务器来代理这些 smtp 检查,以免损害 Web 服务器的声誉。

另一种方法是在发送注册表后跟踪激活邮件。再次获取收件人邮件服务器对 Web 应用程序的响应是一项相当多的工作,您甚至需要一些 ajax 来将其显示在浏览器中。但在这种情况下,如果错误,您可以在激活邮件已发送页面上要求客户更正。

最终,这种优化转化漏斗的方式,你绝对必须评估它是否值得付出努力。


-1
投票

除了 Sammitch 的回答之外,还有通过 API 提供的电子邮件验证服务,可以以合理的价格提供 SMTP 验证(有时会深入到邮箱级别)。

您可以通过简单的 Google 搜索找到这些内容,但我听说 LeadSpend 和 QAS(Experian 子公司)是其中最好的。

© www.soinside.com 2019 - 2024. All rights reserved.