Enviada el 28/10/2009 por Michael Gomez Cruz
Categorias: php, Programacion

He buscado y buscado desde que comence a programar en PHP, la mejor manera de comprobar si un email es válido o no, y si esta bien escrito y además que sea de un dominio válido con sus DNS y registros MX correctos. En fin, sonaba imposible, pero navegando y googleando, encontré la solución:

function validateMail($email){
		   $isValid = true;
		   $atIndex = strrpos($email, '@');
 
		   if(is_bool($atIndex) && !$atIndex){
		      $isValid = false;
		   }else{
		      $domain = substr($email, $atIndex+1);
		      $local = substr($email, 0, $atIndex);
		      $localLen = strlen($local);
		      $domainLen = strlen($domain);
 
		      if ($localLen < 1 || $localLen > 64){
		         $isValid = false;
		      }else if ($domainLen < 1 || $domainLen > 255){
		         $isValid = false;
		      }else if ($local[0] == '.' || $local[$localLen-1] == '.'){
		         $isValid = false;
		      }else if (preg_match('/\\.\\./', $local)){
		         $isValid = false;
		      }else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)){
		         $isValid = false;
		      }else if (preg_match('/\\.\\./', $domain)){
		         $isValid = false;
		      }else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) {
		         if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))){
		            $isValid = false;
		         }
		      }
		      if ($isValid && !(checkdnsrr($domain,'MX') || checkdnsrr($domain,'A'))){
		         $isValid = false;
		      }
		   }
 
		   return $isValid;						
		}
// Para implementarlo
if(validateMail('algun@email.com')){
    echo 'email valido';
}else{
    echo 'email no valido';
}

Aplica cosas básicas como comprobar la existencia del @, además de RFC para el largo máximo permitido por el estándar y expresiones regulares para validar los simbolos. Y por si fuese poco, chequea que el dominio exista (A) y que sus MX sean válidos.


Articulos Relacionados



Comentarios

hernan el 2 noviembre, 2009 a las 15:41 pm #

espectacular, busque por internet y solo encontraba validadores malos..


ca el 5 noviembre, 2009 a las 20:21 pm #

es que don ubu es maestro del codigo XD


Squadron el 18 febrero, 2010 a las 22:09 pm #

Cuando ejecuto el codigo me sale este error:

Fatal error: Call to undefined function checkdnsrr() in C:\ServerWeb\valmail\valmail.php on line 31

Alguna sugerencia ???


admin el 19 febrero, 2010 a las 11:56 am #

Lo que pasa es que checkdnsrr() es una funcion para linux de forma nativa, por ende, no funcionara en ambientes windows.

Lo que podrias hacer seria comentar esa y las 2 lineas siguientes. (Todo el IF)


Envia un Comentario
Nombre:
E-Mail:
Sitio Web:
Comentario: