Comprobar si un email tiene registros MX, con Zend_Validate

Email reject spamAntes consumir tiempo o recursos enviando emails, se debe comprobar la veracidad de las direcciones de correo de destino de los emails. La única manera que conozco para comprobar si una dirección de correo existe y es operativa, es enviando un email. Si esa dirección no existe o no se puede entragar el email, recibiremos un email que indica que no se ha podido realizar la entrega. Pero esta operación provocará que las direcciones de correo correctas y operativas, reciban el email que se esta enviando de prueba.

Para no afectar a los usuarios, existen dos maneras de filtrar las direcciones de correo par ir eliminando esas que no son correctas. La primera manera es pasando las direcciones de correo por alguna función que encontremos con Google, que utilizando las Expresiones Regulares te indica si la dirección de correo tiene el formato o sintaxis correcta. Todo y eso, si hacemos la comprobación con ‘aaaa@bbbb.cc‘, la función nos dirá que es correcta y tiene todo el aspecto a que es dirección no existe.

Una vez hecho el primer filtro, podemos utilizar el segundo método que consiste en comprobar que el dominio de las direcciones de correo (la cadena de texto posterior a la arroba) existe, y además contiene los registros MX que indican la existencia de un servidor de correo para ese dominio.

Para realizar estos dos filtros, existe una manera muy práctica y cómoda con Zend Framework. Existe una API de este framework que se llama Zend_Validate, y sirve para realizar validaciones, de todo tipo. Tiene dos clases que se llaman Zend_Validate_EmailAddress y Zend_Validate_Hostname, que son las que usaremos en el siguiente código:

// Creación del validador de emails
$validator = new Zend_Validate_EmailAddress();
// Añadir el validador del dominio
$validator->setHostnameValidator(new Zend_Validate_Hostname());
// Si soporta la comprobación de MX
if ($validator->validateMxSupported()) {
	$validator->setValidateMx(true);
}
else {
	echo 'No tiene MX Soportado';
}
 
$email = 'aaaa@bbbb.cc';
 
if ($validator->isValid($email)) {
	echo "Dirección correcta";
} else {
	// En caso erroneo, muestra los errores detectados
	foreach ($validator->getMessages() as $message) {
		echo "$message\n";
	}
}

Como se ve, puede ser que el servidor donde se ejecuta el script PHP no tenga el soporte la comprobación MX. Habría que comprobar la configuración del servidor.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>