Zend_Validate_Email erlaubt die Prüfung von Email Adressen. Der Prüfer teilt zuerst die Email Adresse in lokalen Teil @ hostname und versucht diese mit bekannten Spezifikationen für Email Adressen und Hostnamen zu prüfen.
Normale Verwendung
Ein Beispiel einer normalen Benutzung ist anbei:
<?php require_once 'Zend/Validate/EmailAddress.php'; $validator = new Zend_Validate_EmailAddress(); if ($validator->isValid($email)) { // Email Adresse scheint gültig zu sein } else { // Email Adresse ist ungültig, drucke die Gründe hierfür foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ?>
Das prüft die Email Adresse $email
und gibt bei einem Fehler über
$validator->getMessages()
eine nützliche Fehlermeldung aus.
Komplexe lokale Abschnitte
Zend_Validate_Email prüft jede gültige Email Adresse mit RFC2822. Gültige Email Adressen
sind zum Beispiel bob@domain.com
, bob+jones@domain.us
,
"bob@jones"@domain.com
und "bob jones"@domain.com
Einige Email Formate werden aktuell nicht geprüft (z.B. Zeilenumbruch Zeichen oder ein "\" Zeichen in einer Email Adresse).
Prüfen von unterschiedlichen Typen von Hostnamen
Der Teil des Hostnamens einer Email Adresse wird mit Zend_Validate_Hostname geprüft. Standardmäßig
werden nur DNS Hostnamen in der Form domain.com
akzeptiert, aber wenn es gewünscht ist,
können auch IP Adressen und lokale Hostnamen auch akzeptiert werden.
Um das zu tun, muß eine Zend_Validate_EmailAddress Instanz erstellt werden der ein Parameter übergeben wird, um den Typ des Hostnamens anzugeben der akzeptiert werden soll. Mehr Details sind in Zend_Validate_Hostname inkludiert, zusammen mit einem Beispiel, wie DNS und lokale Hostnamen, akzeptiert werden wie im Beispiel das anbei steht:
<?php require_once 'Zend/Validate/EmailAddress.php'; $validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL); if ($validator->isValid($email)) { // Email Adresse scheint gültig zu sein } else { // Email ist ungültig; Gründe ausdrucken foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ?>
Prüfen ob der Hostname aktuell Emails akzeptiert
Nur weil eine Email Adresse im richtigen Format ist, heißt das notwendigerweise nicht das die Email Adresse aktuell auch existiert. Um dieses Problem zu lösen, kann MX Prüfung verwendet werden um zu prüfen ob ein MX (Email) Eintrag im DNS Eintrag für den Hostnamen der Email existiert. Das zeigt ob der Hostname Emails akzeptiert, sagt aber nicht aus, ob die genaue Email Adresse selbst gültig ist.
Die MX Prüfung ist standardmäßig nicht eingeschaltet und wird aktuell nur durch UNIX Platformen unterstützt. Um die MX Prüfung einzuschalten kann ein zweiter Parameter an den Zend_Validate_EmailAddress Konstruktor übergeben werden.
<?php $validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS, true); ?>
Alternativ kann entweder true
oder false
an
$validator->setValidateMx()
übergeben werden um die MX Prüfung ein- oder auszuschalten.
Durch das einschalten dieser Option werden Netzwerk Funktionen verwendet um zu Prüfen ob ein MX Eintrag am Hostnamen der Email Adresse existiert, welche geprüft werden soll. Vorsicht davor, das hierbei das eigene Skript langsamer wird.
Internationale Domain Namen prüfen
Zend_Validate_EmailAddress prüft auch internationale Zeichen prüfen, die in einigen Domains existieren. Dies ist als Unterstützung für Internationale Domain Namen (IDN) bekannt. Standardmäßig ist das eingeschaltet. Das kann aber ausgeschaltet werden indem eine Einstellung geändert wird über das interne Zend_Validate_Hostname Objekt das innerhalb von Zend_Validate_EmailAddress existiert.
<?php $validator->hostnameValidator->setValidateIdn(false); ?>
Weitere Informationen über die Verwendung von setValidateIdn()
gibt es
in der Zend_Validate_Hostname Dokumentation.
Es sollte darauf geachtet werden das IDNs nur geprüft werden wenn erlaubt ist DNS Hostnamen zu prüfen.
Top Level Domains prüfen
Standardmäßig wird ein Hostname mit einer List von bekannten TLDs geprüft. Das ist standardmäßig aktiviert, kann aber ausgeschaltet werden indem die Einstellung über das interne Zend_Validate_Hostname geändert wird, das innerhalb von Zend_Validate_EmailAddress existiert.
<?php $validator->hostnameValidator->setValidateTld(false); ?>
Mehr Informationen über die Verwendung von setValidateTld()
gibt es in der
Zend_Validate_Hostname Dokumentation.
Es sollte darauf geachtet werden das TLDs nur geprüft werden wenn es auch erlaubt ist DNS Hostnamen zu prüfen.