Blog de informática: programación, internet, php, wordpress, zend framework, mysql, windows, mootools, linux,…
In: zend framework
11 nov 2009
Antes 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.
Entradas relacionadas:
Este blog informático pretende ser un blog de notas o portafolio de información variada: trozos de código, descubrimientos, notas sueltas, ... Para tenerla a mano, y ser compartida.