Как мы можем проверить, что любой Email ID является доставляемым или нет (существует или не существует) через программу? - PullRequest
0 голосов
/ 13 февраля 2019

У меня огромный список идентификаторов электронной почты, и я должен отфильтровать все действительные идентификаторы электронной почты, действительные средства действительно существуют или нет.

Я пытаюсь реализовать smtplib для этого, но я не уверено правильном пути.Это дает случайный результат для того же идентификатора электронной почты, который не существует (я проверил вручную), но он показывает, что иногда существует, а иногда не выходит.

Есть ли какой-нибудь лучший или доступный метод работы?

import socket
import smtplib
import dns.resolver

def get_connection_handler():
    try:
        # Get local server hostname
        # host = socket.gethostname()
        host = socket.getfqdn()
        username = 'myemilid@gmail.com' #used with working email_id
        password = 'password' #password

        # SMTP lib setup (use debug level for full output)
        server = smtplib.SMTP('smtp.gmail.com', 587, timeout=30)
        server.set_debuglevel(1)

        server.ehlo()
        server.starttls()
        server.login(username, password)
        return host, server
    except Exception as e:
        return None, None


def validate_email_id(server, host, email_list):

    for each_email_id in email_list:
        records = dns.resolver.query(each_email_id.split('@')[-1], 'MX')
        mxRecord = records[0].exchange
        mxRecord = str(mxRecord)

        # SMTP Conversation
        server.connect(mxRecord)
        server.helo(host)

        server.mail('myemailid@gmail.com')
        addressToVerify = 'ramanzzzzzooo@somedomain.com'
        code, message = server.rcpt(str(addressToVerify))


email_list = ['email_id1@somedomain1.com','email_id1@somedomain2.com','email_id1@somedomain5.com','email_id1@somedomain4.com','email_id1@somedomain3.com',]


server,host = get_connection_handler()
validate_email_id(server,host,email_list)

Это дает случайный результат для того же email_id, иногда существует, а иногда нет.Есть ли другой лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы можете проверить правильность синтаксиса, просто посмотрите RFC, прочитайте его и запустите!Единственная вменяемая проверка - это что-нибудь на самом деле.Так что vaildate с пакетом, подобным предложенному @Nick Predey, или проверяйте только @ и ..

Вторая часть вашего вопроса интересна.Больше нет способа проверить, существует ли адрес электронной почты на самом деле.В первые дни нужно было проверить, существует ли пользователь на хосте.В настоящее время этот протокол больше не используется в борьбе со спамом (https://en.wikipedia.org/wiki/Finger_protocol)

0 голосов
/ 13 февраля 2019

Пакет validate * python может помочь вам в этой ситуации.Согласно документации, он используется для проверки того, является ли электронная почта «действительной, правильно отформатированной и действительно существующей».

После установки, используя pip install validate_email, вы можете использовать его следующим образом:

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

, который возвращает true, если электронная почта верна, false, если нет.

...