Zend_Validate-EmailAddress.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 21241 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.set.email_address">
  5. <title>Dirección de Email</title>
  6. <para>
  7. <classname>Zend_Validate_EmailAddress</classname> Le permite validar una
  8. dirección de email. El validador primero divide la dirección de email en
  9. la parte local @ nombre de host e intenta igualar a estos contra
  10. especificaciones conocidas para direcciones y nombres de host para el
  11. correo electrónico. </para>
  12. <sect3 id="zend.validate.set.email_address.basic">
  13. <title>Utilización básica</title>
  14. <para> Un ejemplo básico de uso se ve a continuación: </para>
  15. <programlisting language="php"><![CDATA[
  16. $validator = new Zend_Validate_EmailAddress();
  17. if ($validator->isValid($email)) {
  18. // El email parece ser válido
  19. } else {
  20. // El email es inválido; muestre las razones
  21. foreach ($validator->getMessages() as $message) {
  22. echo "$message\n";
  23. }
  24. }
  25. ]]></programlisting>
  26. <para> Esto coincide con el correo electrónico <varname>$email</varname>
  27. y si fracasa, alimenta <code>$validator->getMessages()</code> con
  28. mensajes de error útiles. </para>
  29. </sect3>
  30. <sect3 id="zend.validate.set.email_address.options">
  31. <title>>Partes locales complejas</title>
  32. <para>
  33. <classname>Zend_Validate_EmailAddress</classname> supports several
  34. options which can either be set at initiation, by giving an array
  35. with the related options, or afterwards, by using
  36. <methodname>setOptions()</methodname> . The following options
  37. are supported: </para>
  38. <itemizedlist>
  39. <listitem>
  40. <para>
  41. <emphasis>allow</emphasis> : Defines which type of domain
  42. names are accepted. This option is used in conjunction with
  43. the hostname option to set the hostname validator. For more
  44. informations about possible values of this option, look at
  45. <link linkend="zend.validate.set.hostname"
  46. >Hostname</link> and possible <constant>ALLOW</constant>
  47. * constants. This option defaults to
  48. <constant>ALLOW_DNS</constant> . </para>
  49. </listitem>
  50. <listitem>
  51. <para>
  52. <emphasis>hostname</emphasis> : Sets the hostname validator
  53. with which the domain part of the email address will be
  54. validated. </para>
  55. </listitem>
  56. <listitem>
  57. <para>
  58. <emphasis>mx</emphasis> : Defines if the MX records from the
  59. server should be detected. If this option is defined to
  60. <constant>TRUE</constant> then the MX records are used
  61. to verify if the server accepts emails. This option defaults
  62. to <constant>FALSE</constant> . </para>
  63. </listitem>
  64. <listitem>
  65. <para>
  66. <emphasis>deep</emphasis> : Defines if the servers MX
  67. records should be verified by a deep check. When this option
  68. is set to <constant>TRUE</constant> then additionally to MX
  69. records also the A, A6 and <constant>AAAA</constant> records
  70. are used to verify if the server accepts emails. This option
  71. defaults to <constant>FALSE</constant> . </para>
  72. </listitem>
  73. <listitem>
  74. <para>
  75. <emphasis>domain</emphasis> : Defines if the domain part
  76. should be checked. When this option is set to
  77. <constant>FALSE</constant> , then only the local part of
  78. the email address will be checked. In this case the hostname
  79. validator will not be called. This option defaults to
  80. <constant>TRUE</constant> . </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>Complex local parts</title>
  90. <para>
  91. <classname>Zend_Validate_EmailAddress</classname> se comparará con
  92. cualquier dirección de correo válida de acuardo a RFC2822. Por
  93. ejemplo, correos electrónicos válidos incluyen
  94. <code>bob@domain.com</code> , <code>bob+jones@domain.us</code> ,
  95. <code>"bob@jones"@domain.com</code> y <code>"bob
  96. jones"@domain.com</code>
  97. </para>
  98. <para> Algunos formatos obsoletos de email actualmente no validan (por
  99. ejemplo los retornos de carro o "\" un caracter en una dirección de
  100. correo electrónico). </para>
  101. </sect3>
  102. <sect3 id="zend.validate.set.email_address.purelocal">
  103. <title>Validating only the local part</title>
  104. <para> If you need <classname>Zend_Validate_EmailAddress</classname> to
  105. check only the local part of an email address, and want to disable
  106. validation of the hostname, you can set the
  107. <property>domain</property> option to <constant>FALSE</constant>
  108. . This forces <classname>Zend_Validate_EmailAddress</classname> not
  109. to validate the hostname part of the email address. </para>
  110. <programlisting language="php"><![CDATA[
  111. $validator = new Zend_Validate_EmailAddress();
  112. $validator->setOptions(array('domain' => FALSE));
  113. ]]></programlisting>
  114. </sect3>
  115. <sect3 id="zend.validate.set.email_address.hostnametype">
  116. <title>Validating different types of hostnames</title>
  117. <para> La parte nombre de host de una dirección de correo es validado
  118. contra <link linkend="zend.validate.set.hostname">
  119. <classname>Zend_Validate_Hostname</classname>
  120. </link> . Por defecto sólo son aceptados nombres de host DNS de la
  121. forma <methodname>domain.com</methodname> , aunque si lo desea
  122. también puede aceptar direcciones IP y nombres de host locales. </para>
  123. <para> Para ello necesita instanciar a
  124. <classname>Zend_Validate_EmailAddress</classname> pasando un
  125. parámetro para indicar el tipo de nombres de host que quiere
  126. aceptar. Más detalles están incluidos en
  127. <classname>Zend_Validate_EmailAddress</classname> , aunque abajo
  128. hay un ejemplo de cómo aceptar tanto nombres de host DNS y locales: </para>
  129. <programlisting language="php"><![CDATA[
  130. $validator = new Zend_Validate_EmailAddress(
  131. Zend_Validate_Hostname::ALLOW_DNS |
  132. Zend_Validate_Hostname::ALLOW_LOCAL);
  133. if ($validator->isValid($email)) {
  134. // email parece ser válido
  135. } else {
  136. // email es inválido; muestre las razones
  137. foreach ($validator->getMessages() as $message) {
  138. echo "$message\n";
  139. }
  140. }
  141. ]]></programlisting>
  142. </sect3>
  143. <sect3 id="zend.validate.set.email_address.checkacceptance">
  144. <title>Verificar si el nombre de host realmente acepta email</title>
  145. <para> Sólo porque una dirección de correo electrónico está en el
  146. formato correcto, no necesariamente significa que esa dirección de
  147. correo electrónico existe realmente. Para ayudar a resolver este
  148. problema, puede usar la validación MX para comprobar si existe una
  149. entrada MX (email) en el registro DNS para correo electrónico en ese
  150. nombre de host. Esto le dice que el nombre de host acepta email,
  151. pero no le dice si la dirección de correo electrónico exacta es
  152. válida en si misma. </para>
  153. <para> La comprobación MX no está activada por defecto y en este momento
  154. es soportada sólo por plataformas UNIX. Para habilitar el control MX
  155. puede pasar un segundo parámetro al constructor
  156. <classname>Zend_Validate_EmailAddress</classname> . </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> Within Windows environments MX checking is only available
  168. when <acronym>PHP</acronym> 5.3 or above is used. Below
  169. <acronym>PHP</acronym> 5.3 MX checking will not be used even
  170. if it's activated within the options. </para>
  171. </note>
  172. <para> Alternativamente, para activar o desactivar la validación MX
  173. puede pasar <constant>TRUE</constant> o <constant>FALSE</constant> a
  174. <methodname>$validator->setValidateMx()</methodname> . </para>
  175. <para> Al habilitarlo, se usarán las funciones de red para comprobar la
  176. presencia de un registro MX en el nombre de host de la dirección de
  177. correo electrónico que desea validar. Tenga en cuenta esto
  178. probablemente hará más lento su script. </para>
  179. <para> Sometimes validation for MX records returns false, even if emails
  180. are accepted. The reason behind this behaviour is, that servers can
  181. accept emails even if they do not provide a MX record. In this case
  182. they can provide A, A6 or <constant>AAAA</constant> records. To
  183. allow <classname>Zend_Validate_EmailAddress</classname> to check
  184. also for these other records, you need to set deep MX validation.
  185. This can be done at initiation by setting the
  186. <property>deep</property> option or by using
  187. <methodname>setOptions()</methodname> . </para>
  188. <programlisting language="php"><![CDATA[
  189. $validator = new Zend_Validate_EmailAddress(
  190. array(
  191. 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
  192. 'mx' => true,
  193. 'deep' => true
  194. )
  195. );
  196. ]]></programlisting>
  197. <warning>
  198. <title>Performance warning</title>
  199. <para> You should be aware that enabling MX check will slow down you
  200. script because of the used network functions. Enabling deep
  201. check will slow down your script even more as it searches the
  202. given server for 3 additional types. </para>
  203. </warning>
  204. <note>
  205. <title>Disallowed IP addresses</title>
  206. <para> You should note that MX validation is only accepted for
  207. external servers. When deep MX validation is enabled, then local
  208. IP addresses like <command>192.168.*</command> or
  209. <command>169.254.*</command> are not accepted. </para>
  210. </note>
  211. </sect3>
  212. <sect3 id="zend.validate.set.email_address.validateidn">
  213. <title>Validating International Domains Names</title>
  214. <para>
  215. <classname>Zend_Validate_EmailAddress</classname> también comparará
  216. caracteres internationales que existen en algunos dominios. Esto se
  217. conoce como soporte de International Domain Name (IDN). Está
  218. activado por defecto, aunque puede deshabilitarlo internamente
  219. cambiando el ajuste a través del objeto
  220. <classname>Zend_Validate_Hostname</classname> que existe en
  221. <classname>Zend_Validate_EmailAddress</classname> . </para>
  222. <programlisting language="php"><![CDATA[
  223. $validator->getHostnameValidator()->setValidateIdn(false);
  224. ]]></programlisting>
  225. <para> Sobre el uso de <methodname>setValidateIdn()</methodname>
  226. encontrará más información en la documentación de
  227. <classname>Zend_Validate_Hostname</classname> . </para>
  228. <para> Tenga en cuenta que los IDNs se validarán solo si usted permite
  229. que nombres de host DNS sean validados. </para>
  230. </sect3>
  231. <sect3 id="zend.validate.set.email_address.validatetld">
  232. <title>Validación de dominios de nivel superior</title>
  233. <para> Por defecto, un nombre de host se cotejará con una lista conocida
  234. de TLDs. Está activado por defecto, aunque puede deshabilitarlo
  235. cambiando el ajuste a través del objeto interno
  236. <classname>Zend_Validate_Hostname</classname> que existe en
  237. <classname>Zend_Validate_EmailAddress</classname> . </para>
  238. <programlisting language="php"><![CDATA[
  239. $validator->getHostnameValidator()->setValidateTld(false);
  240. ]]></programlisting>
  241. <para> Encontrará más información sobre el uso de
  242. <methodname>setValidateTld()</methodname> en la documentación de
  243. <classname>Zend_Validate_Hostname</classname> . </para>
  244. <para> Tenga en cuenta que los TLDs se validarán solo si usted permite
  245. que nombres de host DNS sean validados. </para>
  246. </sect3>
  247. <sect3 id="zend.validate.set.email_address.setmessage">
  248. <title>Setting messages</title>
  249. <para>
  250. <classname>Zend_Validate_EmailAddress</classname> makes also use of
  251. <classname>Zend_Validate_Hostname</classname> to check the
  252. hostname part of a given email address. As with Zend Framework 1.10
  253. you can simply set messages for
  254. <classname>Zend_Validate_Hostname</classname> from within
  255. <classname>Zend_Validate_EmailAddress</classname> . </para>
  256. <programlisting language="php"><![CDATA[
  257. $validator = new Zend_Validate_EmailAddress();
  258. $validator->setMessages(
  259. array(
  260. Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave'
  261. )
  262. );
  263. ]]></programlisting>
  264. <para> Before Zend Framework 1.10 you had to attach the messages to your
  265. own <classname>Zend_Validate_Hostname</classname> , and then set
  266. this validator within
  267. <classname>Zend_Validate_EmailAddress</classname> to get your
  268. own messages returned. </para>
  269. </sect3>
  270. </sect2>