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