2017-01-31 11 views
1

Мне нужно программно проверить электронную почту. Я использую этот код:Python: проверьте почту с smtplib и обработайте ошибки

resolver = dns.resolver.Resolver() 
    resolver.timeout = 3 
    resolver.lifetime = 3 
    mx_records = resolver.query(domain, 'MX') 
    for mxRecord in mx_records: 
     mxRecord = str(mxRecord.exchange) 
     host = socket.gethostname() 
     server = smtplib.SMTP(timeout=30) 
     server.set_debuglevel(0) 
     addressToVerify = var0 
     server.connect(mxRecord) 
     server.helo(host) 
     server.mail('[email protected]') 
     code, message = server.rcpt(str(addressToVerify)) 
     server.quit() 
     res_email = 'Not Found' 
     if code == 250: 
      result = 'Success' 
     else: 
      print "doesn't exist" 

Я получаю сообщение об ошибке, когда я запускаю этот код:

Connection unexpectedly closed 
Connection unexpectedly closed: [Errno 10054] 
[Errno 10061] 

Я попытался изменить значения тайм-аут, но это не помогло. Затем я попытался указать порт в smtplib.SMTP(), но указал 587, и это также не решило проблему.

Как я могу решить эту проблему?

+0

Вы хотите отправить или получить от известного сервера, для которого вы являетесь законным пользователем? –

+0

@BillBell Мне нужно только проверить адрес электронной почты –

+0

SMTP - это протокол отправки. Вам нужно либо poplib, либо imaplib в Python, в зависимости от того, является ли ваша электронная почта POP3 или некоторым вариантом IMAP. –

ответ

0

Вы можете скопировать код для запроса POP3-сервера из файла справки Python. Здесь он находится в слегка измененной форме.

import poplib, getpass 

pop = poplib.POP3('***********', port=110) 
pop.user('**********') 
pop.pass_('*********') 
print (pop.stat()) 
print (pop.list()[1]) 

Вам нужно только скопировать различные константы, такие как номер порта из вашего почтового клиента.

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

(43, 1104784) [b'1 15848 ', b'2 7889', b'3 7938 ', b'4 3705', b'5 28933 ', b'6 35479', b'7 12793 ', b'8 7094', b'9 10045 ', b'10 12793', b'11 17194 ', b'12 312802', b'13 12688 ', b'14 18431', b'15 24454 ' , b'16 17769 ', b'17 16223', b'18 14975 ', b'19 11951', b'20 13373 ', b'21 34949', b'22 23647 ', b'23 14958', b '24 22449 ', b'25 5068', b'26 14920 ', b'27 8611', b'28 10982 ', b'29 14311', b'30 7477 ', b'31 3852', b'32 8497 ', b'33 4086', b'34 7240 ', b'35 69458', b'36 19430 ', b'37 110263', b'38 2434 ', b'39 12043', b'40 5306 ' , b'41 10288 ', b'42 17164', b'43 74974 ']

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

Это означает, что было бы недостаточно просто использовать вышеуказанный выход в качестве проверки новых сообщений. Необходимо было бы записывать даты из заголовков из полученных сообщений на срок до двух недель для сравнения с данными на сервере.