我试图通过首先解析其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)
这工作几次,但是当我发送多个请求时,我收到一条消息,如:
“ 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')
答案 0 :(得分:1)
尝试一下。
pip install validate_email
from validate_email import validate_email
is_valid = validate_email('example@example.com', verify=True)
答案 1 :(得分:1)
dnslib
中的此方法不适用于批量电子邮件验证。
因为如果您发送大量电子邮件验证请求,则smtp服务器会阻止您。
那么您应该通过pysocks
库使用代理。您也可以在medium上看到此信息:
import socket
import socks # PySocks
from smtplib import SMTP
class SocksSMTP(SMTP):
def __init__(self,
host='',
port=0,
local_hostname=None,
timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
source_address=None,
proxy_type=None,
proxy_addr=None,
proxy_port=None,
proxy_rdns=True,
proxy_username=None,
proxy_password=None,
socket_options=None):
self.proxy_type=proxy_type
self.proxy_addr=proxy_addr
self.proxy_port=proxy_port
self.proxy_rdns=proxy_rdns
self.proxy_username=proxy_username
self.proxy_password=proxy_password
self.socket_options=socket_options
# if proxy_type is provided then change the socket to socksocket
# else behave like a normal SMTP class.
if self.proxy_type:
self._get_socket = self.socks_get_socket
super(SocksSMTP, self).__init__(host, port, local_hostname, timeout, source_address)
def socks_get_socket(self, host, port, timeout):
if self.debuglevel>0:
self._print_debug('connect: to', (host, port), self.source_address)
return socks.create_connection((host, port),
timeout=timeout,
source_address=self.source_address,
proxy_type=self.proxy_type,
proxy_addr=self.proxy_addr,
proxy_port=self.proxy_port,
proxy_rdns=self.proxy_rdns,
proxy_username=self.proxy_username,
proxy_password=self.proxy_password,
socket_options=self.socket_options)
答案 2 :(得分:0)
截至2020年,我能找到的最新的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)
安装:
pip3 install py3-validate-email
答案 3 :(得分:0)
为什么不发送实际的电子邮件?从不同的 ip 查询 100 封左右的独特电子邮件并发送实际电子邮件。使用 spintax 和速率限制将标题、主题行和消息更改为每封电子邮件每小时 8 次以下,您应该可以毫无问题地获得规模。 Spamhaus 会自动将您标记为从虚假帐户发送并超过限制......对于未经处理的电子邮件帐户,每小时大约 8 次。也不要在您生成的电子邮件中加入与销售相关的信息。