Beiträge

[PHP] Emailadresse auf korrektheit prüfen / validieren

Hallo zusammen,

fast auf jeder Webseite gibt es ein Feld wo der Besucher seine Emailadresse eingeben soll. Ob in einem Kontaktformular, für die Anmeldung bei einem Newsletter oder für die Anmeldung zu einem Mitgliederbereich. Es gibt Anwendungen wo dies nötig ist.

Wir müssen in jedem Fall die Emailadresse prüfen. Ob Sie vom Aufbau her korrekt ist (nicht das der User ausversehen die Felder verwechselt hat und hier eine Internetadresse eingegeben hat) und wie können prüfen ob es die dazugehörige Domain überhaupt gibt. Schreibfehler in der Emailadresse können wir jedoch leider nicht prüfen… bzw. dies nur mit einem Aufwand der sich nicht mehr rentiert.

Hier eine einfache Funktion zum prüfen der Emailadresse:

function mailCheck($email) { 
	return preg_match("/^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-.]+.([a-zA-Z]{2,4})$/", $email); 
}

Bei dieser Funktion wird lediglich geprüft ob der Syntax der Emailadresse korrekt ist. Das heißt ob das “@”-Zeichen an der richtigen Stelle ist, ob eine TLD vorhanden ist. Ob die Domain vorhanden ist wird hier noch nicht geprüft.

Hier nun eine erweiterte Funktion:

function mailcheckDNS($mail) { 
	$email = htmlspecialchars($mail); 
	$r = false; 
	if(preg_match('/(.*?)@(.*?).(w){2,6}/i', $email)) { 
		$split = explode('@', $email); 
		$split2 = explode('.', $split[1]); 
		if(preg_match('/([a-z]){3,64}/i', $split2[0])) { 
			if(preg_match('/([a-z0-9!"$&/()?~#+.:_-]+){1,64}[^@]/i', $split[0])) { 
				$MXCheck = getmxrr($split[1], $mxhosts); 
				if(!empty($MXCheck)) { 
					$r = true; 
				} 
			} 
		} 
	} 
	return $r; 
}

Diese überprüft nun zusätzlich ob die Domain überhaupt existiert indem sie versucht diese zu erreichen. Ist dies möglich dann fällt die Überprüfung positiv aus, wenn nicht dann negativ.

Es gibt keinen 100%igen Emailcheck, aber was man prüfen kann das sollte man auch. Rechtschreibfehler kann man einfach nicht prüfen. Dafür könnten man z.B. den User die Emailadresse 2 mal eingeben lassen, zur Sicherheit.

Gruß
Gordon


Hinweis: Die Verwendung meiner Codeschnipsel erfolgt auf eigene Gefahr! Ich übernehme auch keine Garantie auf Funktionstüchtigkeit (jeder Server ist anders konfiguriert. Bei Problemen können Sie hier aber gern einen Kommentar schreiben und wir suchen eine Lösung. ;)