Zend_Validate-EmailAddress.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20115 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.set.email_address">
  5. <title>EmailAddress</title>
  6. <para>
  7. <classname>Zend_Validate_EmailAddress</classname> permet de valider une adresse mail.
  8. Ce validateur éclate d'abord l'adresse mail entre partie locale et domaine et essaie de
  9. valider ces deux parties conformément aux spécifications des adresses mail et des noms de
  10. domaine.
  11. </para>
  12. <sect3 id="zend.validate.set.email_address.basic">
  13. <title>Utilisation de base</title>
  14. <para>Vous trouverez ci-dessous un exemple d'utilisation basique&#160;</para>
  15. <programlisting language="php"><![CDATA[
  16. $validateur = new Zend_Validate_EmailAddress();
  17. if ($validateur->isValid($email)) {
  18. // l'email est valide
  19. } else {
  20. // l'email est invalide ; afficher pourquoi
  21. foreach ($validateur->getMessages() as $message) {
  22. echo "$message\n";
  23. }
  24. }
  25. ]]></programlisting>
  26. <para>
  27. Ceci validera l'adresse mail <varname>$email</varname> et, en cas d'échec,
  28. fournira des messages d'erreur informatifs via
  29. <code>$validator-&gt;getMessages()</code>.
  30. </para>
  31. </sect3>
  32. <sect3 id="zend.validate.set.email_address.options">
  33. <title>Options for validating Email Addresses</title>
  34. <para>
  35. <classname>Zend_Validate_EmailAddress</classname> supports several options which can
  36. either be set at initiation, by giving an array with the related options, or
  37. afterwards, by using <methodname>setOptions()</methodname>. The following options are
  38. supported:
  39. </para>
  40. <itemizedlist>
  41. <listitem>
  42. <para>
  43. <emphasis>allow</emphasis>: Defines which type of domain names are accepted.
  44. This option is used in conjunction with the hostname option to set the
  45. hostname validator. For more informations about possible values of this
  46. option, look at <link linkend="zend.validate.set.hostname">Hostname</link>
  47. and possible <constant>ALLOW</constant>* constants. This option defaults to
  48. <constant>ALLOW_DNS</constant>.
  49. </para>
  50. </listitem>
  51. <listitem>
  52. <para>
  53. <emphasis>deep</emphasis>: Defines if the servers MX records should be verified
  54. by a deep check. When this option is set to <constant>TRUE</constant> then
  55. additionally to MX records also the A, A6 and <constant>AAAA</constant> records
  56. are used to verify if the server accepts emails. This option defaults to
  57. <constant>FALSE</constant>.
  58. </para>
  59. </listitem>
  60. <listitem>
  61. <para>
  62. <emphasis>domain</emphasis>: Defines if the domain part should be checked.
  63. When this option is set to <constant>FALSE</constant>, then only the local part
  64. of the email address will be checked. In this case the hostname validator will
  65. not be called. This option defaults to <constant>TRUE</constant>.
  66. </para>
  67. </listitem>
  68. <listitem>
  69. <para>
  70. <emphasis>hostname</emphasis>: Sets the hostname validator with which the
  71. domain part of the email address will be validated.
  72. </para>
  73. </listitem>
  74. <listitem>
  75. <para>
  76. <emphasis>mx</emphasis>: Defines if the MX records from the server should be
  77. detected. If this option is defined to <constant>TRUE</constant> then the MX
  78. records are used to verify if the server
  79. accepts emails. This option defaults to <constant>FALSE</constant>.
  80. </para>
  81. </listitem>
  82. </itemizedlist>
  83. <programlisting language="php"><![CDATA[
  84. $validator = new Zend_Validate_EmailAddress();
  85. $validator->setOptions(array('domain' => false));
  86. ]]></programlisting>
  87. </sect3>
  88. <sect3 id="zend.validate.set.email_address.complexlocal">
  89. <title>Parties locales complexes</title>
  90. <para>
  91. <classname>Zend_Validate_EmailAddress</classname> validera toute adresse mail
  92. conforme à la RFC2822. Comme par exemple <code>bob@domaine.com</code>,
  93. <code>bob+jones@domaine.fr</code>, <code>"bob@jones"@domaine.com</code> et <code>"bob
  94. jones"@domaine.com</code>. Quelques formats de mail obsolètes ne seront pas validés (comme
  95. toute adresse mail contenant un retour chariot ou un caractère "\").
  96. </para>
  97. </sect3>
  98. <sect3 id="zend.validate.set.email_address.purelocal">
  99. <title>Validation uniquement de la partie locale</title>
  100. <para>
  101. Si vous avez besoin de <classname>Zend_Validate_EmailAddress</classname> uniquement pour
  102. vérifier la partie locale d'une adresse mail, et que vous souhaitez désactiver la
  103. validation du nom d'hôte, vous pouvez spécifier le paramètre <property>domain</property>
  104. à la valeur <constant>false</constant>. Cela force <classname>Zend_Validate_EmailAddress
  105. </classname> à ne pas valider le nom d'hôte de l'adresse mail.
  106. </para>
  107. <programlisting language="php"><![CDATA[
  108. $validator = new Zend_Validate_EmailAddress();
  109. $validator->setOptions(array('domain' => FALSE));
  110. ]]></programlisting>
  111. </sect3>
  112. <sect3 id="zend.validate.set.email_address.hostnametype">
  113. <title>Validation de différents types de noms de domaine</title>
  114. <para>
  115. La partie domaine d'une adresse mail est validée via <link
  116. linkend="zend.validate.set.hostname"><classname>Zend_Validate_Hostname</classname></link>.
  117. Par défaut, seules les domaines qualifiés sous la forme <code>domaine.com</code> sont
  118. acceptés, même si, il vous est possible d'accepter les adresses IP et les domaines locaux
  119. également.
  120. </para>
  121. <para>
  122. Afin de réaliser cette opération, il vous faut instancier
  123. <classname>Zend_Validate_EmailAddress</classname> en lui passant un paramètre indiquant le
  124. type de nom de domaine à accepter. Les détails sont disponibles dans
  125. <classname>Zend_Validate_EmailAddress</classname> mais vous trouverez ci-dessous un exemple
  126. illustrant comment accepter les noms de domaines qualifiés et les hôtes locaux :
  127. </para>
  128. <programlisting language="php"><![CDATA[
  129. $validator = new Zend_Validate_EmailAddress(
  130. Zend_Validate_Hostname::ALLOW_DNS |
  131. Zend_Validate_Hostname::ALLOW_LOCAL);
  132. if ($validator->isValid($email)) {
  133. // l'email est valide
  134. } else {
  135. // l'email est invalide ; afficher pourquoi
  136. foreach ($validateur->getMessages() as $message) {
  137. echo "$message\n";
  138. }
  139. }
  140. ]]></programlisting>
  141. </sect3>
  142. <sect3 id="zend.validate.set.email_address.checkacceptance">
  143. <title>Vérification que le nom de domaine accepte réellement le courriel</title>
  144. <para>
  145. Le fait qu'une adresse électronique est dans un format correct, ne signifie pas
  146. nécessairement que l'adresse électronique existe en réalité. Pour aider résoudre ce
  147. problème, vous pouvez utiliser la validation MX pour vérifier si une entrée MX (le courriel)
  148. existe dans le l'enregistrement du DNS pour le nom de domaine du courriel. Cela vous dit que
  149. le nom de domaine accepte le courriel, mais ne vous dit pas que l'adresse électronique elle-même
  150. est valable.
  151. </para>
  152. <para>
  153. La vérification MX n'est pas active par défaut et est seulement supporté par des
  154. plates-formes UNIX pour l'instant. Pour activer la vérification MX vous pouvez passer un
  155. deuxième paramètre au constructeur <classname>Zend_Validate_EmailAddress</classname>.
  156. </para>
  157. <programlisting language="php"><![CDATA[
  158. $validator = new Zend_Validate_EmailAddress(
  159. array(
  160. 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
  161. 'mx' => true
  162. )
  163. );
  164. ]]></programlisting>
  165. <note>
  166. <title>MX Check under Windows</title>
  167. <para>
  168. Within Windows environments MX checking is only available when
  169. <acronym>PHP</acronym> 5.3 or above is used. Below <acronym>PHP</acronym> 5.3 MX
  170. checking will not be used even if it's activated within the options.
  171. </para>
  172. </note>
  173. <para>
  174. Alternativement vous pouvez passer soit <constant>TRUE</constant> soit
  175. <constant>FALSE</constant> à <code>$validator-&gt;setValidateMx()</code> pour activer ou désactiver
  176. la validation MX.
  177. </para>
  178. <para>
  179. En activant ce paramètre, les fonctions de réseau seront utilisés pour vérifier la
  180. présence d'un enregistrement MX sur le nom de domaine de l'adresse électronique que vous
  181. voulez valider. Faîtes cependant attention, cela ralentira probablement votre
  182. scénario.
  183. </para>
  184. <para>
  185. Sometimes validation for MX records returns <constant>FALSE</constant>, even if emails
  186. are accepted. The reason behind this behaviour is, that servers can accept emails even
  187. if they do not provide a MX record. In this case they can provide A, A6 or
  188. <constant>AAAA</constant> records. To allow
  189. <classname>Zend_Validate_EmailAddress</classname> to check also for these other records,
  190. you need to set deep MX validation. This can be done at initiation by setting the
  191. <property>deep</property> option or by using <methodname>setOptions()</methodname>.
  192. </para>
  193. <programlisting language="php"><![CDATA[
  194. $validator = new Zend_Validate_EmailAddress(
  195. array(
  196. 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
  197. 'mx' => true,
  198. 'deep' => true
  199. )
  200. );
  201. ]]></programlisting>
  202. <warning>
  203. <title>Performance warning</title>
  204. <para>
  205. You should be aware that enabling MX check will slow down you script because of the
  206. used network functions. Enabling deep check will slow down your script even more as
  207. it searches the given server for 3 additional types.
  208. </para>
  209. </warning>
  210. <note>
  211. <title>Disallowed IP addresses</title>
  212. <para>
  213. You should note that MX validation is only accepted for external servers. When deep
  214. MX validation is enabled, then local IP addresses like <command>192.168.*</command>
  215. or <command>169.254.*</command> are not accepted.
  216. </para>
  217. </note>
  218. </sect3>
  219. <sect3 id="zend.validate.set.email_address.validateidn">
  220. <title>Valider les noms de domaines internationaux</title>
  221. <para>
  222. <classname>Zend_Validate_EmailAddress</classname> peut aussi vérifier les caractères
  223. internationaux qui existent dans quelques domaines. Ceci est connu comme le support de Nom
  224. de Domaine International (IDN). Celui-ci est activé par défaut, quoique vous puissiez le
  225. mettre hors service en changeant le paramètre via l'objet interne
  226. <classname>Zend_Validate_Hostname</classname> qui existe dans
  227. <classname>Zend_Validate_EmailAddress</classname>.
  228. </para>
  229. <programlisting language="php"><![CDATA[
  230. $validator->hostnameValidator->setValidateIdn(false);
  231. ]]></programlisting>
  232. <para>
  233. De plus amples informations concernant l'utilisation de
  234. <methodname>setValidateIdn()</methodname> sont présentes dans la <link
  235. linkend="zend.validate.set.hostname">documentation de
  236. <classname>Zend_Validate_Hostname</classname></link>.
  237. </para>
  238. <para>
  239. Notez cependant que les IDNs sont seulement validés si vous autorisez la validation
  240. des nom de domaines.
  241. </para>
  242. </sect3>
  243. <sect3 id="zend.validate.set.email_address.validatetld">
  244. <title>Validation des "Top Level Domains"</title>
  245. <para>
  246. Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Ceci est
  247. activé par défaut, quoique vous puissiez le mettre hors service en changeant le paramètre
  248. via l'objet <classname>Zend_Validate_Hostname</classname> interne qui existe dans
  249. <classname>Zend_Validate_EmailAddress</classname>.
  250. </para>
  251. <programlisting language="php"><![CDATA[
  252. $validator->hostnameValidator->setValidateTld(false);
  253. ]]></programlisting>
  254. <para>
  255. De plus amples informations concernant l'utilisation de
  256. <methodname>setValidateTld()</methodname> sont présentes dans la <link
  257. linkend="zend.validate.set.hostname">documentation de
  258. <classname>Zend_Validate_Hostname</classname></link>.
  259. </para>
  260. <para>
  261. Notez cependant que les TLDs sont seulement validés si vous autorisez la validation
  262. des nom de domaines.
  263. </para>
  264. </sect3>
  265. <sect3 id="zend.validate.set.email_address.setmessage">
  266. <title>Setting messages</title>
  267. <para>
  268. <classname>Zend_Validate_EmailAddress</classname> makes also use of
  269. <classname>Zend_Validate_Hostname</classname> to check the hostname part of a given
  270. email address. As with Zend Framework 1.10 you can simply set messages for
  271. <classname>Zend_Validate_Hostname</classname> from within
  272. <classname>Zend_Validate_EmailAddress</classname>.
  273. </para>
  274. <programlisting language="php"><![CDATA[
  275. $validator = new Zend_Validate_EmailAddress();
  276. $validator->setMessages(
  277. array(
  278. Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave'
  279. )
  280. );
  281. ]]></programlisting>
  282. <para>
  283. Before Zend Framework 1.10 you had to attach the messages to your own
  284. <classname>Zend_Validate_Hostname</classname>, and then set this validator within
  285. <classname>Zend_Validate_EmailAddress</classname> to get your own messages returned.
  286. </para>
  287. </sect3>
  288. </sect2>