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: 21 años, 6 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_dominio25 ); 

      if (
$conectar) { 

        if (
ereg("^220"$ver fgets($conectar1024))) { 

           
fputs ($conectar"HELO $HTTP_HOST\r\n"); 
           
$ver fgets $conectar1024 ); 
           
fputs ($conectar"MAIL FROM: <{$email}>\r\n"); 
           
$From fgets $conectar1024 ); 
           
fputs ($conectar"RCPT TO: <{$email}>\r\n"); 
           
$To fgets ($conectar1024); 
           
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) > );

// la un
}
Espero que os sea de utilidad

Saludos