PHP: ¿Cómo saber si un e-mail es correcto?

De Foros del Web

Muchas veces nos preguntamos si el mail que nos ponen en un formulario es válido, osea que existe, pues bien con esta función podemos comprobar si este mail existe, y si este esta escrito correctamente


Código PHP:

<?
 
function ValidarMail($email) { 
       global $HTTP_HOST; 
       $resultado = array(); 
       if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,6}$",$email)) { 
         $resultadoado[0]=false; 
         $resultado['code']="702"; 
          return $resultado; 
       } 
       list ( $Username, $dominio ) = split ("@",$email); 
         if (getmxrr($dominio, $MXHost))  $conecta_dominio = $MXHost[0]; 
                  else  $conecta_dominio = $dominio; 
 
        $conectar = fsockopen ( $conecta_dominio, 25 ); 
 
      if ($conectar) { 
 
        if (ereg("^220", $ver = fgets($conectar, 1024))) { 
 
           fputs ($conectar, "HELO $HTTP_HOST\r\n"); 
           $ver = fgets ( $conectar, 1024 ); 
           fputs ($conectar, "MAIL FROM: <{$email}>\r\n"); 
           $From = fgets ( $conectar, 1024 ); 
           fputs ($conectar, "RCPT TO: <{$email}>\r\n"); 
           $To = fgets ($conectar, 1024); 
           fputs ($conectar, "QUIT\r\n"); 
           fclose($conectar); 
           if (!ereg ("^250", $From) || !ereg ( "^250", $To )) { 
               $resultado[0]=false; 
               $resultado['code']="700"; 
               return $resultado; 
            } 
        }    
           else { 
              $resultado[0] = false; 
              $resultado['code'] = "Død"; 
              return $resultado; 
            } 
      }  
        else { 
            $resultado[0]=false; 
            $resultado['code']="701"; 
            return $resultado; 
      } 
 
       $resultado[0]=true; 
       $resultado['code']="200"; 
       return $resultado; 
} //fin funcion
 
/// la funcion superior se puede usar en unix pero en windows XP,200,NT 
//hay que utilizar la funcion que sigue pues windows no soporta la funcion getmxrr, (en win 9X no funcionaria )
 
 
/// esta funcion es aportada por irondan_2358
 
function getmxrr($hostname, &$mxhosts)
{
   $mxhosts = array();
   exec('nslookup -type=mx '.$hostname, $result_arr);
   foreach($result_arr as $line) 
   {
     if (preg_match("/.*mail exchanger = (.*)/", $line, $matches)) 
         $mxhosts[] = $matches[1];
   }
   return( count($mxhosts) > 0 );
 
// la un
} 

--Jordi1 16 Mar 2004

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales