Python 电子邮件验证脚本_广告事务处论坛_乱七八糟_村长黑科技

Python 电子邮件验证脚本

Python 徽标

电子邮件验证并不是什么秘密。它只需要一点 SMTP 协议和您选择的编程语言的知识。为了证明它有多么简单,我将使用一个简单的 Python 脚本向您介绍基础知识。

警告和免责声明

虽然此过程可以帮助您快速启动并运行,但您需要注意以下风险:

  • 如果这样做太多,您将被列入黑名单(例如Spamhaus),尤其是当您使用来自ISP的动态 IP 地址时。
  • B2C地址:这对于拥有自己的程序和垃圾邮件规则(eghotmail 和 yahoo)的大公司来说效果不佳。
  • 错误结果:某些邮件服务器会给出错误结果,例如,catch-all 服务器会接受所有传入的电子邮件地址,通常会将传入的电子邮件转发到中央邮箱。Yahoo 地址显示了这种 catch-all 行为。

该脚本本身不是企业级电子邮件验证;您将无法使用它处理数百万个地址。

电子邮件验证

句法

在开始进行网络IO之前,我们应该先进行基本检查,看看电子邮件是否确实类似于电子邮件地址。我们可以使用一些简单的正则表达式来执行此操作。

import re

addressToVerify ='info@scottbrady91.com'
match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)

if match == None:
	print('Bad Syntax')
	raise ValueError('Bad Syntax')

DNS

接下来,我们需要获取目标域的MX记录,以便启动电子邮件验证过程。请注意,RFC 允许您在A记录上拥有邮件服务器,但这超出了本文和演示脚本的范围。

import dns.resolver

records = dns.resolver.query('scottbrady91.com', 'MX')
mxRecord = records[0].exchange
mxRecord = str(mxRecord)

邮箱

现在我们已经获得了所需的所有预检信息,我们现在可以查明该电子邮件地址是否存在。

import socket
import smtplib

# Get local server hostname
host = socket.gethostname()

# SMTP lib setup (use debug level for full output)
server = smtplib.SMTP()
server.set_debuglevel(0)

# SMTP Conversation
server.connect(mxRecord)
server.helo(host)
server.mail('me@domain.com')
code, message = server.rcpt(str(addressToVerify))
server.quit()

# Assume 250 as Success
if code == 250:
	print('Success')
else:
	print('Bad')

我们在这里所做的是用于发送电子邮件的 SMTP 对话的前三个命令,在发送任何数据之前停止。

实际发出的 SMTP 命令是:HELO、MAIL FROM 和 RCPT TO。我们感兴趣的是 RCPT TO 的响应。如果服务器返回 250,则表示我们可以发送电子邮件(电子邮件地址存在),否则服务器将返回不同的状态代码(通常是 550),表示该服务器上不存在电子邮件地址。

这就是电子邮件验证!

GitHub

您可以在GitHub 上找到完整的 Python 脚本。此脚本使用键盘输入电子邮件地址进行验证,并在错误处理和调试方面有一些附加功能。

请注意,该脚本使用 Python 3 和 dnspython3 库。

PHP 电子邮件验证脚本

有一个适用于PHP的类似脚本,您也可以在GitHub上找到它。

请登录后发表评论

    • 村长黑科技的头像_村长黑科技村长黑科技徽章-年度国民爱豆_村长黑科技等级-LV7_村长黑科技作者超级版主0
    • 村长黑科技的头像_村长黑科技村长黑科技徽章-年度国民爱豆_村长黑科技等级-LV7_村长黑科技作者超级版主0