2017-02-09 20 views
0

я стараюсь, чтобы проверить электронную почту, и у меня есть некоторые трудности: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('[email protected]') 
    code, message = server.rcpt(str(addressToVerify)) 
    server.quit() 

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

ответ

1

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

Адрес электронной почты имеет вид [email protected]

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

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

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

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

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

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

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

+0

Спасибо за объяснение. Но что такое 'A record'? –

+0

И любой способ «сражаться» с «smtplib.SMTPServerDisconnected: соединение неожиданно закрыто»? –

+0

@PetrPetrov Запись «A» - это тип записей DNS, сопоставляющих имя с его IP ** A ** ddress, точнее IPv4-адрес. Соответствующая запись IPv6 «A» называется «AAAA». [https://en.wikipedia.org/wiki/List_of_DNS_record_types] – VPfB

1

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

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

+0

Нет, я использую 'dns.resolver.query (domain, 'MX')' для этого. Можете ли вы объяснить, если домен содержит много «mx», я могу проверить адрес электронной почты с каждым из них? –

+0

dns.resolver.query (домен, 'MX') возвращает ошибку, о которой вы спрашивали, когда mx не может быть найден и/или p25 закрыт, да, вы можете проверять электронную почту с каждым из них, но только один может разрешить вход в систему при попытке для отправки – minime