我们如何通过程序检查任何电子邮件ID是否可交付(存在或不存在)?

时间:2019-02-13 14:13:32

标签: python smtplib

我有大量的电子邮件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提供随机结果,有时存在,有时不存在。 还有其他更好的方法吗?

2 个答案:

答案 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