如何在不被IP阻止的情况下验证电子邮件是否存在?

2024-06-15 23:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python验证电子邮件,首先我做了一个简单的语法检查,它可以正常工作,然后我继续检查SMTP,它可以工作,但是如果我运行整个数据集,我的IP将被禁止,有没有办法在不禁止我的IP的情况下进行检查

代码如下:

def check_email(email):
    # Address used for SMTP MAIL FROM command
    fromAddress = 'corn@bt.com'

    # Simple Regex for syntax checking
    regex = '^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$'

    # Email address to verify
    addressToVerify = str(email)

    # Syntax check
    match = re.match(regex, addressToVerify)
    if match == None:
        print('Bad Syntax')
        raise ValueError('Bad Syntax')

    # Get domain for DNS lookup
    splitAddress = addressToVerify.split('@')
    domain = str(splitAddress[1])

    # MX record lookup
    records = dns.resolver.query(domain, 'MX')
    mxRecord = records[0].exchange
    mxRecord = str(mxRecord)
    print(mxRecord)

    # SMTP lib setup (use debug level for full output)
    server = smtplib.SMTP()
    server.set_debuglevel(0)

    # SMTP Conversation
    server.connect(mxRecord)
    server.helo(server.local_hostname)  ### server.local_hostname(Get local server hostname)
    server.mail(fromAddress)
    code, message = server.rcpt(str(addressToVerify))
    server.quit()

    # print(code)
    # print(message)

    # Assume SMTP response 250 is success
    if code == 250:
        return ("True")
    else:
        return ("False")

谢谢


Tags: forserveremaildomainlocalmatchcodesmtp
1条回答
网友
1楼 · 发布于 2024-06-15 23:19:15

这是我写的参考代码,它成功地为我工作,你也可以试试这个

!python setup.py install

导入DNS库并获取邮件交换器查询:

from dns import resolver

try:
    mx_record = resolver.query('gmail.com', 'MX')

    exchanges = [exchange.to_text().split() for exchange in mx_record]
except (resolver.NoAnswer, resolver.NXDOMAIN, resolver.NoNameservers):
    exchanges = []

验证,无论电子邮件地址和域名是否存在

import re
import smtplib
import dns.resolver
fromAddress = 'user1@testmail.com'
#Simple Regex for syntax checking
regex = '^[_a-z0–9-]+(.[_a-z0–9-]+)@[a-z0–9-]+(.[a-z0–9-]+)(.[a-z]{2,})$'
# Email address to verify
inputAddress = input('Please enter the emailAddress to verify:')
addressToVerify = str(inputAddress)
# # Syntax check
match = re.match(regex, addressToVerify)
if match == None:
print('Bad Syntax')
raise ValueError('Bad Syntax')
# Get domain for DNS lookup
splitAddress = addressToVerify.split('@')
domain = str(splitAddress[1])
print('Domain:', domain)
# MX record lookup
records = dns.resolver.query(domain, 'MX')
mxRecord = records[0].exchange
mxRecord = str(mxRecord)
# SMTP lib setup (use debug level for full output)
server = smtplib.SMTP()
server.set_debuglevel(0)
# SMTP Conversation
mailserver = smtplib.SMTP('mail.gmx.com',587)
server.connect(mxRecord)
server.helo(server.local_hostname) ### server.local_hostname(Get local server hostname)
server.mail(fromAddress)
code, message = server.rcpt(str(addressToVerify))
server.quit()

if code == 250:
    print('Success')
else: 
    print('Bad')

相关问题 更多 >