| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 20115 -->
- <!-- 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>
- <sect3 id="zend.validate.set.email_address.basic">
- <title>Utilisation de base</title>
- <para>Vous trouverez ci-dessous un exemple d'utilisation basique </para>
- <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>
- <para>
- Ceci validera l'adresse mail <varname>$email</varname> et, en cas d'échec,
- fournira des messages d'erreur informatifs via
- <code>$validator->getMessages()</code>.
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.options">
- <title>Options for validating Email Addresses</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname> supports several options which can
- either be set at initiation, by giving an array with the related options, or
- afterwards, by using <methodname>setOptions()</methodname>. The following options are
- supported:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>allow</emphasis>: Defines which type of domain names are accepted.
- This option is used in conjunction with the hostname option to set the
- hostname validator. For more informations about possible values of this
- option, look at <link linkend="zend.validate.set.hostname">Hostname</link>
- and possible <constant>ALLOW</constant>* constants. This option defaults to
- <constant>ALLOW_DNS</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>deep</emphasis>: Defines if the servers MX records should be verified
- by a deep check. When this option is set to <constant>TRUE</constant> then
- additionally to MX records also the A, A6 and <constant>AAAA</constant> records
- are used to verify if the server accepts emails. This option defaults to
- <constant>FALSE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>domain</emphasis>: Defines if the domain part should be checked.
- When this option is set to <constant>FALSE</constant>, then only the local part
- of the email address will be checked. In this case the hostname validator will
- not be called. This option defaults to <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>hostname</emphasis>: Sets the hostname validator with which the
- domain part of the email address will be validated.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>mx</emphasis>: Defines if the MX records from the server should be
- detected. If this option is defined to <constant>TRUE</constant> then the MX
- records are used to verify if the server
- accepts emails. This option defaults to <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>Parties locales complexes</title>
- <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 de mail obsolètes ne seront pas validés (comme
- toute adresse mail contenant un retour chariot ou un caractère "\").
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.purelocal">
- <title>Validation uniquement de la partie locale</title>
- <para>
- Si vous avez besoin de <classname>Zend_Validate_EmailAddress</classname> uniquement pour
- vérifier la partie locale d'une adresse mail, et que vous souhaitez désactiver la
- validation du nom d'hôte, vous pouvez spécifier le paramètre <property>domain</property>
- à la valeur <constant>false</constant>. Cela force <classname>Zend_Validate_EmailAddress
- </classname> à ne pas valider le nom d'hôte de l'adresse mail.
- </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>Validation de différents types de noms de domaine</title>
- <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 :
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress(
- Zend_Validate_Hostname::ALLOW_DNS |
- Zend_Validate_Hostname::ALLOW_LOCAL);
- if ($validator->isValid($email)) {
- // l'email est valide
- } else {
- // l'email est invalide ; afficher pourquoi
- foreach ($validateur->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.email_address.checkacceptance">
- <title>Vérification que le nom de domaine accepte réellement le courriel</title>
- <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 (le courriel)
- existe dans le l'enregistrement du DNS pour le nom de domaine du courriel. Cela vous dit que
- le nom de domaine accepte le courriel, 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>.
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress(
- array(
- 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
- 'mx' => true
- )
- );
- ]]></programlisting>
- <note>
- <title>MX Check under Windows</title>
- <para>
- Within Windows environments MX checking is only available when
- <acronym>PHP</acronym> 5.3 or above is used. Below <acronym>PHP</acronym> 5.3 MX
- checking will not be used even if it's activated within the options.
- </para>
- </note>
- <para>
- Alternativement vous pouvez passer soit <constant>TRUE</constant> soit
- <constant>FALSE</constant> à <code>$validator->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>
- Sometimes validation for MX records returns <constant>FALSE</constant>, even if emails
- are accepted. The reason behind this behaviour is, that servers can accept emails even
- if they do not provide a MX record. In this case they can provide A, A6 or
- <constant>AAAA</constant> records. To allow
- <classname>Zend_Validate_EmailAddress</classname> to check also for these other records,
- you need to set deep MX validation. This can be done at initiation by setting the
- <property>deep</property> option or by using <methodname>setOptions()</methodname>.
- </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 warning</title>
- <para>
- You should be aware that enabling MX check will slow down you script because of the
- used network functions. Enabling deep check will slow down your script even more as
- it searches the given server for 3 additional types.
- </para>
- </warning>
- <note>
- <title>Disallowed IP addresses</title>
- <para>
- You should note that MX validation is only accepted for external servers. When deep
- MX validation is enabled, then local IP addresses like <command>192.168.*</command>
- or <command>169.254.*</command> are not accepted.
- </para>
- </note>
- </sect3>
- <sect3 id="zend.validate.set.email_address.validateidn">
- <title>Valider les noms de domaines internationaux</title>
- <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>.
- </para>
- <programlisting language="php"><![CDATA[
- $validator->hostnameValidator->setValidateIdn(false);
- ]]></programlisting>
- <para>
- De plus amples informations concernant l'utilisation de
- <methodname>setValidateIdn()</methodname> 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>
- </sect3>
- <sect3 id="zend.validate.set.email_address.validatetld">
- <title>Validation des "Top Level Domains"</title>
- <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>.
- </para>
- <programlisting language="php"><![CDATA[
- $validator->hostnameValidator->setValidateTld(false);
- ]]></programlisting>
- <para>
- De plus amples informations concernant l'utilisation de
- <methodname>setValidateTld()</methodname> 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>
- </sect3>
- <sect3 id="zend.validate.set.email_address.setmessage">
- <title>Setting messages</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname> makes also use of
- <classname>Zend_Validate_Hostname</classname> to check the hostname part of a given
- email address. As with Zend Framework 1.10 you can simply set messages for
- <classname>Zend_Validate_Hostname</classname> from within
- <classname>Zend_Validate_EmailAddress</classname>.
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress();
- $validator->setMessages(
- array(
- Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave'
- )
- );
- ]]></programlisting>
- <para>
- Before Zend Framework 1.10 you had to attach the messages to your own
- <classname>Zend_Validate_Hostname</classname>, and then set this validator within
- <classname>Zend_Validate_EmailAddress</classname> to get your own messages returned.
- </para>
- </sect3>
- </sect2>
|