Zend_Validate-EmailAddress.xml 14 KB

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