Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/05/2010, 02:14
Tarzan
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Saber si una dirección es incorrecta con el phpmailer

Buenas,

He estado investigando mucho sobre este tema y he llegado a algunas conclusiones. Aunque también a un mar de dudas.

El caso es que, realmente, según he leído por ahí, tampoco hay que comprobar al 100% que la dirección introducida existe. Hay otras formas más sencillas de dirigir al usuario y validar el mail introducido.

Me explico. Voy a utilizar dos funciones muy cortitas. Una para validar la “sintaxis” del mail y otra para validar “el dominio”. Si el dominio existe y la sintaxis es correcta pues palante!!
Si alguna de las dos falla, pues mensaje al canto y vuelve a introducir el e-mail.

Es lo que prefiero hacer. Si la sintaxis es correcta, el dominio existe y luego resulta que la dirección no tiene usuario o no se ha creado nunca. Pues nada. Al cabo de varios días, si veo que hay una cuenta sin activar, me la cepillo y andando.

Entonces: Ahora necesito ése par de funciones y en Internet he visto un chorro. ¿Cuál elijo?. A ver si alguien puede aconsejarme a elegir la más sabia y correcta porque ayer copié yo una para validar el dominio y, cuando introducía hotmxxxailx.kom me daba OK y eso está mal.

He encontrado esta función, donde dicen que sirve para validar el dominio pero no he podido probarla y no entiendo muy bien cómo lo hace:

function getAddrByHost($host, $timeout = 3) {
$query = "nslookup -timeout=$timeout -retry=1 $host";
if(preg_match("/ Address: (.*) /", $query, $matches)){
return trim($matches[1]);
}else{
return false;
}
return $host;
}


Se supone que realiza una ejecución del comando nslookup, (en la consola). Evidentemente, eso debería devolver si existe o no pero aquí yo no veo donde ejecuta ese comando. ¿Cómo lo hace?

Esta es otra función para validar el dominio por el DNS.

function validar_email($email){
$exp = "^[a-z'0-9]+([._-][a-z'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
if(eregi($exp,$email)){
if(checkdnsrr(array_pop(explode("@",$email)),"MX") ){
return true;
}else{
return false;
}
}else{
return false;
}
}


¿Cómo lo veis?, ¿mejor checkdnsrr o nslookup?
También hay otra opción pero no he conseguido que funcione

$validar = @fsockopen($dominio, 25, $errno, $errstr, 30);

En teoría, con esta función se conecta por el puerto 25 y valida el dominio pero ya te digo yo que con hotmXXXXilX.kom devuelve true.

Para validar la sintaxis: (pongo las dos que conseguí).

function validar_correo($correo) {
return preg_match('/^.+@(.+\..+)$/', $correo);
}

function validar_correo($correo) {
return preg_match("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+.)*[a-zA-Z0-9-]{2,200}.[a-zA-Z]{2,6}$", $correo);
}


Hay quien opina que es mejor la primera porque la segunda te filtra algunos correos permitidos, aunque raros, pero yo prefiero que invalide todo lo que no sea una dirección de mail.
¿Cuál os convence más? ¿Qué debo modificar para que vaya?

Un saludo.

Última edición por Tarzan; 25/05/2010 a las 04:22