我有大量的电子邮件ID,我必须过滤掉所有有效的电子邮件ID,无论是否存在有效手段。
我正在尝试为此实现smtplib
,但是我不确定正确的方法。它为相同的电子邮件ID提供随机结果,该电子邮件ID不存在(我已经手动检查过),但有时显示存在,但有时不退出。
有没有更好的方法或可行的方法?
import socket
import smtplib
import dns.resolver
def get_connection_handler():
try:
# Get local server hostname
# host = socket.gethostname()
host = socket.getfqdn()
username = 'myemilid@gmail.com' #used with working email_id
password = 'password' #password
# SMTP lib setup (use debug level for full output)
server = smtplib.SMTP('smtp.gmail.com', 587, timeout=30)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login(username, password)
return host, server
except Exception as e:
return None, None
def validate_email_id(server, host, email_list):
for each_email_id in email_list:
records = dns.resolver.query(each_email_id.split('@')[-1], 'MX')
mxRecord = records[0].exchange
mxRecord = str(mxRecord)
# SMTP Conversation
server.connect(mxRecord)
server.helo(host)
server.mail('myemailid@gmail.com')
addressToVerify = 'ramanzzzzzooo@somedomain.com'
code, message = server.rcpt(str(addressToVerify))
email_list = ['email_id1@somedomain1.com','email_id1@somedomain2.com','email_id1@somedomain5.com','email_id1@somedomain4.com','email_id1@somedomain3.com',]
server,host = get_connection_handler()
validate_email_id(server,host,email_list)
它为相同的email_id
提供随机结果,有时存在,有时不存在。
还有其他更好的方法吗?
答案 0 :(得分:1)
在这种情况下,validate email python软件包可以为您提供帮助。根据文档,它用于检查电子邮件是否“有效,格式正确且确实存在”。
使用pip install validate_email
安装后,您可以像这样使用它:
from validate_email import validate_email
is_valid = validate_email('example@example.com')
如果电子邮件有效,则返回true
,否则返回false
。
答案 1 :(得分:1)
您可以检查语法是否正确,只需查找RFC,阅读并运行即可!唯一理智的检查实际上是everything@anything.anything。因此建议使用@Nick Predey之类的软件包进行验证,或者仅检查@和..
问题的第二部分很有趣。不再有方法检查电子邮件地址是否实际存在。在早期,人们常常用手指来测试用户是否存在于主机上。如今,该协议已不再用于反垃圾邮件(https://en.wikipedia.org/wiki/Finger_protocol)