2017-02-09 4 views
0

Ich versuche, E-Mail, um zu überprüfen, und ich habe einige Schwierigkeiten:Python: smtplib mit E-Mails zu überprüfen

Oft bekomme ich einige Fehler, zum Beispiel

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

Was bedeutet das? Ich kann keine E-Mails oder andere E-Mails abrufen. Oder ich sollte es noch einmal versuchen?

smtplib.SMTPServerDisconnected: Connection unexpectedly closed 

Ist eine Möglichkeit, dieses Problem zu lösen? Es erscheint sehr oft.

Wenn ich diesen Fehler bekomme, sollte ich E-Mail mit dieser Domain überspringen, richtig?

Auch wenn ich versuche, mxrecords, manchmal die Anzahl von ihnen mehr als eins. Sollte ich jedes E-Mail verwenden, um E-Mails zu überprüfen, oder kann ich ein zufälliges verwenden?

Ich benutze nächsten Code, das zu tun:

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() 

auch nur ich meine E-Mails in den server.mail() angeben, aber ich versuche es und nach dieser Überprüfung E-Mail anmelden, aber nicht bekommen, kein Ergebnis so ich Ausloggen. Warum passiert das?

Antwort

1

Es wird Kein Code in meiner Antwort, ich möchte den Prozess beschreiben und auf Fehlerbehandlung konzentrieren.

Eine E-Mail-Adresse der Form ist [email protected]

den Domain-Teil zu überprüfen, müssen Sie den MX-Datensätze von DNS zu erhalten. Wenn (und nur wenn) keine MX vorhanden sind, sollte stattdessen ein A-Datensatz verwendet werden. Ich würde jedoch einen solchen Fall als ein falsch konfiguriertes Mail-System betrachten.

Bei der DNS-Suche können zwei Fehlergruppen auftreten: vorübergehende (z. B. ein Timeout) und dauerhafte (z. B. NXDOMAIN). Im Falle von transienten Fehlern sollte die Suche später wiederholt werden.

Es gibt normalerweise mehrere MX-Datensätze. Sie haben eine numerische Priorität. Kleinere Nummer = höhere Priorität. Mail reist immer von einer höheren MX-Nummer zur niedrigeren MX-Nummer.

Um den Benutzerteil einer Adresse zu überprüfen, müssen Sie den Server mit der höchsten Priorität kontaktieren. Alle anderen sind Backup-Server und es ist üblich, dass sie keinen Zugriff auf die Benutzerdatenbank haben. Sie akzeptieren einfach alle Mails für die eigene Domain.

Es besteht eine geringe Chance, dass Ihre Absenderadresse aus irgendeinem Grund abgelehnt wird. Verwenden Sie eine leere Adresse <>, die für Fehlermeldungen reserviert ist.

Bei der Kommunikation mit einem SMTP-Server treten erneut zwei Fehlergruppen auf. Glücklicherweise haben die SMTP-Antworten einen dreistelligen Code. Die erste Ziffer ist 2 für Erfolg, 4 für vorübergehende Fehler (um später erneut versucht zu werden) und 5 für permanente Fehler.

Und eine letzte Anmerkung: Machen Sie eine SMTP RSET vor QUIT, wenn Sie nicht wirklich eine E-Mail senden werden.

+0

Vielen Dank für die Erklärung. Aber was ist die "A-Aufzeichnung"? –

+0

Und ist eine Möglichkeit, mit "smtplib.SMTPServerDisconnected: Verbindung unerwartet geschlossen" zu "kämpfen"? –

+0

@PetrPetrov Ein "A" -Datensatz ist eine Art von DNS-Records, die einen Namen auf seine IP ** A ** - Adresse, genauer IPv4-Adresse, abbilden. Der entsprechende IPv6-A-Record trägt den Namen "AAAA". [https://en.wikipedia.org/wiki/List_of_DNS_record_types] – VPfB

1

haben Sie manuell mx überprüft?

Es scheint, wie 25-Port ist nicht offen für den Anschluss und kein MX-Eintrag gefunden werden konnte, so dass er den Fehler zurückgibt, dass no mx record exists, wenn Sie eine manuelle Prüfung tun aruanaestetik.com eine die Nachricht bekommt no mx recorf found

+0

Nein, ich benutze 'dns.resolver.query (domain, 'MX')', um das zu tun. Können Sie erklären, wenn die Domain eine Menge 'mx' enthält, könnte ich die E-Mails mit jedem davon überprüfen? –

+0

dns.resolver.query (domain, 'MX') geben den Fehler zurück, den Sie gefragt haben, wenn kein mx gefunden werden konnte und/oder p25 geschlossen ist, ja, Sie könnten die E-Mails mit jedem überprüfen, aber nur einer könnte die Anmeldung zulassen, wenn Sie es versuchen zu senden – minime

Verwandte Themen