Sven Rautenberg: Validierung von eMail-Adressen (Selfforumssieb)

Beitrag lesen

Götz, dein Link zeigt ziemlich eindrucksvoll, warum eine Validierung von Mailadressen auch mit diesem verhältnismäßig großen Aufwand nicht funktionieren kann.

Das Log für die Prüfung der Adresse "blafasel@selfhtml.org" ergibt:

Checking server mail.selfhtml.org...
Opening up socket to mail.selfhtml.org... Succes!
mail.selfhtml.org replied: 220 odin.selfhtml.org ESMTP

HELO outkast.tienhuis.nl
250 odin.selfhtml.org
(10.62 ms)
MAIL FROM: <postmaster@tienhuis.nl>
250 2.1.0 Ok
(12.17 ms)
RCPT TO: <blafasel@selfhtml.org>
450 4.7.1 <blafasel@selfhtml.org>: Recipient address rejected: Greylisted
(98.93 ms)
QUIT
221 2.0.0 Bye
(8.40 ms)
Succesful communication with mail.selfhtml.org, no hard errors, assuming OK
Address appears to be valid...

Folgende Vorgehensweisen sind aus meiner Sicht denkbar:

  1. Clientseitige Prüfung kann sich nur auf Äußerlichkeiten beschränken. Die typische Äußerlichkeit einer internetweit zugänglichen Mailadresse ist das Vorhandensein von @ und danach von mindestens einem Punkt, umgeben von Zeichen. Vgl. den Forumsthread.
  2. Eine oberflächliche serverseitige Prüfung führt denselben Check durch.
  3. Sofern man dumme Tippfehler des Benutzers abfangen will, empfiehlt es sich, die Mailadresse in zwei unterschiedlichen, ggf. sogar (optisch) weiter auseinanderliegenden Formularfeldern eingeben zu lassen, und dann auf Identität zu vergleichen. Wer sich einmal vertippt, tut das vielleicht kein zweites Mal. Das läßt sich sowohl client- wie serverseitig realisieren.
  4. Ein einfacher Realitätscheck auf eine tatsächlich existierende Mailadresse ist die Prüfung im DNS, ob die angegebene Domain existiert. Allerdings kostet so eine Prüfung schon deutlich mehr Zeit (in der Größenordnung von mehreren hundert Millisekunden bis Sekunden im Erfolgsfall, und in der Größenordnung von mehr als 30 Sekunden, sofern ein DNS-Timeout auftritt, weil irgendwas gerade unerreichbar ist) und ist nur auf dem Server möglich. Insbesondere die lange Wartezeit auf das DNS-Ergebnis im Fehlerfall lassen die Verwendung dieser Methode eigentlich nicht wirklich zu, ohne dass man sich für genau diesen Fall irgendeine Strategie für die Beschäftigung/Besänftigung des wartenden Benutzers überlegt - analog zu allen Skriptaufrufen, die aus anderen Gründen sehr lange dauern können.
  5. Eine im Gegensatz dazu sehr einfache, aber dummerweise asynchrone Methode ist der tatsächliche Versand einer EMail an die angegebene Adresse über den lokal installierten Mailserver (mit entsprechender Warteschlange), mit der Bitte zum Aufruf einer in der Mail angegebenen URL, um den erfolgreichen Empfang zu bestätigen. Dadurch, dass das aktuell laufende Skript nur den Mailversand triggern kann, aber nicht den Erfolg überprüft, ist es leider nicht möglich, den Benutzer direkt auf fehlerhafte Mailangaben hinzuweisen und ihm die Korrektur zu ermöglichen.
  6. Die Krönung ist, wie in Götz' Link durchgeführt, der skriptgesteuerte Mailversand mit direkter Überprüfung des SMTP-Ergebnisses - welche allerdings programmtechnisch extrem aufwendig ist, da man alle Eventualitäten des SMTP-Protokolls inklusive Queuing/Versandwiederholung bei temporären Fehlern bzw. Greylisting berücksichtigen müßte. Diese Methode kombiniert zwar alle Vorteile der obigen Methoden, also synchrone und bestmögliche Rückmeldung eines Erfolges an den Benutzer, allerdings auch alle Nachteile: Potentiell lange Wartezeit auf DNS, Unverfügbarkeit von SMTP, temporäre Mailfehler, eigene Realisierung einer Mailqueue. Und trotz dieses enormen Aufwandes ist man, solange der Benutzer nicht tatsächlich den Link in der Mail angeklickt hat, nicht sicher, dass die Mailadresse tatsächlich existiert, funktioniert, ungefiltert ist und vom Besitzer des Postfachs (der nicht identisch sein muß mit der Person, die gerade das Formular ausgefüllt hat) gewollt genutzt wird.

Da man also auch mit enormem Aufwand keine hundertprozentige, und insbesondere keine synchrone Prüfung auf tatsächliche Korrektheit erlangen kann, stellt sich somit die Frage, warum man dann noch riesigen Aufwand in die Formulierung eines pseudokorrekten regulären Ausdrucks stecken soll.