Validar un email con PHP

Bueno hoy realmente estoy productivo, tenía bastantes cosas pendientes y aprovecho para escribirlas. Hace unos días leí el que es a mi entender el mejor artículo de validación de correos electrónicos con PHP, básicamente el mejor porque piensa como yo el autor, y me ha dado por profundizar en este artículo con algunas implementaciones que yo mismo he realizado.

Es totalmente cierto que validar un correo electrónico es algo complejo, de echo me encantaría tener el código que utilizan en email valido para tener tanta efectividad en sus comprobaciones, conmigo realmente no ha fallado, pero como no lo tengo os planteo las posibles soluciones.

Lo primero es validar con una expresión regular el formato del email, la expresión la pueden tener en mi artículo Extraer emails de un texto. Luego vienen los problemas.

Dependiendo de lo que queramos hacer es más útil o no una validación más estricta, yo voy a plantear el caso de suscribirse a un boletín lo cual nuestro objetivo es recibir muchos email y sabiendo que las valoraciones estrictas a veces fallan, pues sólo me dedico a comprobar con la expresión anterior. (Para ver validaciones de dominio ir al artículo del enlace). Luego si es un formulario sencillo con un input para email vienen los problemas de SPAM, entonces CAPTCHA o no CAPTCHA e hay el dilema, para mí muy sencillo, NO. Por un grupo de spammers no voy a obligara los usuarios que les ha dado el arrebato a suscribirse a mi boletín de tener que descifrar un campo CAPTCHA, definitivamente no, entonces ¿Que usar? Sencillo, ver mi otro artículo Validar formularios sin CAPTCHA. Pero esto último no evita a los graciosos que meten direcciones a mano como ereerwr@dfsfsf.com o no.conectado@hotmail.com ambas erróneas una porque el dominio no existe y la otra porque el usuario no existe.

Para evitar esto se podría enviar un mail al usuario solicitando la activación, pero ¡para un boletín vas a pedir activación! Pues no, porque el arrebato que le dio al escribir el correo puede que se le pase cuando recibe el mail de activación y podemos tener direcciones válidas de posibles clientes sin activar porque al usuario se le pasó, lo borró o le llegó al SPAM. La solución, simple mando los boletines y automáticamente hago un script para validar el buzón de correo y revisar los email recibidos.

Debemos borrar un email cuando en el asunto de este ponga alguna de estas palabras unsuscribe, unknown, Confirm, Cambio, is not valid, Your email requires verification, No se ha podido entregar tu mensaje, He cambiado de e-mail, delivery failed, borrar, Undelivered; también si en el cuerpo del mensaje aparecen las siguientes cadenas: Recipient address rejected, was deleted without being read, This is a permanent error, mailbox unavailable, permanent fatal errors, User unknown.

Si cumple los campos anteriores podemos borrarlos con confianza pues son falsos (solución totalmente empírica basada en una lista de 50 mil correos). Con esta solución eliminamos los verdaderos correos inválidos una vez enviando el boletín para que no se repita para la próxima ocasión y es totalmente transparente al usuario.

Nota: es un método que no es 100 % exacto, todas las que borra son erróneas eso sí, pero entre las que se quedan en el buzón pueden quedar algunas inválidas.

Comentarios