Email AdresseZend_Validate_EmailAddress 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:
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
getMessages() eine nützliche Fehlermeldung aus.
Optionen für die Prüfung von Email AdressenZend_Validate_EmailAddress unterstützt verschiedene Optionen
welche entweder bei der Initiierung, durch Übergeben eines Arrays mit den betreffenden
Optionen, gesetzt werden können, oder im Nachhinein, durch Verwendung von
setOptions(). Die folgenden Optionen werden unterstützt:
allow: Definiert welche Typen von
Domain Namen akzeptiert werden. Diese Option wird in Verbindung mit der hostname
Option verwendet um die Hostname Prüfung zu setzen. Für weitere Informationen
über mögliche Werte dieser Option sehen Sie bitte unter Hostname und mögliche
ALLOW* Konstanten. Der Standardwert dieser Option ist
ALLOW_DNS.
deep: Definiert ob die MX Records des
Server durch eine tiefe Prüfung verifiziert werden sollen. Wenn diese Option auf
TRUE gesetzt wird, dann werden zusätzlich zum MX Record
auch die A, A6 und AAAA Records verwendet um zu prüfen ob
der Server Emails akzeptiert. Der Standardwert dieser Option ist
FALSE.
domain: Definiert ob der Domain Teil
geprüft werden soll. Wenn diese Option auf FALSE gesetzt
wird, dann wird nur der lokale Teil der Email Adresse geprüft. In diesem Fall
wird die Hostname Prüfung nicht aufgerufen. Der Standardwert dieser Option ist
TRUE.
hostname: Setzt die Hostname Prüfung
mit welcher der Domain Teil der Email Adresse geprüft wird.
mx: Definiert ob der MX Record vom
Server erkannt werden soll. Wenn diese Option auf TRUE
definiert wird, dann wird der MX Record verwendet um zu prüfen ob der Server
Emails akzeptiert. Der Standardwert dieser Option ist
FALSE.
setOptions(array('domain' => false));
]]>Komplexe lokale AbschnitteZend_Validate_EmailAdress 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).
Nur den lokalen Teil prüfen
Wenn man will das Zend_Validate_EmailAddress nur den lokalen Teil
der Email Adresse prüfen soll, und die Prüfung des Hostnamens ausschalten will, kann man
die domain Option auf FALSE setzen. Das
zwingt Zend_Validate_EmailAddress den Hostname Teil der Email
Adresse nicht zu prüfen.
setOptions(array('domain' => FALSE));
]]>Prüfen von unterschiedlichen Typen von Hostnamen
Der Teil des Hostnamens einer Email Adresse wird mit Zend_Validate_Host
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:
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. Um die MX Prüfung einzuschalten
kann ein zweiter Parameter an den Zend_Validate_EmailAddress
Konstruktor übergeben werden.
Zend_Validate_Hostname::ALLOW_DNS,
'mx' => true
)
);
]]>Die MX Prüfung unter Windows
In Windows Umgebungen ist die MX Prüfung nicht vorhanden wenn PHP
5.3 oder höher verwendet wird. Unter PHP 5.3 wird die MX
Prüfung nicht verwendet, selbst wenn diese in den Optionen aktiviert wurde.
Alternativ kann entweder TRUE oder FALSE an
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.
Manchmal gibt die Prüfung auf MX Records FALSE zurück, selbst wenn
Emails akzeptiert werden. Der Hintergrund dieses Verhaltens ist, das der Server Emails
akzeptieren kann, selbst wenn er keinen MX Record anbietet. In diesem Fall kann er A, A6
oder AAAA Records anbieten. Um es
Zend_Validate_EmailAddress zu erlauben auch auf diese anderen
Records zu prüfen, muss man die tiefe MX Prüfung einschalten. Das kann man durch Setzen
der deep Option bei der Initialisierung, oder durch Verwendung von
setOptions() tun.
Zend_Validate_Hostname::ALLOW_DNS,
'mx' => true,
'deep' => true
)
);
]]>Performance Warnung
Man sollte darauf achten das die Aktivierung der MX Prüfung das Skript langsamer
machen wird, weil es Netzwerk Funktionen verwendet. Die Aktivierung der tiefen
Prüfung macht das Skript sogar noch langsamer da es im angegebenen Server nach
3 zusätzlichen Typen sucht.
Disallowed IP addresses
Man sollte beachten das die MX Prüfung nur für externe Server akzeptiert wird. Wenn
die tiefe MX Prüfung aktiviert wird, dann werden IP Adressen wie
192.168.* oder 169.254.* nicht akzeptiert.
Internationale Domain Namen prüfenZend_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.
getHostnameValidator->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.
getHostnameValidator->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.
Setzen von MeldungenZend_Validate_EmailAddress verwendet auch
Zend_Validate_Hostname um den Teil des Hostnamens einer
angegebenen Email Adresse zu prüfen. Ab Zend Framework 1.10 kann man Meldungen für
Zend_Validate_Hostname auch von innerhalb
Zend_Validate_EmailAddress setzen.
setMessages(array(
Zend_Validate_Hostname::UNKNOWN_TLD => 'Ich kenne die TLD nicht')
);
]]>
Vor Zend Framework 1.10 musste man die Meldungen einem eigenen
Zend_Validate_Hostname hinzufügen, und dann diese Prüfung in
Zend_Validate_EmailAddress setzen um die eigenen Meldungen
zurückzubekommen.