| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 22767 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.validate.set.email_address">
- <title>Email Adresse</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname> 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.
- </para>
- <sect3 id="zend.validate.set.email_address.basic">
- <title>Normale Verwendung</title>
- <para>
- Ein Beispiel einer normalen Benutzung ist anbei:
- </para>
- <programlisting language="php"><![CDATA[
- $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";
- }
- }
- ]]></programlisting>
- <para>
- Das prüft die Email Adresse <varname>$email</varname> und gibt bei einem Fehler über
- <methodname>getMessages()</methodname> eine nützliche Fehlermeldung aus.
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.options">
- <title>Optionen für die Prüfung von Email Adressen</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname> 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
- <methodname>setOptions()</methodname>. Die folgenden Optionen werden unterstützt:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis><property>allow</property></emphasis>: 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 <link
- linkend="zend.validate.set.hostname">Hostname</link> und mögliche
- <constant>ALLOW</constant>* Konstanten. Der Standardwert dieser Option ist
- <constant>ALLOW_DNS</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>deep</property></emphasis>: Definiert ob die MX Records des
- Server durch eine tiefe Prüfung verifiziert werden sollen. Wenn diese Option auf
- <constant>TRUE</constant> gesetzt wird, dann werden zusätzlich zum MX Record
- auch die A, A6 und <constant>AAAA</constant> Records verwendet um zu prüfen ob
- der Server Emails akzeptiert. Der Standardwert dieser Option ist
- <constant>FALSE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>domain</property></emphasis>: Definiert ob der Domain Teil
- geprüft werden soll. Wenn diese Option auf <constant>FALSE</constant> 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
- <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>hostname</property></emphasis>: Setzt die Hostname Prüfung
- mit welcher der Domain Teil der Email Adresse geprüft wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>mx</property></emphasis>: Definiert ob der MX Record vom
- Server erkannt werden soll. Wenn diese Option auf <constant>TRUE</constant>
- definiert wird, dann wird der MX Record verwendet um zu prüfen ob der Server
- Emails akzeptiert. Der Standardwert dieser Option ist
- <constant>FALSE</constant>.
- </para>
- </listitem>
- </itemizedlist>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress();
- $validator->setOptions(array('domain' => false));
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.email_address.complexlocal">
- <title>Komplexe lokale Abschnitte</title>
- <para>
- <classname>Zend_Validate_EmailAdress</classname> prüft jede gültige Email Adresse mit
- RFC2822. Gültige Email Adressen sind zum Beispiel
- <emphasis>bob@domain.com</emphasis>, <emphasis>bob+jones@domain.us</emphasis>,
- <emphasis>"bob@jones"@domain.com</emphasis> und
- <emphasis>"bob jones"@domain.com</emphasis>.
- </para>
- <para>
- Einige Email Formate werden aktuell nicht geprüft (z.B. Zeilenumbruch Zeichen oder ein
- "\" Zeichen in einer Email Adresse).
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.purelocal">
- <title>Nur den lokalen Teil prüfen</title>
- <para>
- Wenn man will das <classname>Zend_Validate_EmailAddress</classname> nur den lokalen Teil
- der Email Adresse prüfen soll, und die Prüfung des Hostnamens ausschalten will, kann man
- die <property>domain</property> Option auf <constant>FALSE</constant> setzen. Das
- zwingt <classname>Zend_Validate_EmailAddress</classname> den Hostname Teil der Email
- Adresse nicht zu prüfen.
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress();
- $validator->setOptions(array('domain' => FALSE));
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.email_address.hostnametype">
- <title>Prüfen von unterschiedlichen Typen von Hostnamen</title>
- <para>
- Der Teil des Hostnamens einer Email Adresse wird mit <link
- linkend="zend.validate.set.hostname"><classname>Zend_Validate_Host</classname></link>
- geprüft. Standardmäßig werden nur DNS Hostnamen in der Form
- <filename>domain.com</filename> akzeptiert, aber wenn es gewünscht ist, können auch IP
- Adressen und lokale Hostnamen auch akzeptiert werden.
- </para>
- <para>
- Um das zu tun, muß eine <classname>Zend_Validate_EmailAddress</classname> Instanz
- erstellt werden der ein Parameter übergeben wird, um den Typ des Hostnamens anzugeben
- der akzeptiert werden soll. Mehr Details sind in
- <classname>Zend_Validate_Hostname</classname> inkludiert, zusammen mit einem Beispiel,
- wie DNS und lokale Hostnamen, akzeptiert werden wie im Beispiel das anbei steht:
- </para>
- <programlisting language="php"><![CDATA[
- $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";
- }
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.email_address.checkacceptance">
- <title>Prüfen ob der Hostname aktuell Emails akzeptiert</title>
- <para>
- 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.
- </para>
- <para>
- Die MX Prüfung ist standardmäßig nicht eingeschaltet. Um die MX Prüfung einzuschalten
- kann ein zweiter Parameter an den <classname>Zend_Validate_EmailAddress</classname>
- Konstruktor übergeben werden.
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress(
- array(
- 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
- 'mx' => true
- )
- );
- ]]></programlisting>
- <note>
- <title>Die MX Prüfung unter Windows</title>
- <para>
- In Windows Umgebungen ist die MX Prüfung nicht vorhanden wenn <acronym>PHP</acronym>
- 5.3 oder höher verwendet wird. Unter <acronym>PHP</acronym> 5.3 wird die MX
- Prüfung nicht verwendet, selbst wenn diese in den Optionen aktiviert wurde.
- </para>
- </note>
- <para>
- Alternativ kann entweder <constant>TRUE</constant> oder <constant>FALSE</constant> an
- <methodname>setValidateMx()</methodname> übergeben werden um die MX Prüfung ein- oder
- auszuschalten.
- </para>
- <para>
- 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.
- </para>
- <para>
- Manchmal gibt die Prüfung auf MX Records <constant>FALSE</constant> 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 <constant>AAAA</constant> Records anbieten. Um es
- <classname>Zend_Validate_EmailAddress</classname> zu erlauben auch auf diese anderen
- Records zu prüfen, muss man die tiefe MX Prüfung einschalten. Das kann man durch Setzen
- der <property>deep</property> Option bei der Initialisierung, oder durch Verwendung von
- <methodname>setOptions()</methodname> tun.
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress(
- array(
- 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
- 'mx' => true,
- 'deep' => true
- )
- );
- ]]></programlisting>
- <warning>
- <title>Performance Warnung</title>
- <para>
- 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.
- </para>
- </warning>
- <note>
- <title>Disallowed IP addresses</title>
- <para>
- 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
- <command>192.168.*</command> oder <command>169.254.*</command> nicht akzeptiert.
- </para>
- </note>
- </sect3>
- <sect3 id="zend.validate.set.email_address.validateidn">
- <title>Internationale Domain Namen prüfen</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname> 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
- <classname>Zend_Validate_Hostname</classname> Objekt das innerhalb von
- <classname>Zend_Validate_EmailAddress</classname> existiert.
- </para>
- <programlisting language="php"><![CDATA[
- $validator->getHostnameValidator->setValidateIdn(false);
- ]]></programlisting>
- <para>
- Weitere Informationen über die Verwendung von <methodname>setValidateIdn()</methodname>
- gibt es in der <classname>Zend_Validate_Hostname</classname> Dokumentation.
- </para>
- <para>
- Es sollte darauf geachtet werden das IDNs nur geprüft werden wenn erlaubt ist DNS
- Hostnamen zu prüfen.
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.validatetld">
- <title>Top Level Domains prüfen</title>
- <para>
- 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 <classname>Zend_Validate_Hostname</classname> geändert wird, das innerhalb von
- <classname>Zend_Validate_EmailAddress</classname> existiert.
- </para>
- <programlisting language="php"><![CDATA[
- $validator->getHostnameValidator->setValidateTld(false);
- ]]></programlisting>
- <para>
- Mehr Informationen über die Verwendung von <methodname>setValidateTld()</methodname>
- gibt es in der <classname>Zend_Validate_Hostname</classname> Dokumentation.
- </para>
- <para>
- Es sollte darauf geachtet werden das TLDs nur geprüft werden wenn es auch erlaubt ist
- DNS Hostnamen zu prüfen.
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.setmessage">
- <title>Setzen von Meldungen</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname> verwendet auch
- <classname>Zend_Validate_Hostname</classname> um den Teil des Hostnamens einer
- angegebenen Email Adresse zu prüfen. Ab Zend Framework 1.10 kann man Meldungen für
- <classname>Zend_Validate_Hostname</classname> auch von innerhalb
- <classname>Zend_Validate_EmailAddress</classname> setzen.
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress();
- $validator->setMessages(array(
- Zend_Validate_Hostname::UNKNOWN_TLD => 'Ich kenne die TLD nicht')
- );
- ]]></programlisting>
- <para>
- Vor Zend Framework 1.10 musste man die Meldungen einem eigenen
- <classname>Zend_Validate_Hostname</classname> hinzufügen, und dann diese Prüfung in
- <classname>Zend_Validate_EmailAddress</classname> setzen um die eigenen Meldungen
- zurückzubekommen.
- </para>
- </sect3>
- </sect2>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|