E-Mail Adresse in PHP auf Gültigkeit & Erreichbarkeit prüfen

E-Mail Adresse auf Gültigkeit & Erreichbarkeit prüfen

Heute möchte ich euch zeigen, wie ihr eine E-Mail Adresse mit Hilfe von PHP auf Gültigkeit und Erreichbarkeit prüfen könnt.

Dazu prüfen wir ob die Syntax richtig ist, ob der Host einer E-Mail Adresse gültig (bzw. registriert) ist und ob der hinterlegte Mailserver (laut MX-Record) die E-Mail Adresse auch kennt.

Syntax prüfen

Die Syntax einer E-Mail Adresse ist per RFC 2822 klar vorgegeben. In PHP können wir die Syntax recht einfach prüfen:

Host prüfen

Nachdem wir nun sichergestellt haben, dass die Syntax einer E-Mail Adresse gültig ist prüfen wir nun, ob der entsprechende Host auch gültig ist bzw. die Domain auch registriert ist. Dazu prüfen wir einfach, ob für den jeweiligen Host auch Host Records hinterlegt sind:

Auf Unix/Linux Systemen könnten wir auch nslookup nutzen. Dies hätten den Vorteil, dass wir der Abfrage auch einen Timeout mitgeben können:

Wird im Ergebnis dieser Abfrage NXDOMAIN als Status zurückgegeben, so ist die Domain entweder falsch konfiguriert oder nicht vergeben.

Ist dies nicht der Fall, so ist der Host bzw. die Domain gültig und damit ist es auch wahrscheinlicher, dass die zu prüfende E-Mail Adresse gültig bzw. erreichbar ist.

Mailserver ermitteln

Im nächsten Schritt holen wir uns nun den für den Host bzw. die Domain verantwortlichen Mailserver. Dies können wir beispielsweise so machen:

Mit dem Mailserver kommunizieren

Nun verbinden wir uns per Telnet mit dem zuvor ermittelten Mailserver (Port 25) und fragen dort an, ob dieser die zu prüfende E-Mail Adresse auch kennt.

Ich zeige euch hier zunächst einmal, wie dies beispielsweise für eine GMail E-Mail Adresse per Konsole geht:

In Zeile 1 holen wir uns die Mailserver für den Host gmail.com.  Einer der zuständigen Mailserver ist der aus Zeile 13.

In Zeile 19 verbinden wir uns nun mit diesem Mailserver. In Zeile 23 bestätigt uns der Mailserver mit dem Status 220, dass alles in Ordnung ist.

In Zeile 28 geben wir nun die zu prüfende E-Mail Adresse ein. In Zeile 29 teilt uns der Mailserver durch Rückgabe des Status 250 mit, dass diese E-Mail Adresse konfiguriert ist. Ist dies nicht der Fall so würde Zeile 29 so aussehen:

In unserem Fall ist aber alles in Ordnung. Die E-Mail Adresse ist gültig und auch erreichbar.

So, jetzt haben wir dir Prüfung einmal manuell durchgespielt. Nachfolgend findet ihr einen ersten Entwurf einer PHP Klasse, die diesen Job für euch übernimmt:

So nutzen wir die Klasse:

Und so sieht die Ausgabe aus:

Die Zeilen 1, 14,27 und 40 zeigen uns jeweils, ob die entsprechende E-Mail Adresse gültig und erreichbar ist oder nicht. Es ist jedoch wichtig auch den jeweiligen Wert für die „substance“ zu prüfen. Dieser sagt aus, wie wahrscheinlich das Ergebnis ist. Nur wenn der Wert 1 ist, dann ist die Rückgabe auch wirklich korrekt.

Im ersten Fall (ab Zeile 1) ist das Ergebnis der Abfrage beispielsweise, dass die E-Mail Adresse nicht erreichbar ist. Das liegt aber daran, dass uns der Mailserver keine unauthorisierten Abfragen erlaubt. Der „substance“ Wert beträgt in diesem Fall aber auch nur 0.25. Das Ergebnis ist also nicht verlässlich.

Fazit

Wir können mit dieser Beispiel Klasse prüfen, ob eine E-Mail Adresse gültig und erreichbar ist. Die Prüfung auf Gültigkeit ist dabei recht einfach. Die Erreichbarkeit kann nicht so einfach geprüft werden. Nicht alle Mailserver geben so einfach Auskunft über Erreichbarkeit wie gewünscht.

Was noch zu bedenken bleibt ist, dass eine E-Mail Adresse laut Klasse mit einem „substance“ Wert von 1 gültig und erreichbar sein kann. Dies sagt aber nichts darüber aus, ob die E-Mail Adresse, die beispielsweise in einem Registrierungsprozess genutzt wird, auch dem entsprechenden Nutzer zugeordnet werden kann. Hier muss wohl wieder mit der klassischen Bestätigungsmail gearbeitet werden.

Veröffentlicht von

Michael

Webentwickler & SEO

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *