【问题标题】:How are emails verified for existance? [duplicate]如何验证电子邮件是否存在? [复制]
【发布时间】:2020-06-08 04:41:24
【问题描述】:

我正在构建一个 Web 服务,但一直在验证电子邮件地址。除了典型的正则表达式验证之外,我还看到一些服务验证电子邮件地址是否真的存在。

对我来说,域解析是有意义的,并检查 DNS 记录中是否存在 MX 条目,但它们如何超越并检查实际收件人是否存在?

例如这样的服务:https://emailverification.whoisxmlapi.com/api

他们在技术上是如何做到这一点的?我有自己的网络服务器,它做对了。任何帮助表示赞赏!

【问题讨论】:

  • 你想做什么?如果您批量购买电子邮件地址来构建垃圾邮件列表,请忘记它。如果人们注册了您的时事通讯或其他内容,请向他们发送一封确认电子邮件(即验证)。您可能需要查看 GDPR。

标签: email email-verification


【解决方案1】:

检查 MX 记录是第一步。之后,您通过这些记录提供的地址连接到 SMTP 服务器。那么:

  1. 你可以发送RCPT TO: <mail_to_check>命令,看看SMTP服务器有没有响应。

    • 如果用户存在,您将获得250 2.1.5 Recipient OK
    • 否则,您将收到5.1.1 DSN
  2. 您可以发送VRFY <mail_to_check> 命令,但是根据我的经验,很少有服务器支持此命令。

注意事项

请注意,此方法在 100% 的情况下都不起作用。以下是一些潜在问题:

  • 一些服务器只是明确禁用此功能,以避免机器人通过其用户列出。
  • 灰名单:一些服务器阻止来自未知 IP 的第一个连接,并允许后续连接。
  • 注意捕捉电话提供商,它们接受*@mydomain.com,但并不一定意味着收件箱实际上属于某人。
  • 如果您从同一 IP 向一台服务器发送过多请求,则该 IP 很有可能会被列入黑名单。

示例演示

以下是来自another SO thread 的此类流的输出。它找到stackoverflow.com的MX记录,并使用telnet连接到SMTP服务器并发送/解析SMTP命令。

C:\>nslookup -q=mx stackoverflow.com
Non-authoritative answer:
stackoverflow.com       MX preference = 40, mail exchanger = STACKOVERFLOW.COM.S9B2.PSMTP.com
stackoverflow.com       MX preference = 10, mail exchanger = STACKOVERFLOW.COM.S9A1.PSMTP.com
stackoverflow.com       MX preference = 20, mail exchanger = STACKOVERFLOW.COM.S9A2.PSMTP.com
stackoverflow.com       MX preference = 30, mail exchanger = STACKOVERFLOW.COM.S9B1.PSMTP.com

C:\>telnet STACKOVERFLOW.COM.S9A1.PSMTP.com 25
220 Postini ESMTP 213 y6_35_0c4 ready.  CA Business and Professions Code Section 17538.45 forbids use of this system for unsolicited electronic mail advertisements.

helo hi
250 Postini says hello back

mail from: <me@myhost.com>
250 Ok

rcpt to: <fake@stackoverflow.com>
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 w41si3198459wfd.71

披露

我运行Reacher,这是一个实时电子邮件验证 API。我的代码是用 Rust 编写的,并且是 100% 开源的。如果您想要更强大的解决方案,请查看:

https://github.com/amaurymartiny/check-if-email-exists

为了克服上述注意事项,我设法验证了大约 80% 的电子邮件我的客户检查过。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2011-03-03
    • 2011-02-14
    • 2012-10-13
    • 1970-01-01
    • 2017-02-27
    • 2021-05-16
    • 2012-12-31
    • 2012-10-30
    相关资源
    最近更新 更多