Dirección de Email Zend_Validate_EmailAddress 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. Utilización básica Un ejemplo básico de uso se ve a continuación: 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"; } } ]]> Esto coincide con el correo electrónico $email y si fracasa, alimenta $validator->getMessages() con mensajes de error útiles. >Partes locales complejas Zend_Validate_EmailAddress supports several options which can either be set at initiation, by giving an array with the related options, or afterwards, by using setOptions() . The following options are supported: allow : 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 Hostname and possible ALLOW * constants. This option defaults to ALLOW_DNS . hostname : Sets the hostname validator with which the domain part of the email address will be validated. mx : Defines if the MX records from the server should be detected. If this option is defined to TRUE then the MX records are used to verify if the server accepts emails. This option defaults to FALSE . deep : Defines if the servers MX records should be verified by a deep check. When this option is set to TRUE then additionally to MX records also the A, A6 and AAAA records are used to verify if the server accepts emails. This option defaults to FALSE . domain : Defines if the domain part should be checked. When this option is set to FALSE , 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 TRUE . setOptions(array('domain' => false)); ]]> Complex local parts Zend_Validate_EmailAddress se comparará con cualquier dirección de correo válida de acuardo a RFC2822. Por ejemplo, correos electrónicos válidos incluyen bob@domain.com , bob+jones@domain.us , "bob@jones"@domain.com y "bob jones"@domain.com 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). Validating only the local part If you need Zend_Validate_EmailAddress to check only the local part of an email address, and want to disable validation of the hostname, you can set the domain option to FALSE . This forces Zend_Validate_EmailAddress not to validate the hostname part of the email address. setOptions(array('domain' => FALSE)); ]]> Validating different types of hostnames La parte nombre de host de una dirección de correo es validado contra Zend_Validate_Hostname . Por defecto sólo son aceptados nombres de host DNS de la forma domain.com , aunque si lo desea también puede aceptar direcciones IP y nombres de host locales. Para ello necesita instanciar a Zend_Validate_EmailAddress pasando un parámetro para indicar el tipo de nombres de host que quiere aceptar. Más detalles están incluidos en Zend_Validate_EmailAddress , aunque abajo hay un ejemplo de cómo aceptar tanto nombres de host DNS y locales: isValid($email)) { // email parece ser válido } else { // email es inválido; muestre las razones foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ]]> Verificar si el nombre de host realmente acepta email 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. 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 Zend_Validate_EmailAddress . Zend_Validate_Hostname::ALLOW_DNS, 'mx' => true ) ); ]]> MX Check under Windows Within Windows environments MX checking is only available when PHP 5.3 or above is used. Below PHP 5.3 MX checking will not be used even if it's activated within the options. Alternativamente, para activar o desactivar la validación MX puede pasar TRUE o FALSE a $validator->setValidateMx() . 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. 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 AAAA records. To allow Zend_Validate_EmailAddress to check also for these other records, you need to set deep MX validation. This can be done at initiation by setting the deep option or by using setOptions() . Zend_Validate_Hostname::ALLOW_DNS, 'mx' => true, 'deep' => true ) ); ]]> Performance warning 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. Disallowed IP addresses You should note that MX validation is only accepted for external servers. When deep MX validation is enabled, then local IP addresses like 192.168.* or 169.254.* are not accepted. Validating International Domains Names Zend_Validate_EmailAddress 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 Zend_Validate_Hostname que existe en Zend_Validate_EmailAddress . getHostnameValidator()->setValidateIdn(false); ]]> Sobre el uso de setValidateIdn() encontrará más información en la documentación de Zend_Validate_Hostname . Tenga en cuenta que los IDNs se validarán solo si usted permite que nombres de host DNS sean validados. Validación de dominios de nivel superior 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 Zend_Validate_Hostname que existe en Zend_Validate_EmailAddress . getHostnameValidator()->setValidateTld(false); ]]> Encontrará más información sobre el uso de setValidateTld() en la documentación de Zend_Validate_Hostname . Tenga en cuenta que los TLDs se validarán solo si usted permite que nombres de host DNS sean validados. Setting messages Zend_Validate_EmailAddress makes also use of Zend_Validate_Hostname to check the hostname part of a given email address. As with Zend Framework 1.10 you can simply set messages for Zend_Validate_Hostname from within Zend_Validate_EmailAddress . setMessages( array( Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave' ) ); ]]> Before Zend Framework 1.10 you had to attach the messages to your own Zend_Validate_Hostname , and then set this validator within Zend_Validate_EmailAddress to get your own messages returned.