Foros del Web » Programando para Internet » PHP »

Como comprobar una direccion de correo con php?

Estas en el tema de Como comprobar una direccion de correo con php? en el foro de PHP en Foros del Web. Me refiero a comprobar si existe dicho correo, fue bloqueado o simplemente ya no existe o no recepciona mensajes, me parece q la funcion checkdnsrr ...
  #1 (permalink)  
Antiguo 04/07/2008, 11:03
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 2
Como comprobar una direccion de correo con php?

Me refiero a comprobar si existe dicho correo, fue bloqueado o simplemente ya no existe o no recepciona mensajes, me parece q la funcion checkdnsrr lo soluciona, pero como la aplico
  #2 (permalink)  
Antiguo 04/07/2008, 11:05
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Como comprobar una direccion de correo con php?

en donde deseas comprobar eso?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #3 (permalink)  
Antiguo 04/07/2008, 11:22
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como comprobar una direccion de correo con php?

por ejemplo escribo un correo [email protected] en un campo texto, llamo al escrpt php y este comprueba el estado de dicho correo.
algo como esto
  #4 (permalink)  
Antiguo 04/07/2008, 11:28
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Como comprobar una direccion de correo con php?

mmmm no estoy seguro pero ve estas dos funciones
Código PHP:
<?php function check_email($email) {
        if(
preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/'$email$matches))
        {
            if(
function_exists('checkdnsrr'))
            {
                if(
checkdnsrr($matches[1] . '.''MX')) return true;
                if(
checkdnsrr($matches[1] . '.''A')) return true;
            }else{
                if(!empty(
$hostName))
                {
                    if( 
$recType == '' $recType "MX";
                    
exec("nslookup -type=$recType $hostName"$result);
                    foreach (
$result as $line)
                    {
                        if(
eregi("^$hostName",$line))
                        {
                            return 
true;
                        }
                    }
                    return 
false;
                }
                return 
false;
            }
        }
        return 
false;
    }
?>
Código PHP:
<?php

if(!function_exists('checkdnsrr'))
{
    function 
checkdnsrr($hostName$recType ''
    { 
     if(!empty(
$hostName)) { 
       if( 
$recType == '' $recType "MX"
       
exec("nslookup -type=$recType $hostName"$result); 
        
       foreach (
$result as $line) { 
         if(
eregi("^$hostName",$line)) { 
           return 
true
         } 
       } 
    return 
false
     } 
     return 
false;
    }

?>
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #5 (permalink)  
Antiguo 04/07/2008, 12:00
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como comprobar una direccion de correo con php?

El codigo pare que esta en chino, pero tratare de decifrar que hace, si alguien se anima bienvenido.

saludos
  #6 (permalink)  
Antiguo 04/07/2008, 12:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como comprobar una direccion de correo con php?

Hola KingColt,

Lo que hace ese código es lo que pides, verificar si la dirección de email es valida y existe.

Saludos.
  #7 (permalink)  
Antiguo 04/07/2008, 14:44
 
Fecha de Ingreso: junio-2008
Mensajes: 343
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Como comprobar una direccion de correo con php?

Perdone mi pregunta pero ahi les va como hago correr la funcion?
lo hize de la siguiente manera

Código PHP:
<?php function check_email($email) { 
        if(
preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/'$email$matches)) 
        { 
            if(
function_exists('checkdnsrr')) 
            { 
                if(
checkdnsrr($matches[1] . '.''MX')) return true
                if(
checkdnsrr($matches[1] . '.''A')) return true
            }else{ 
                if(!empty(
$hostName)) 
                { 
                    if( 
$recType == '' $recType "MX"
                    
exec("nslookup -type=$recType $hostName"$result); 
                    foreach (
$result as $line
                    { 
                        if(
eregi("^$hostName",$line)) 
                        { 
                            return 
true
                        } 
                    } 
                    return 
false
                } 
                return 
false
            } 
        } 
        return 
false
    } 

//como aplico el true o false
$email "[email protected]";
check_email($email);

?>
logico que devuelve una pantalla en blanco, como hago para mostar un mensaje como echo"ok"; y echo"error"; usando la funcion?
  #8 (permalink)  
Antiguo 04/07/2008, 14:54
 
Fecha de Ingreso: mayo-2005
Ubicación: Muy lejos de aquí
Mensajes: 367
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Como comprobar una direccion de correo con php?

Con expresiones regulares. Busca en google que seguro está.
__________________
Saludos!
  #9 (permalink)  
Antiguo 04/07/2008, 18:59
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como comprobar una direccion de correo con php?

Cita:
Iniciado por hunter18 Ver Mensaje
Perdone mi pregunta pero ahi les va como hago
logico que devuelve una pantalla en blanco, como hago para mostar un mensaje como echo"ok"; y echo"error"; usando la funcion?
Cita:
Con expresiones regulares. Busca en google que seguro está.
Con expresiones regulares, vaya a algunos les parecera sencillo, pero es la 1era vez q escucho este termino, tendre q averiguar para aplicarlo a funcion y poder utilizarla
  #10 (permalink)  
Antiguo 04/07/2008, 20:56
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Como comprobar una direccion de correo con php?

KingColt:
En el manual de php
tienes todo lo que te han expuesto ->
http://www.php.net/manual/es/function.checkdnsrr.php
Saludos
Franco.
P.S. Lo mas sencillo es:
utilizar exec de php.
Si tienes windows has una prueba entrando a DOS
y haces asi:
nslookup -type="MX" tudominio.com
y te dara muchos resultados que deberas
seleccionar lo que te sirvan.
  #11 (permalink)  
Antiguo 05/07/2008, 06:45
 
Fecha de Ingreso: septiembre-2006
Mensajes: 81
Antigüedad: 17 años, 7 meses
Puntos: 5
Respuesta: Como comprobar una direccion de correo con php?

lo que has dicho antes:
asi:

Código PHP:
...
//como aplico el true o false
$email "[email protected]";
if(
check_email($email)){
echo 
"ok"
}else{
echo 
"error";

saludos
elliot
  #12 (permalink)  
Antiguo 05/07/2008, 22:24
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como comprobar una direccion de correo con php?

La funcion solo comprueba el dominio, por ejemplo [email protected], es su totalidad no exite aunque @correo.com si existe, segun las pruebas que he hecho por lo que devuelve true.
En cambio si utilizo [email protected] devuelve false


Lo que necesito es comprobar si el correo existe en su totalidad igual a como lo hace esta web cheken la aplicación.

Bueno si no es posible lograrlo con php o quizas sea mas complicado mencionenlo

Última edición por KingColt; 05/07/2008 a las 22:54
  #13 (permalink)  
Antiguo 06/07/2008, 10:49
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Como comprobar una direccion de correo con php?

KingColt:
Trate unos correos locales y fallo en mi servidor.
Trate otro correo local en mi servidor y tuvo exito.
Despues lei lo que dice debajo del cuadro:
"In some webmails providers, the service cannot be precise."
Esto indica claramente que el sistema falla en ciertas ocasiones.
En mi servidor de correo ingreso un dominio que se llama
"[email protected]" logicamente no tenia los SPF records y mi correo lo rechazo
y tildo de "grey" y lo rechazo como Spam.
Sin embargo un correo tuvo exito y deposito un correo con las siguientes caracteristicas:
quien envia : [email protected]
Deposito un anuncio publicitario y ya.

Aqui hay dos cosas muy diferentes:
1.- Si el dominio tiene MX records entonces hay un servidor
de correo instalado.
2.- Si el servidor maneja un webmail ya seria una segunda
variable a encontrar.

Conclusion:
Atando cabos y tratando de interpretar lo realizado por el sitio que tu recomendastes, parece que ellos lo que hacen es:
a.- tu ingresas el correo que quieres validar
b.- ellos envian un correo a esa direccion, como el que yo recibi.
c.- si el correo es rechazado, entonces lo tildan de No existente
d.- si el correo es aceptado lo tildan de valido o existente.
Ahora el rechazado, aun cuando haya sido rechazado, el correo existe y por lo tanto el sistema es deficiente.
Lo que yo creo que hacen es:
utilizar la funcion mail asi ->
if(mail([email protected], asunto, mensaje publicitario, ...)) {
echo "correo validado o existente!";
} else {
echo "Correo NO existe!!!";
}
Final: el correo pudo haber fracazado el envio por razones de seguridad del servidor de corrreo que recibe, mas sin embargo esto NO quiere decir que el correo NO exista.
Saludos
Y espero te ayude
Franco
P.S. Muy interesante tu post y sin duda alguna tambien he aprendido algo nuevo; gracias a la prueba que hice con mi servidor de correo. Gracias.
P.S.2. Aqui hay tres cosas interesantes:
1.- verificar que el dominio existe ya que de NO existir, logicamente no existe el correo.
2.- si el dominio existe hay que verificar si tiene records MX, si no los tiene no puede existir el correo.
3.- si el dominio existe y el dominio tiene sus MX records hay que verificar si hay un servidor de correo instalado; eso solo se puede saber enviando algun correo o verificando, enviando un telnet al dominio y al puerto 25 que debera respnonder con la version del servidor de correo instalado.
4.- si todo lo anterior es valido falta checar si el usuario existe, en ese caso solo se puede comprobar enviandole un correo y que este tenga exito; sin embargo el servidor que envia debera tener todo en orden, me refiero a adecuada configuracion del correo, sus SPF records y su reverso de IP, de esa manera no habra posibilidad de equivocarse, como de hecho se ha equivocado el sitio al cual tu has hecho referencia.
5.- finalmente algunos servidores de correo tienen usuarios que solo aceptan correo de determinadas direcciones de correo, por lo que el rechazo NO debe ser interpretado como un correo Inexistente sino mas bien como NO activo o algo parecido.

Última edición por franco190453; 06/07/2008 a las 11:23
  #14 (permalink)  
Antiguo 06/07/2008, 11:49
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como comprobar una direccion de correo con php?

Cita:
Iniciado por franco190453 Ver Mensaje
KingColt:

Conclusion:
Atando cabos y tratando de interpretar lo realizado por el sitio que tu recomendastes, parece que ellos lo que hacen es:
a.- tu ingresas el correo que quieres validar
b.- ellos envian un correo a esa direccion, como el que yo recibi.
c.- si el correo es rechazado, entonces lo tildan de No existente
d.- si el correo es aceptado lo tildan de valido o existente.
Ahora el rechazado, aun cuando haya sido rechazado, el correo existe y por lo tanto el sistema es deficiente.
Lo que yo creo que hacen es:
utilizar la funcion mail asi ->
if(mail([email protected], asunto, mensaje publicitario, ...)) {
echo "correo validado o existente!";
} else {
echo "Correo NO existe!!!";
}
!!umh no es q publicite el sitio por que me parece obsoleto ya que nadie se pondria a verificar correo por correo para limpiar su bd de correos que ya no existen o que fueron deshabilitos o que se yo, pero en la pagina q mencione hay 2barras una para verificar el correo de color naranja, que al usarla no envia ninguna publicidad ni nada al correo q se esta verificando.

La otra barra de color amarillo es para recomendar el sitio, es decir envia un mensaje al correo q pones en la barra.

Me parece que la funcion mail no revisa si el mensaje llego o no, simplemente lo envia exista o no la direccion, es decir solo utilizaria el echo "Correo NO existe!!!"; si hubo un problema en la conexion de red y ceso el el envio, bueno no estoy seguro!!!!!!!!!!!

Última edición por KingColt; 06/07/2008 a las 11:54
  #15 (permalink)  
Antiguo 06/07/2008, 15:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como comprobar una direccion de correo con php?

Hola KingColt,

Eso es porque la función mail, lo único que hace es enviar el correo al servidor SMTP, el servidor SMTP es el encargado de comunicarse con el servidor remoto, y ahí ya no entra en nada PHP, es parte del protocolo de comunicación de los correos electrónicos.

Ve a mail() como la persona que va a dejar la carta al buzón de correos, ya es responsabilidad de la compañía de correos el enviar la carta y de como enviarla.

Saludos.
  #16 (permalink)  
Antiguo 06/07/2008, 20:12
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Como comprobar una direccion de correo con php?

KingColt:
Creo que lo que nos dice GatorV es correcto y probablemente ellos esten utilizando la funcion imap_mail(), que segun un post que encontre en el manual dice lo siguiente:
"for some mail servers, you have to open up an imap stream, log in, and then you can send mail through imap_mail "
Cuando existe una conecxion directa con el servidor de correo de ellos previo a la utilizacion de [email protected] y del envio de un correo de prueba, entonces es probable que el servidor responda directamente del fracazo o exito del envio via el script. Asimismo, es probable que tambien el envio implica la NO existencia de un mensaje y por ende la direccion de correo existe pero la conexion se cierra por no haber nada que enviar.
En fin, reitero lo interesante del post y hace falta hacer muchas pruebas para poder
identificar que es lo que en realidad hace esta gente.
Saludos
Y espero ayude.
Franco
P.S. Interesante seria buscar las diferencia entre enviar un correo via la funcion mail(), versus la funcion imap_mail(); de php.
P.S.2. Hay una tercera forma de enviar correo y es utilizando sockets y sin duda alguna se obtiene respuesta en el script referente aceptacion o rechazo de un correo. Parece ser que esta ultima alternativa es la utilizada por ese sitio.

Última edición por franco190453; 06/07/2008 a las 20:59
  #17 (permalink)  
Antiguo 06/07/2008, 21:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como comprobar una direccion de correo con php?

Pues a investigar, pero si alguien tiene experiencia sobre esto nos lo aclare, lo que intento hacer es comprobar un listado de correos de un txt o un consulta a la bd para eliminar correos dados de baja o inexistentes.

saluos
  #18 (permalink)  
Antiguo 06/07/2008, 22:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como comprobar una direccion de correo con php?

La forma más sencilla y la más optima es que envies un correo al destino pidiendo confirmar el correo, de cualquier otra forma tendrás fluctuaciones.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:30.