python: правильный метод проверки наличия электронной почты - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь проверить, действительно ли электронная почта существует, сначала разрешив ее 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 ')

  • Можно ли использовать для этого какой-нибудь прокси?Мой вариант использования требует подтверждения сотен адресов электронной почты.Я вижу некоторые коммерческие API-интерфейсы, доступные для проверки электронной почты, но в настоящий момент они не осуществимы для меня.

Ответы [ 2 ]

0 голосов
/ 19 августа 2019

Этот метод в 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)
0 голосов
/ 30 ноября 2018

Попробуйте это.

pip install validate_email

from validate_email import validate_email
is_valid = validate_email('example@example.com', verify=True)

Посетите https://pypi.org/project/validate_email/ для получения дополнительной информации.

...