<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 15742 -->
<!-- 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>

    <para>
        <emphasis>Normale Verwendung</emphasis>
    </para>

    <para>
        Ein Beispiel einer normalen Benutzung ist anbei:

        <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>

        Das prüft die Email Adresse <code>$email</code> und gibt bei einem Fehler über
        <code>$validator->getMessages()</code> eine nützliche Fehlermeldung aus.
    </para>

    <para>
        <emphasis>Komplexe lokale Abschnitte</emphasis>
    </para>

    <para>
        <classname>Zend_Validate_EmailAdress</classname> prüft jede gültige Email Adresse mit
        RFC2822. Gültige Email Adressen sind zum Beispiel <code>bob@domain.com</code>,
        <code>bob+jones@domain.us</code>, <code>"bob@jones"@domain.com</code> und
        <code>"bob jones"@domain.com</code>
    </para>

    <para>
        Einige Email Formate werden aktuell nicht geprüft (z.B. Zeilenumbruch Zeichen oder ein
        "\" Zeichen in einer Email Adresse).
    </para>

    <para>
        <emphasis>Prüfen von unterschiedlichen Typen von Hostnamen</emphasis>
    </para>

    <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 <code>domain.com</code>
        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:

        <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>
    </para>

    <para>
        <emphasis>Prüfen ob der Hostname aktuell Emails akzeptiert</emphasis>
    </para>

    <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 und wird aktuell nur durch UNIX
        Platformen unterstützt. Um die MX Prüfung einzuschalten kann ein zweiter Parameter an den
        <classname>Zend_Validate_EmailAddress</classname> Konstruktor übergeben werden.

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS,
                                            true);
]]></programlisting>

        Alternativ kann entweder <constant>TRUE</constant> oder <constant>FALSE</constant> an
        <code>$validator->setValidateMx()</code> ü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>
        <emphasis>Internationale Domain Namen prüfen</emphasis>
    </para>

    <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.

        <programlisting language="php"><![CDATA[
$validator->hostnameValidator->setValidateIdn(false);
]]></programlisting>

        Weitere Informationen über die Verwendung von <code>setValidateIdn()</code> 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>

    <para>
        <emphasis>Top Level Domains prüfen</emphasis>
    </para>

    <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.

        <programlisting language="php"><![CDATA[
$validator->hostnameValidator->setValidateTld(false);
]]></programlisting>

        Mehr Informationen über die Verwendung von <code>setValidateTld()</code> 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>

</sect2>
<!--
vim:se ts=4 sw=4 et:
-->
