Python: использование smtplib для проверки электронной почты

Я пытаюсь подтвердить электронную почту, и у меня есть некоторые трудности:

Часто я получаю некоторые ошибки, например

dns.resolver.NoAnswer: The DNS response does not contain an answer to the question: siemens.ru. IN MX

Что это значит? Я не могу проверить электронную почту или другое? Или я должен попробовать еще раз?

smtplib.SMTPServerDisconnected: Connection unexpectedly closed

Есть ли способ решить эту проблему? Появляется очень часто.

dns.resolver.NXDOMAIN: None of DNS query names exist: aruanaestetik.com., aruanaestetik.com.

Если я получу эту ошибку, я должен пропустить электронную почту с этим доменом, верно?

Также когда я пытаюсь получить mxrecords, иногда их количество больше одного. Должен ли я использовать каждый из них для проверки электронной почты, или я могу использовать случайный?

Я использую следующий код, чтобы сделать это:

    resolver = dns.resolver.Resolver()
    resolver.timeout = 60
    resolver.lifetime = 60
    mx_records = resolver.query(dom, 'MX')
    mxRecord = str(mx_records[0].exchange)
    host = socket.gethostname()
    server = smtplib.SMTP()
    server.set_debuglevel(0)
    server.connect(mxRecord)
    server.helo(host)
    server.mail('me@domain.com')
    code, message = server.rcpt(str(addressToVerify))
    server.quit()

Также я указываю только свою почту в server.mail(), но я пытаюсь войти туда и после этого проверять электронную почту, но не получаю никакого результата, поэтому я выхожу. Почему это происходит?

2 ответа

Решение

В моем ответе не будет кода, я хотел бы описать процесс и сосредоточиться на обработке ошибок.

Адрес электронной почты имеет форму user@domain.com

Чтобы проверить часть домена, вы должны получить записи MX из DNS. Если (и только если) нет MX, следует использовать запись A. Я бы посчитал такой случай неправильно настроенной почтовой системой.

При поиске DNS могут возникнуть две группы ошибок: временные (например, тайм-аут) и постоянные (например, NXDOMAIN). В случае временных ошибок поиск должен быть повторен позже.

Обычно есть несколько записей MX. У них есть числовой приоритет. Меньшее число = более высокий приоритет. Почта всегда перемещается с более высокого номера MX на более низкий номер MX.

Чтобы проверить пользовательскую часть адреса, вы должны связаться с сервером с наивысшим приоритетом. Все остальные являются серверами резервного копирования, и довольно часто они не имеют доступа к пользовательской базе данных. Они просто принимают всю почту для собственного домена.

Существует небольшая вероятность того, что адрес вашего отправителя будет отклонен по любой причине. Используйте пустой адрес <> зарезервировано для сообщений об ошибках.

Опять же, существует две группы ошибок при связи с SMTP-сервером. К счастью, ответы SMTP имеют трехзначный код. Первая цифра - 2 для успеха, 4 для переходных ошибок (будет повторена позже) и 5 ​​для постоянных сбоев.

И последнее замечание: сделайте SMTP RSET перед выходом, если вы не собираетесь отправлять электронное письмо.

Ты проверил mx вручную?

Похоже, что порт 25 не открыт для подключения и запись mx не найдена, поэтому он возвращает ошибку, no mx record exists при ручной проверке aruanaestetik.com появляется сообщение no mx recorf found

Другие вопросы по тегам