python:正确的方法验证电子邮件是否存在

Sam*_*ohn 12 python smtp spam-prevention email-validation email-spam

我试图通过首先解析其 dns 来验证电子邮件是否确实存在,然后使用以下代码检查电子邮件是否有效:

    email = test@cisco.com
    domain = email.split("@")[-1]
    records = dns.resolver.query(domain, 'MX')
    mxRecord = records[0].exchange
    mxRecord = str(mxRecord)
    server.connect(mxRecord)
    server.helo(host)
    server.mail('myemail@gmail.com')
    code, message = server.rcpt(str(email))
    server.quit()
    if code == 250:
        print('valid email', message) 
    else:
        print('invalid email', message)
Run Code Online (Sandbox Code Playgroud)

这几次有效,但是当我发送多个请求时,我收到如下消息:

“5.7.1 服务不可用,客户端主机 [122.166.xxx.xxx] 使用 Spamhaus 被阻止。要请求从此列表中删除,请参阅 http://www.spamhaus.org/lookup.lasso (AS160312312) [BL2NAM02FT12312.eop-nam02。 prod.protection.outlook.com]'"

我知道他们正试图阻止我的 IP 地址,因为它认为它是垃圾邮件。

以下是我的问题:

  • 有没有正确的方法来进行这种类型的电子邮件验证,而不会被标记为垃圾邮件?当我在我的系统上运行代码并且只是为电子邮件提供一个虚拟值时,它是否被标记为垃圾邮件

server.mail('myemail@gmail.com')

  • 是否可以使用一些代理来做到这一点?我的用例需要验证 100 个电子邮件地址。我看到一些可用于电子邮件验证的商业 api,但目前对我来说不可行。

Ped*_*ito 5

截至 2021 年,我能找到的最新的 python3 包是py3-validate-email

基本用法:

from validate_email import validate_email
is_valid = validate_email(email_address='example@example.com', check_regex=True, check_mx=True, from_address='my@from.addr.ess', helo_host='my.host.name', smtp_timeout=10, dns_timeout=10, use_blacklist=True, debug=False)
Run Code Online (Sandbox Code Playgroud)

安装:

pip3 install py3-validate-email
Run Code Online (Sandbox Code Playgroud)


小智 -2

尝试这个。

pip install validate_email

from validate_email import validate_email
is_valid = validate_email('example@example.com', verify=True)
Run Code Online (Sandbox Code Playgroud)

访问https://pypi.org/project/validate_email/了解更多信息。

  • 这个包也使用同样的方法。事实上我尝试过这个包。它根本不起作用。https://github.com/syrusakbary/validate_email/issues/89 有人指出了同样的问题 (4认同)