<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 15346 -->
<!-- Reviewed: no -->
<sect2 id="zend.validate.set.email_address">
    <title>EmailAddress</title>

    <para>
        <classname>Zend_Validate_EmailAddress</classname> permet de valider une adresse émail.
        Ce validateur éclate d'abord l'adresse émail entre partie locale et domaine et essaie de
        valider ces deux parties conformément aux spécifications des adresses émail et des noms de
        domaine.
    </para>

    <para><emphasis>Utilisation de base</emphasis></para>

    <para>
        Exemple basique : <programlisting language="php"><![CDATA[
$validateur = new Zend_Validate_EmailAddress();
if ($validateur->isValid($email)) {
    // l'email est valide
} else {
    // l'email est invalide ; afficher pourquoi
    foreach ($validateur->getMessages() as $message) {
        echo "$message\n";
    }
}
]]></programlisting> Ceci validera l'adresse émail <code>$email</code> et, en cas d'échec,
        fournira des messages d'erreur informatifs via
        <code>$validator-&gt;getMessages()</code>.
    </para>

    <para><emphasis>Parties locales complexes</emphasis></para>

    <para>
        <classname>Zend_Validate_EmailAddress</classname> validera toute adresse émail
        conforme à la RFC2822. Comme par exemple <code>bob@domaine.com</code>,
        <code>bob+jones@domaine.fr</code>, <code>"bob@jones"@domaine.com</code> et <code>"bob
        jones"@domaine.com</code>. Quelques formats d'émail obsolètes ne seront pas validés (comme
        tout émail contenant un retour chariot ou un caractère "\").
    </para>

    <para><emphasis>Validation de différents types de noms de domaine</emphasis></para>

    <para>
        La partie domaine d'une adresse émail est validée via <link
        linkend="zend.validate.set.hostname"><classname>Zend_Validate_Hostname</classname></link>.
        Par défaut, seules les domaines qualifiés sous la forme <code>domaine.com</code> sont
        acceptés, même si, il vous est possible d'accepter les adresses IP et les domaines locaux
        également.
    </para>

    <para>
        Afin de réaliser cette opération, il vous faut instancier
        <classname>Zend_Validate_EmailAddress</classname> en lui passant un paramètre indiquant le
        type de nom de domaine à accepter. Les détails sont disponibles dans
        <classname>Zend_Validate_EmailAddress</classname> mais vous trouverez ci-dessous un exemple
        illustrant comment accepter les noms de domaines qualifiés et les hôtes locaux :
        <programlisting language="php"><![CDATA[
$validateur = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL);
if ($validateur->isValid($email)) {
    // l'email est valide
} else {
    // l'email est invalide ; afficher pourquoi
    foreach ($validateur->getMessages() as $message) {
        echo "$message\n";
    }
}
]]></programlisting></para>

    <para>
        <emphasis>Vérification que le nom de domaine accepte réellement
        l'émail</emphasis>
    </para>

    <para>
        Le fait qu'une adresse électronique est dans un format correct, ne signifie pas
        nécessairement que l'adresse électronique existe en réalité. Pour aider résoudre ce
        problème, vous pouvez utiliser la validation MX pour vérifier si une entrée MX (l'émail)
        existe dans le l'enregistrement du DNS pour le nom de domaine de l'émail. Cela vous dit que
        le nom de domaine accepte l'émail, mais ne vous dit pas que l'adresse électronique elle-même
        est valable.
    </para>

    <para>
        La vérification MX n'est pas active par défaut et est seulement supporté par des
        plates-formes UNIX pour l'instant. Pour activer la vérification MX vous pouvez passer un
        deuxième paramètre au constructeur <classname>Zend_Validate_EmailAddress</classname>.
        <programlisting language="php"><![CDATA[
$validator =
    new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS,
                                   true);
]]></programlisting> Alternativement vous pouvez passer soit <code>true</code> soit
        <code>false</code> à <code>$validator-&gt;setValidateMx()</code> pour activer ou désactiver
        la validation MX.
    </para>

    <para>
        En activant ce paramètre, les fonctions de réseau seront utilisés pour vérifier la
        présence d'un enregistrement MX sur le nom de domaine de l'adresse électronique que vous
        voulez valider. Faîtes cependant attention, cela ralentira probablement votre
        scénario.
    </para>

    <para><emphasis>Valider les noms de domaines internationaux</emphasis></para>

    <para>
        <classname>Zend_Validate_EmailAddress</classname> peut aussi vérifier les caractères
        internationaux qui existent dans quelques domaines. Ceci est connu comme le support de Nom
        de Domaine International (IDN). Celui-ci est activé par défaut, quoique vous puissiez le
        mettre hors service en changeant le paramètre via l'objet interne
        <classname>Zend_Validate_Hostname</classname> qui existe dans
        <classname>Zend_Validate_EmailAddress</classname>. <programlisting language="php"><![CDATA[
$validator->hostnameValidator->setValidateIdn(false);
]]></programlisting> De plus amples informations concernant l'utilisation de
        <code>setValidateIdn()</code> sont présentes dans la <link
        linkend="zend.validate.set.hostname">documentation de
        <classname>Zend_Validate_Hostname</classname></link>.
    </para>

    <para>
        Notez cependant que les IDNs sont seulement validés si vous autorisez la validation
        des nom de domaines.
    </para>

    <para><emphasis>Validation des "Top Level Domains"</emphasis></para>

    <para>
        Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Ceci est
        activé par défaut, quoique vous puissiez le mettre hors service en changeant le paramètre
        via l'objet <classname>Zend_Validate_Hostname</classname> interne qui existe dans
        <classname>Zend_Validate_EmailAddress</classname>. <programlisting language="php"><![CDATA[
$validator->hostnameValidator->setValidateTld(false);
]]></programlisting> De plus amples informations concernant l'utilisation de
        <code>setValidateTld()</code> sont présentes dans la <link
        linkend="zend.validate.set.hostname">documentation de
        <classname>Zend_Validate_Hostname</classname></link>.
    </para>

    <para>
        Notez cependant que les TLDs sont seulement validés si vous autorisez la validation
        des nom de domaines.
    </para>
</sect2>