Python在线验证邮箱真实性,支持批量验证
作者:Sec-Labs | 发布时间:
本程序只做学习用途,请勿非法用途
verifyemail Python3.6.5
Python在线验证邮箱真实性,支持批量验证,支持全部域名邮箱,支持全部域名邮箱,支持全部域名邮箱,支持全部域名邮箱
final_list = verify_istrue(['190758586@qq.com', '19075858666@qq.com'])
print(final_list) #{'190758586@qq.com': True, '19075858666@qq.com': False}
#2018-09-21 18:42:35,017 - verifyemail.py [line:23] - INFO: 正在查找邮箱服务器
#2018-09-21 18:42:35,030 - verifyemail.py [line:26] - INFO: 查找结果为:['mx3.qq.com', 'mx2.qq.com', 'mx1.qq.com']
#2018-09-21 18:42:35,030 - verifyemail.py [line:52] - INFO: 正在连接服务器...:mx2.qq.com
#2018-09-21 18:42:35,160 - verifyemail.py [line:56] - DEBUG: (250, b'newmx33.qq.com')
#2018-09-21 18:42:35,218 - verifyemail.py [line:59] - DEBUG: (250, b'Ok')
#2018-09-21 18:42:35,317 - verifyemail.py [line:62] - DEBUG: (250, b'Ok')
#2018-09-21 18:42:35,357 - verifyemail.py [line:56] - DEBUG: (250, b'newmx33.qq.com')
#2018-09-21 18:42:35,418 - verifyemail.py [line:59] - DEBUG: (250, b'Ok')
#2018-09-21 18:42:35,460 - verifyemail.py [line:62] - DEBUG: (550, b'Mailbox not found. http://service.mail.qq.com/cgi-#bin/help?subtype=1&&id=20022&&no=1000728')
项目地址
https://github.com/Tzeross/verifyemail
核心代码
verifyemail.py
'''
在线验证邮箱真实性
'''
import random
import smtplib
import logging
import time
import dns.resolver
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(filename)s [line:%(lineno)d] - %(levelname)s: %(message)s')
logger = logging.getLogger()
def fetch_mx(host):
'''
解析服务邮箱
:param host:
:return:
'''
logger.info('正在查找邮箱服务器')
answers = dns.resolver.query(host, 'MX')
res = [str(rdata.exchange)[:-1] for rdata in answers]
logger.info('查找结果为:%s' % res)
return res
def verify_istrue(email):
'''
:param email:
:return:
'''
email_list = []
email_obj = {}
final_res = {}
if isinstance(email, str) or isinstance(email, bytes):
email_list.append(email)
else:
email_list = email
for em in email_list:
name, host = em.split('@')
if email_obj.get(host):
email_obj[host].append(em)
else:
email_obj[host] = [em]
for key in email_obj.keys():
host = random.choice(fetch_mx(key))
logger.info('正在连接服务器...:%s' % host)
s = smtplib.SMTP(host, timeout=10)
for need_verify in email_obj[key]:
helo = s.docmd('HELO chacuo.net')
logger.debug(helo)
send_from = s.docmd('MAIL FROM:<3121113@chacuo.net>')
logger.debug(send_from)
send_from = s.docmd('RCPT TO:<%s>' % need_verify)
logger.debug(send_from)
if send_from[0] == 250 or send_from[0] == 451:
final_res[need_verify] = True # 存在
elif send_from[0] == 550:
final_res[need_verify] = False # 不存在
else:
final_res[need_verify] = None # 未知
s.close()
return final_res
if __name__ == '__main__':
final_list = verify_istrue(['190758586@qq.com',
'qwer111111111111995@163.com'
])
print(final_list)