2017-01-31 4 views
1

Ich muss E-Mails programmgesteuert überprüfen. Ich verwende diesen Code:Python: Mail mit smtplib überprüfen und Fehler behandeln

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" 

ich einen Fehler empfangen, wenn ich diesen Code ausführen:

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

Ich habe versucht, Werte von Timeout zu ändern, aber es hat nicht geholfen. Ich habe dann versucht, den Port in smtplib.SMTP() anzugeben, aber angegeben, und das Problem wurde nicht behoben.

Wie kann ich dieses Problem lösen?

+0

Sie möchten an einen bekannten Server senden oder von diesem empfangen, für den Sie ein legitimer Benutzer sind? –

+0

@BillBell Ich brauche nur E-Mails zu überprüfen –

+0

SMTP ist das sendende Protokoll. Sie benötigen entweder poplib oder imaplib in Python, abhängig davon, ob Ihre E-Mail POP3 oder eine Variante von IMAP ist. –

Antwort

0

Sie können den Code zum Abfragen eines POP3-Servers aus der Python-Hilfedatei kopieren. Hier ist es in so leicht abgewandelter Form.

import poplib, getpass 

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

Sie müssen nur verschiedene Konstanten wie die Portnummer von Ihrem Mail-Client kopieren.

Was dieses Skript als Ausgabe produziert, kann Sie je nach den Einstellungen in Ihrem Mail-Client überraschen. Hier ist, was ich gerade bekommen habe.

(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 ']

Aber ich weiß, dass keine Nachrichten auf dem Server bleiben, die ich nicht in meinem Mail-Client erhalten habe. Die Antwort auf dieses kleine Rätsel ist, dass mein E-Mail-Client zwei Wochen lang Nachrichten auf dem Server belässt, oder bis ich sie standardmäßig lösche, vermutlich als Schutz vor Verlust im Falle eines Computerfehlers.

Dies bedeutet, dass es nicht ausreichen würde, die obige Ausgabe einfach als Überprüfung für neue Nachrichten zu verwenden. Es wäre notwendig, Daten von Kopfzeilen von empfangenen Nachrichten für bis zu 14 Tage für einen Vergleich mit denen auf dem Server aufzuzeichnen.

Verwandte Themen