检查电子邮件是不是存在,仅对gmail帐户有效,其他无效

Posted

技术标签:

【中文标题】检查电子邮件是不是存在,仅对gmail帐户有效,其他无效【英文标题】:Checking of whether email exist or not, only works for gmail accounts, others not working检查电子邮件是否存在,仅对gmail帐户有效,其他无效 【发布时间】:2017-11-21 04:15:09 【问题描述】:

我正在创建一个 python 函数来检查给定的电子邮件 ID 在 Python 中是否真的存在。这是我的代码:

def email_validate(email_address):
    addressToVerify = email_address
    domain_name = addressToVerify.split('@')[1]
    try:
        records = dns.resolver.query(domain_name, 'MX')
    except Exception as e:
        print e
        a = traceback.format_exc()
        print a
        return HttpResponse(json.dumps("success":False,"message":"Email Domain is not valid."), content_type="application/json")

    mxRecord = records[0].exchange
    mxRecord = str(mxRecord)

    server = smtplib.SMTP()
    server.set_debuglevel(0)

    # SMTP Conversation
    server.connect(mxRecord)
    server.helo(host)
    server.mail('me@domain.com')
    try:
        code, message = server.rcpt(str(addressToVerify))
        server.quit()
    except:
        a = traceback.format_exc()

    if code == 250:
         return HttpResponse(json.dumps("success":True,"message":"Email ID is valid."), content_type="application/json")
    else:
         return HttpResponse(json.dumps("success":False,"message":"Email ID is not valid."), content_type="application/json")

此代码适用于 Gmail 帐户,但它会为其他电子邮件 ID 提供错误。如果我尝试其他电子邮件 ID,则此行:

code, message = server.rcpt(str(addressToVerify))

报错... 另外,我应该如何检查其他电子邮件 ID?

【问题讨论】:

您是否尝试过一个单独的程序,将几个不同的手动编码输入到server.rcpt(str(addressToVerify)) 以验证它是否正常工作?另外,究竟是什么错误?你把它放在try 块中,所以你应该处理异常...... 你可以尝试使用validate_email包! 你得到什么错误? @AKHILMATHEW 您要验证哪些电子邮件域? 你试过了吗? validate_email(mail_id , check_mx = True) 这里的 mail_id 是一个字符串。为此,您也需要 pydns 包! 【参考方案1】:

RCPT 命令绝不是检查电子邮件验证的好主意,大多数 SMTP 服务器会在多次尝试后禁止您的 IP,或者忽略您的命令以保护其电子邮件免受垃圾邮件发送者的侵害。 验证电子邮件是否存在的唯一方法是发送验证电子邮件。

【讨论】:

我正在实施这种检查,因为我的大部分邮件都在退回,这可能会影响我的声誉。所以在发送电子邮件之前我需要验证它.. 在这种情况下,您应该联系 SMTP 服务器管理员并请求许可,您可以尝试的另一件事是尝试为同一域创建相同的电子邮件(雅虎、谷歌 ...)使用浏览器自动化并查看是否使用了用户名,但唯一可靠的方法是发送确认链接或令牌 我将收到大量电子邮件。我无法发送和确认 @AKHILMATHEW 让我知道你是否可以让它工作;我可以通过向垃圾邮件发送者出售这种技术而退休。或者说得更有建设性:你不能得到你想要的,因为绝大多数电子邮件服务器都因为垃圾邮件而关闭了支持。我很惊讶它甚至适用于 GMail,我猜他们对其他垃圾邮件预防方法非常有信心,因此启用此功能会带来净收益。 @MartijnPieters ,我多年来一直在做网络抓取和自动化,许多客户想要涉及电子邮件验证的东西,只是没有可靠的方法来做到这一点【参考方案2】:

如果您只需要检查您的 Google 域中的 G Suite 电子邮件,您可以使用这些:

1) 首先,您需要获得正确的凭据才能访问https://www.googleapis.com/auth/admin.directory.user.readonly 范围内的数据-- https://developers.google.com/admin-sdk/directory/v1/guides/delegation#delegate_domain-wide_authority_to_your_service_account

2) 其次,您可以使用使用这些凭据创建的服务对象来检查电子邮件是否存在:https://developers.google.com/admin-sdk/directory/v1/quickstart/python

【讨论】:

以上是关于检查电子邮件是不是存在,仅对gmail帐户有效,其他无效的主要内容,如果未能解决你的问题,请参考以下文章

使用电子邮件地址检查 PayPal 帐户是不是存在?

通过显示错误的 gmail 服务帐户发送

检查电子邮件地址是不是存在

如何将不存在的电子邮件地址转发到 GMail 中的特定帐户?

检查用户是不是激活了他/她的帐户的最有效方法?

尽快收到新邮件