Ich bin auf diesen PHP-Code gestoßen, um die E-Mail-Adresse mithilfe von SMTP zu überprüfen, ohne eine E-Mail zu senden .
Hat jemand etwas ähnliches versucht oder funktioniert es für Sie? Können Sie feststellen, ob eine E-Mail, die ein Kunde / Benutzer eingibt, korrekt ist und existiert?
Antworten:
Es gibt zwei Methoden, mit denen Sie manchmal feststellen können, ob tatsächlich ein Empfänger vorhanden ist:
Sie können eine Verbindung zum Server herstellen und einen
VRFY
Befehl ausgeben . Sehr wenige Server unterstützen diesen Befehl, aber genau dafür ist er vorgesehen. Wenn der Server mit einem DSN 2.0.0 antwortet, ist der Benutzer vorhanden.Sie können a ausgeben
RCPT
und prüfen, ob die E-Mail abgelehnt wurde.Wenn der Benutzer nicht existiert, erhalten Sie einen 5.1.1-DSN. Nur weil die E-Mail nicht abgelehnt wird, bedeutet dies nicht, dass der Benutzer existiert. Einige Server verwerfen solche Anforderungen stillschweigend, um die Aufzählung ihrer Benutzer zu verhindern. Andere Server können den Benutzer nicht überprüfen und müssen die Nachricht trotzdem akzeptieren.
Es gibt auch eine Antispam-Technik namens Greylisting, bei der der Server die Adresse zunächst ablehnt und erwartet, dass ein echter SMTP-Server einige Zeit später eine erneute Zustellung versucht. Dies wird Versuche, die Adresse zu validieren, durcheinander bringen.
Wenn Sie versuchen, eine Adresse zu validieren, ist es am besten, einen einfachen regulären Ausdruck zu verwenden, um offensichtlich ungültige Adressen zu blockieren, und dann eine tatsächliche E-Mail mit einem Link an Ihr System zu senden, der den Empfang der empfangenen E-Mail bestätigt. Dies stellt auch sicher, dass der Benutzer seine eigentliche E-Mail-Adresse eingegeben hat und kein Tippfehler, der zufällig jemand anderem gehört.
quelle
Andere Antworten hier diskutieren die verschiedenen Probleme bei dem Versuch, dies zu tun. Ich dachte, ich würde zeigen, wie Sie dies versuchen könnten, falls Sie lernen möchten, indem Sie es selbst tun.
Sie können über Telnet eine Verbindung zu einem Mailserver herstellen, um zu fragen, ob eine E-Mail-Adresse vorhanden ist. Hier ist ein Beispiel zum Testen einer E-Mail-Adresse für
stackoverflow.com
:Mit numerischen Codes vorangestellte Zeilen sind Antworten vom SMTP-Server. Ich habe einige Leerzeilen hinzugefügt, um die Lesbarkeit zu verbessern.
Viele Mailserver geben diese Informationen nicht zurück, um das Sammeln von E-Mail-Adressen durch Spammer zu verhindern. Sie können sich daher nicht auf diese Technik verlassen. Es kann jedoch sein, dass Sie einige offensichtlich schlechte E-Mail-Adressen erfolgreich bereinigen, indem Sie ungültige Mailserver erkennen oder Empfängeradressen wie oben abgelehnt haben.
Beachten Sie auch, dass Mailserver Sie möglicherweise auf die schwarze Liste setzen, wenn Sie zu viele Anfragen an sie stellen.
In PHP glaube ich , die Sie verwenden können
fsockopen
,fwrite
undfread
die obigen Schritte programmatisch auszuführen:quelle
Die allgemeine Antwort lautet, dass Sie nicht überprüfen können , ob eine E-Mail-Adresse vorhanden ist, wenn Sie eine E-Mail an diese senden: Sie könnte einfach in ein Schwarzes Loch gelangen.
Davon abgesehen ist die dort beschriebene Methode recht effektiv. Es wird im Produktionscode in ZoneCheck verwendet, außer dass RSET anstelle von QUIT verwendet wird.
Wenn die Benutzerinteraktion mit seiner Mailbox nicht zu kostspielig ist, testen viele Websites tatsächlich, ob die Mail irgendwo ankommt, indem sie eine Geheimnummer senden, die an den E-Mail-Sender zurückgesendet werden muss (entweder indem sie zu einer geheimen URL gehen oder diese Geheimnummer per E-Mail zurücksenden). Die meisten Mailinglisten funktionieren so.
quelle
Nicht wirklich ..... Einige Server überprüfen möglicherweise nicht das "rcpt to:"
http://www.freesoft.org/CIE/RFC/1123/92.htm
Dies ist ein Sicherheitsrisiko .....
Wenn der Server dies tut, können Sie einen Bot schreiben, um jede Adresse auf dem Server zu ermitteln.
quelle
Dies schlägt (unter anderem) fehl, wenn der Ziel-Mailserver Greylisting verwendet.
Greylisting : SMTP-Server verweigert die Zustellung beim ersten Herstellen einer Verbindung mit einem zuvor unbekannten Client und ermöglicht das nächste Mal. Dadurch wird ein gewisser Prozentsatz der Spambots ferngehalten und gleichzeitig eine legitime Verwendung ermöglicht. Es wird erwartet, dass ein legitimer E-Mail-Absender es erneut versucht, wie dies bei normalen E-Mail-Übertragungsagenten der Fall ist.
Wenn Ihr Code den Server jedoch nur einmal überprüft , verweigert ein Server mit Greylisting die Zustellung (da Ihr Client zum ersten Mal eine Verbindung herstellt). Wenn Sie nicht kurz nachsehen, lehnen Sie möglicherweise fälschlicherweise gültige E-Mail-Adressen ab.
quelle
Einige Fragen:
Bei einigen SMTP-Servern (wie Google Mail) müssen Sie SSL verwenden, um etwas zu tun.Dies gilt nur, wenn Sie den SMTP-Server von Google Mail zum Senden von E-Mails verwenden.quelle
Obwohl diese Frage etwas alt ist, kann dieser Servicetipp Benutzern bei der Suche nach einer ähnlichen Lösung helfen, E-Mail-Adressen vor dem Senden über die Syntaxüberprüfung hinaus zu überprüfen.
Ich habe diesen Open-Source-Service für eine eingehendere Validierung von E-Mails (Überprüfung auf mx-Einträge in der E-Mail-Adressdomäne usw.) für einige Projekte mit guten Ergebnissen verwendet. Es wird auch nach häufigen Tippfehlern gesucht, die sehr nützlich sind. Demo hier .
quelle
"Können Sie feststellen, ob eine E-Mail, die ein Kunde / Benutzer eingibt, korrekt ist und existiert?"
Eigentlich sind das zwei getrennte Dinge. Es könnte existieren, aber möglicherweise nicht korrekt sein.
Manchmal müssen Sie die Benutzereingaben zum Nennwert nehmen. Es gibt viele Möglichkeiten, das System ansonsten zu besiegen.
quelle
Sie können lediglich DNS durchsuchen und sicherstellen, dass die Domain in der E-Mail-Adresse über einen MX-Eintrag verfügt. Ansonsten gibt es keine zuverlässige Möglichkeit, damit umzugehen.
Einige Server arbeiten möglicherweise mit der Methode rcpt-to, mit der Sie mit dem SMTP-Server kommunizieren. Dies hängt jedoch vollständig von der Konfiguration des Servers ab. Ein weiteres Problem kann sein, dass ein überlasteter Server möglicherweise einen 550-Code zurückgibt, der besagt, dass der Benutzer unbekannt ist. Dies ist jedoch ein vorübergehender Fehler. Es gibt einen dauerhaften Fehler (451, glaube ich?), Der zurückgegeben werden kann. Dies hängt vollständig von der Konfiguration des Servers ab.
Ich persönlich würde nach dem DNS-MX-Eintrag suchen und dann eine E-Mail-Bestätigung senden, wenn der MX-Eintrag vorhanden ist.
quelle
quelle
getmxrr
Angenommen, es handelt sich um die Adresse des Benutzers , erlauben einige Mailserver dem SMTP VRFY-Befehl, die E-Mail-Adresse tatsächlich anhand seiner Postfächer zu überprüfen. Die meisten wichtigen Websites bieten Ihnen nicht viele Informationen. Die Google Mail-Antwort lautet "Wenn Sie versuchen, es zu versenden, werden wir versuchen, es zuzustellen" oder so etwas Kluges.
quelle
Ich denke, Sie können nicht, es gibt so viele Szenarien, in denen sogar das Senden einer E-Mail fehlschlagen kann. Z.B. Der Mailserver auf der Benutzerseite ist vorübergehend ausgefallen, das Postfach ist vorhanden, aber voll, sodass keine Nachricht zugestellt werden kann.
Das ist wahrscheinlich der Grund, warum so viele Websites eine Registrierung validieren, nachdem der Benutzer bestätigt hat, dass er die Bestätigungs-E-Mail erhalten hat.
quelle
Ich kann die Antworten von Joseph und Drew bestätigen
RCTP TO: <address_to_check>
. Ich möchte zusätzlich zu diesen Antworten einige kleine Ergänzungen hinzufügen.Catch-All-Anbieter
Einige Mail-Anbieter implementieren eine Catch-All-Richtlinie, dh,
*@mydomain.com
derRCTP TO:
Befehl wird positiv an den Befehl zurückgegeben. Dies bedeutet aber nicht unbedingt, dass das Postfach "existiert", wie in "gehört einem Menschen". Hier kann nicht viel getan werden, sei dir nur bewusst.IP Greylisting / Blacklisting
Greylisting: 1. Verbindung von unbekannter IP ist blockiert. Lösung: Versuchen Sie es mindestens zweimal.
Blacklisting: Wenn Sie zu viele Anfragen von derselben IP senden, wird diese IP blockiert. Lösung: Verwenden Sie die IP-Rotation. Reacher benutzt Tor.
HTTP-Anforderungen in Anmeldeformularen
Dies ist sehr anbieterspezifisch, aber manchmal können Sie gut gestaltete HTTP-Anforderungen verwenden und die Antworten dieser Anforderungen analysieren, um festzustellen, ob ein Benutzername bereits bei diesem Anbieter angemeldet ist oder nicht.
Hier ist die relevante Funktion aus einer Open-Source-Bibliothek, die ich geschrieben habe, um
*@yahoo.com
Adressen mithilfe von HTTP-Anforderungen zu überprüfen : Überprüfen, ob E-Mail vorhanden ist . Ich weiß, dass mein Code Rust ist und dieser Thread mit PHP markiert ist, aber die gleichen Ideen gelten.Voller Posteingang
Dies kann ein Randfall sein, aber wenn der Benutzer einen vollen Posteingang hat,
RCTP TO:
wird eine5.1.1 DSN
Fehlermeldung zurückgegeben, die besagt, dass er voll ist. Dies bedeutet, dass das Konto tatsächlich existiert!Offenlegung
Ich führe Reacher aus , eine Echtzeit-API zur E-Mail-Überprüfung. Mein Code ist in Rust geschrieben und zu 100% Open Source. Probieren Sie es aus, wenn Sie eine robustere Lösung wünschen:
Github: https://github.com/amaurymartiny/check-if-email-exists
Mit einer Kombination verschiedener Techniken zum Durchspringen von Reifen schaffe ich es, rund 80% der von meinen Kunden überprüften E-Mails zu überprüfen.
quelle
quelle