| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 19419 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.validate.set.email_address">
- <title>Dirección de Email</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname>
- Le permite validar una dirección
- de email. El validador primero divide la dirección de email
- en la parte
- local @ nombre de host e intenta igualar a estos contra especificaciones
- conocidas para direcciones y nombres de host para el correo electrónico.
- </para>
- <sect3 id="zend.validate.set.email_address.basic">
- <title>Utilización básica</title>
- <para>
- Un ejemplo básico de uso se ve a continuación:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress();
- if ($validator->isValid($email)) {
- // El email parece ser válido
- } else {
- // El email es inválido; muestre las razones
- foreach ($validator->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- Esto coincide con el correo electrónico
- <varname>$email</varname>
- y si fracasa,
- alimenta
- <code>$validator->getMessages()</code>
- con mensajes de error útiles.
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.options">
- <title>>Partes locales complejas</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>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>
- <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>
- </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>Complex local parts</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname>
- se comparará con cualquier
- dirección de correo válida de acuardo a RFC2822.
- Por ejemplo, correos electrónicos válidos incluyen
- <code>bob@domain.com</code>
- ,
- <code>bob+jones@domain.us</code>
- ,
- <code>"bob@jones"@domain.com</code>
- y
- <code>"bob jones"@domain.com</code>
- </para>
- <para>
- Algunos formatos obsoletos de email actualmente no validan
- (por ejemplo los retornos de carro o "\" un caracter en una dirección
- de correo electrónico).
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.purelocal">
- <title>Validating only the local part</title>
- <para>
- If you need
- <classname>Zend_Validate_EmailAddress</classname>
- to check only the local
- part of an email address, and want to disable validation of the
- hostname, you can
- set the
- <property>domain</property>
- option to
- <constant>FALSE</constant>
- . This forces
- <classname>Zend_Validate_EmailAddress</classname>
- not to validate the hostname part of
- the email address.
- </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>Validating different types of hostnames</title>
- <para>
- La parte nombre de host de una dirección de correo es validado contra
- <link linkend="zend.validate.set.hostname">
- <classname>Zend_Validate_Hostname</classname>
- </link>
- .
- Por defecto sólo son aceptados nombres de host DNS de la forma
- <methodname>domain.com</methodname>
- , aunque si lo desea también puede aceptar
- direcciones IP y nombres de host locales.
- </para>
- <para>
- Para ello necesita instanciar a
- <classname>Zend_Validate_EmailAddress</classname>
- pasando un parámetro para indicar el tipo de nombres de host que quiere aceptar.
- Más detalles están incluidos en
- <classname>Zend_Validate_EmailAddress</classname>
- ,
- aunque abajo hay un ejemplo de cómo aceptar tanto nombres de host DNS y
- locales:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress(
- Zend_Validate_Hostname::ALLOW_DNS |
- Zend_Validate_Hostname::ALLOW_LOCAL);
- if ($validator->isValid($email)) {
- // email parece ser válido
- } else {
- // email es inválido; muestre las razones
- foreach ($validator->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.email_address.checkacceptance">
- <title>Verificar si el nombre de host realmente acepta email</title>
- <para>
- Sólo porque una dirección de correo electrónico está en el formato correcto,
- no necesariamente significa que esa dirección de correo electrónico
- existe realmente. Para ayudar a resolver este problema, puede usar la
- validación MX para comprobar si existe una entrada MX (email) en el
- registro DNS para correo electrónico en ese nombre de host.
- Esto le dice que el nombre de host acepta email, pero no le dice si la
- dirección de correo electrónico exacta es válida en si misma.
- </para>
- <para>
- La comprobación MX no está activada por defecto y en este momento es
- soportada sólo por plataformas UNIX.
- Para habilitar el control MX puede pasar un segundo parámetro al
- constructor
- <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>
- Alternativamente, para activar o desactivar la validación MX puede pasar
- <constant>TRUE</constant>
- o
- <constant>FALSE</constant>
- a
- <methodname>$validator->setValidateMx()</methodname>
- .
- </para>
- <para>
- Al habilitarlo, se usarán las funciones de red para comprobar
- la presencia de un registro MX en el nombre de host de la dirección
- de correo electrónico que desea validar.
- Tenga en cuenta esto probablemente hará más lento su script.
- </para>
- <para>
- Sometimes validation for MX records returns false, 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>Validating International Domains Names</title>
- <para>
- <classname>Zend_Validate_EmailAddress</classname>
- también comparará caracteres
- internationales que existen en algunos dominios.
- Esto se conoce como soporte de International Domain Name (IDN).
- Está activado por defecto, aunque puede deshabilitarlo internamente
- cambiando el ajuste a través del objeto
- <classname>Zend_Validate_Hostname</classname>
- que existe en
- <classname>Zend_Validate_EmailAddress</classname>
- .
- </para>
- <programlisting language="php"><![CDATA[
- $validator->getHostnameValidator()->setValidateIdn(false);
- ]]></programlisting>
- <para>
- Sobre el uso de
- <methodname>setValidateIdn()</methodname>
- encontrará más información
- en la documentación de
- <classname>Zend_Validate_Hostname</classname>
- .
- </para>
- <para>
- Tenga en cuenta que los IDNs se validarán solo si
- usted permite que nombres de host DNS sean validados.
- </para>
- </sect3>
- <sect3 id="zend.validate.set.email_address.validatetld">
- <title>Validación de dominios de nivel superior</title>
- <para>
- Por defecto, un nombre de host se cotejará con una lista conocida de TLDs.
- Está activado por defecto, aunque puede deshabilitarlo cambiando el
- ajuste a través del objeto interno
- <classname>Zend_Validate_Hostname</classname>
- que existe en
- <classname>Zend_Validate_EmailAddress</classname>
- .
- </para>
- <programlisting language="php"><![CDATA[
- $validator->getHostnameValidator()->setValidateTld(false);
- ]]></programlisting>
- <para>
- Encontrará más información sobre el uso de
- <methodname>setValidateTld()</methodname>
- en la documentación de
- <classname>Zend_Validate_Hostname</classname>
- .
- </para>
- <para>
- Tenga en cuenta que los TLDs se validarán solo si
- usted permite que nombres de host DNS sean validados.
- </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>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|