barrierefreies Webdesign Ingo Turski

zum Inhalt

Ingo

Tips und Tricks:E-Mail-Adressen prüfen

Im Netz kursieren etliche Scripts, die eingegebene E-Mail-Adressen auf ihre Gültigkeit prüfen. Die meisten sind völlig untauglich, da sie auch gültige Adressen abweisen; spätestens mit der Einführung von nicht-englischen Adresszonen durch die ICANN Internet Corporation for Assigned Names and Numbers:
ICANN entscheidet über die Grundlagen der Verwaltung
der Top Level Domains und auf diese Weise
koordiniert ICANN technische Aspekte des Internet.
 sind alle bisherigen (zu strengen) Prüfungen untauglich.

Wozu überhaupt prüfen? Selbst eine komplexe Syntaxprüfung, die alle aktuellen Top Level Domains berücksichtigt, kann nicht sicherstellen, dass die angegebene Adresse auch existiert. Eine Syntaxprüfung kann also nur zwei Funktionen erfüllen: auf offensichtliche Eingabefehler hinweisen und, falls die Adresse im Mailheader verwendet werden soll, Manipulationen desselben verhindern.

Eine E-Mail-Adresse besteht aus drei Teilen: dem lokalen Empfängernamen, dem Zeichen »@« und einer Domain oder IP. Der Empfängername kann auch zusätzlich einen in Anführungszeichen gesetzten Anzeigenamen enthalten, was aber in Formularen so selten genutzt wird, dass diese Option bei der Prüfung vernachlässigt werden kann. Es reicht also als einfaches Suchmuster eine Zeichenkette ohne „kritische“ Zeichen, gefolgt von einem »@«, gefolgt von einer grob geprüften Domainangabe oder IP:

<?php
function checkEmail($adr) {
  $regEx = '^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$';
  return (preg_match("/$regEx/",$adr,$part)) ? $part : false;
}
?>

Diese Funktion liefert bei einer grob fehlerhaften oder potentiell gefährlichen Adresse false zurück und ansonsten ein Array mit dem Empfängernamen im $part[1] und der Domain oder IP im $part[2].
[^\s@,:"<>]+ prüft, ob im Empfängernamen kein Whitespace (insbesondere kein Zeilenumbruch) und keine der folgenden Zeichen enthalten sind: »@« (doppelt), aus dem Mailheader fernzuhaltende Kommata oder Doppelpunkte, versehentlich eingegebene Anführungszeichen und in einer HTML-Ausgabe unerwünschte spitze Klammern.
Die gleiche Prüfung erfolgt nach dem @ für den Domainnamen und nach dem letzten . für die TopLevelDomain mit mindestens zwei Zeichen, die keinen Punkt oder Ziffern enthalten darf. (\d{1,3}\.){3}\d{1,3} prüft, ob alternativ zu einer Domain eine IP angegeben ist, die aus vier durch Punkte getrennte maximal dreistellige Ziffernfolgen besteht.

Das Suchmuster ist relativ grob, erkennt aber die meisten unbeabsichtigten Fehleingaben und verhindert zuverlässig Manipulationen, die ein MailScript zur „Spamschleuder“ werden lassen.
Andererseits werden keine noch so ungewöhnlichen Adressen abgewiesen wie von anderen E-Mail-Prüfungen.

Und hier der gleiche etwas erweiterte E-Mail-Check als JavaScript:

<script type="text/javascript">
function checkEmail(adr) {
  var rx = /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/;
  var part = adr.value.match(rx);
  var info = 'E-Mail-Adresse ';
  if(part && part[2].indexOf('..')==-1) info += '<'+part[1]+'@'+part[2]+'> ist OK.';
  else { info += 'ist fehlerhaft!'; adr.focus(); }
  document.getElementById('checkEmail').innerHTML = info;
}
</script>

<p id="checkEmail">Testen Sie das Suchmuster mittels Javascript:</p>
<form action=""><p>
  <input type="text" name="adr" size="35" value="" />
  <input type="button" value="checkEmail" onclick="checkEmail(this.form.adr)" />
</p></form>

Sie können das JavaScript als Vorprüfung verwenden, um den Benutzer bereits vor dem Versenden des Formulars auf Fehler hinzuweisen und das E-Mail-Feld zur Korrektur fokussieren.