Tema: FAQ's de PHP
Ver Mensaje Individual
  #105 (permalink)  
Antiguo 16/03/2004, 03:52
Jordi1
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 23 años, 5 meses
Puntos: 1
Muchas veces nos preguntamos si el mail que nos ponen en un formualrio es valido, osea que existe, pues bien con esta funcion 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
}
Espero que os sea de utilidad

Saludos