Comprobar si un email tiene registros MX, con Zend_Validate

In: zend framework

11 nov 2009

spam email reject1 150x150 Comprobar si un email tiene registros MX, con Zend ValidateAntes 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 . 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.

Entradas relacionadas:

  1. Recibir un email cuando Google visita tu blog
  2. 7 trozos de código en PHP
  3. Diseño y maquetación de emails que soporten todos los clientes de correo
  4. Guía para crear documentación con PHPDocumentor
  5. Sistema que utiliza las cuentas de Hotmail para enviar SPAM

Formulario de Comentario

Página 1 de 11