Clase para validación de direcciones de correo electrónico.

Puede hacer una validación sintáctica y comprobando listas negras mediante la función ValidateAddress y generar en caso de error sugerencias mediante la función suggestions. También puede comprobar si un email es válido preguntando a su servidor MX mediante la función ValidateEmailBox. Para esto último, conecta al servidor MX del dominio e intenta hacer un envío hasta justo antes del comando "DATA", momento en el que envía un "QUIT" para parar el proceso. Si en el "EHLO", "MAIL FROM" o "RCPT TO" el servidor de destino genera un error 5xx, la función ValidateEmailBox devolverá false y si es correcto true.

En caso de que sea detectado como incorrecto, el envío de un email desde el servidor en el que se hizo la comprobación será imposible, por tanto la detección es una falsación ya que tenemos la total certeza de que el envío fallará.

Si la validación dice que el email es correcto no hay garantías de que se puede enviar ya que el servidor de destino aun podría rechazarlo, por ejemplo si usan filtros de contenidos y detectan nuestro envío como spam.

En caso de detectar que el email es incorrecto, aunque sabemos que en este momento no se puede enviar un mensaje, podría ser que el fallo fuera temporal, por ejemplo, en el caso de cuentas de correo con la cuota superada (over quota). Si se quiere analizar la respuesta del servidor se podría capturar la salida del depurador y buscar cadenas de texto para afinar más sobre la causa, aunque esto difícilmente podrá ser completamente preciso, ya que los mensajes de cada servidor de correo pueden ser distintos.

Ejemplo de uso:

$_init_class['class_name'] = 'eMailValidator'; 
$wv->initClass($_init_class,1); 
$wv->eMailValidator->localuser = "web"; 
$wv->eMailValidator->localhost = "example.com"; 
$wv->eMailValidator->debug = 0; //Poner a 1 para depuración de errores 
$wv->eMailValidator->html_debug = 1; 
$wv->eMailValidator->exclude_address=""; 
$wv->eMailValidator->invalid_email_users_file = 
    "$wv->_dirWVLib/email_validation/invalid_email_users.csv"; 
$wv->eMailValidator->invalid_email_domains_file = 
    "$wv->_dirWVLib/email_validation/invalid_email_domains.csv"; 
$wv->eMailValidator->invalid_email_servers_file = 
    "$wv->_dirWVLib/email_validation/invalid_email_servers.csv"; 
$wv->eMailValidator->email_domains_white_list_file = 
    "$wv->_dirWVLib/email_validation/email_domains_whitelist.csv";

//Validación del email por sintaxis
$wv->eMailValidator->ValidateAddress($email, $email_err);
if (!$email_err) {

    //Si es un "typo" y está en la lista, se genera una sugerencia
    if(count($wv->eMailValidator->suggestions)){
        $sugerencia = $wv->eMailValidator->suggestions[0];
    }

} else {

    //Validación del email en su servidor MX
    if (!$wv->eMailValidator->ValidateEmailBox($email)){
        //El email no es válido
    }
}