我有大量的电子邮件地址要验证.最初我用正则表达式解析它们以抛弃那些完全疯狂的东西.我留下那些看起来合理但仍然可能包含错误的东西.
我想找到哪些地址有有效域名,所以给我me@abcxyz.com我想知道是否有可能发送电子邮件到abcxyz.com.
我想测试它是否与有效的A或MX记录相对应 - 是否有一种简单的方法只使用Python标准库?为了支持这个功能,我宁愿不为我的项目添加额外的依赖项.
标准库中没有DNS接口,因此您必须自己滚动或使用第三方库.
这不是一个快速变化的概念,因此外部库是稳定的并经过充分测试.
我用过与你的问题相同的任务就是PyDNS.
我的代码的粗略草图是这样的:
import DNS, smtplib DNS.DiscoverNameServers() mx_hosts = DNS.mxlookup(hostname) # Just doing the mxlookup might be enough for you, # but do something like this to test for SMTP server for mx in mx_hosts: smtp = smtplib.SMTP() #.. if this doesn't raise an exception it is a valid MX host... try: smtp.connect(mx[1]) except smtplib.SMTPConnectError: continue # try the next MX server in list
另一个可能比PyDNS更好/更快的库是dnsmodule,尽管它看起来自2002年以来没有任何活动,与2008年8月的PyDNS上次更新相比.
编辑:我还想指出,使用正则表达式无法轻松解析电子邮件地址.最好在标准库email.utils模块中使用parseaddr()函数(例如,请参阅我对这个问题的回答).