Foros del Web » Programando para Internet » PHP »

comprobar si es verdadero el mail

Estas en el tema de comprobar si es verdadero el mail en el foro de PHP en Foros del Web. hora foro!!! he estado mirando en http://www.zend.com/zend/spotlight/ev12apr.php el código para comprobar si el mail exites... esta es la función: Código PHP: function  comprobar_mail ( $Email ...
  #1 (permalink)  
Antiguo 13/04/2005, 08:08
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
comprobar si es verdadero el mail

hora foro!!!

he estado mirando en http://www.zend.com/zend/spotlight/ev12apr.php el código para comprobar si el mail exites... esta es la función:
Código PHP:
function comprobar_mail($Email){
    global 
$HTTP_HOST;
    
$result = array(); 
    if (!
eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"$Email)) {
        
$result[0]=false
        
$result[1]="$Email no éstá bien escrito";
        return 
$result;
    }
    list ( 
$Username$Domain ) = split ("@",$Email);
    if (
getmxrr($Domain$MXHost)) {
        
$ConnectAddress $MXHost[0];
    }else{
        
$ConnectAddress $Domain
    }
    
$Connect fsockopen ($ConnectAddress25);
    if (
$Connect) {
        if (
ereg("^220"$Out fgets($Connect1024))) {
           
fputs ($Connect"HELO $HTTP_HOST\r\n");
           
$Out fgets $Connect1024 );
           
fputs ($Connect"MAIL FROM: <{$Email}>\r\n");
           
$From fgets $Connect1024 );
           
fputs ($Connect"RCPT TO: <{$Email}>\r\n");
           
$To fgets ($Connect1024);
           
fputs ($Connect"QUIT\r\n");
           
fclose($Connect);
            if (!
ereg ("^250"$From) || !ereg "^250"$To )) {
               
$result[0]=false;
               
$result[1]="El servidor rechaza la dirección";
               return 
$result;
            }
        } else {
            
$result[0] = false;
            
$result[1] = "El servidor no responde.";
            return 
$result;
          }
    }else {
        
$result[0]=false;
        
$result[1]="No se puede conectar con el E-mail server.";
        return 
$result;
    }
    
$result[0]=true;
    
$result[1]="$Email parece ser válido";
    return 
$result;
// end of function 
y me da este error:

Warning: fsockopen(): unable to connect to kkll.com:25 in /docroot/lib/scripts.php on line 138

la línea 138 es esta:
Código PHP:
$Connect fsockopen ($ConnectAddress25); 
Qué puede fallar?? he copiado el código tal cuál, mi servidor es Linux...

Gracias!!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #2 (permalink)  
Antiguo 14/04/2005, 05:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
El código que presentas hace una conexión directa por sockets .. concretamente por el puerto 25 .. así que si tienes un proxy por médio o similar .. tendrás que revisar que esté abierto para que se puea al menos usar.

Un saludo,
  #3 (permalink)  
Antiguo 14/04/2005, 06:53
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
y cómo puedo averiguar eso? gracias cluster!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #4 (permalink)  
Antiguo 14/04/2005, 07:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por X3mdesign
y cómo puedo averiguar eso? gracias cluster!!
Tu eres el administrador de tu servidor? .. o usas un servicio de hosting? .. Que sistema operativo usas en tu servidor? (por qué por ejemplo: getmxrr() que es bastante bueno para averigüar si tal dominio tiene un registro MX que apunte a un servidor de correo .. sólo funciona en Linux).

Un saludo,
  #5 (permalink)  
Antiguo 20/04/2005, 09:54
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
Hola Cluster,

Estoy alojado en www.acens.com y el plan el Plan Profesional (Linux)

Gracias!!!, perdona pero no pude responderte antes
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #6 (permalink)  
Antiguo 20/04/2005, 10:06
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
Acabo de hablar con el servicio técnico y he comprobado que el servidor tiene abierto el socket 25 con un "telnet smtp.dominio.net 25" en la consola de MS-DOS y aparece "220 correo5.acens.net ESMTP"... con lo que se supone que dicho socket está abierto... entonces?? porqué no funciona el código??

un saludo!!!!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #7 (permalink)  
Antiguo 20/04/2005, 11:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Y .. has probado tu código con otros e-mails? .. (para ver otros dominos .. )

Un saludo,
  #8 (permalink)  
Antiguo 21/04/2005, 02:05
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
Acabo de probar con otros mails y si el dominio existe lo da como válido aunque el nombre del mail sea inventado, sin embargo si el dominio también es inventado me sale este error:

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /docroot/lib/scripts.php on line 142

Warning: fsockopen(): unable to connect to hgdkd.es:25 in /docroot/lib/scripts.php on line 142

Warning: Cannot modify header information - headers already sent by (output started at /docroot/lib/scripts.php:142) in /docroot/admin/accion_tb.php on line 30


por cierto, la forma de comprobar el mail que uso es esta:

Código PHP:
switch($accion){
    case 
"comprobar":
        if(
comprobar_mail($_POST['email'])){
            
$error="0";
        }else{            
            
$error=$result[1];
        }
        
header("Location: comprobar.php?error=$error");
        exit;
    break;
    case....

Gracias Cluster por e interés
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #9 (permalink)  
Antiguo 21/04/2005, 02:39
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
estooooooooooooo guau, si meto cualquier palabra sin @ ni . también me dice que existe así que el error por lo visto viene de antes... para qué sirve global $HTTP_HOST????

gracias!!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #10 (permalink)  
Antiguo 21/04/2005, 09:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
global $HTTP_HOST;

Es para declarar como "global" esa variable que es externa a esa función y la puedas acceder dentro de la misma ..

Equivale a (lo que deberías usar hoy por hoy):

$_SERVER['HTTP_HOST']

que por cierto ya es "super-global" .. es decir .. no es necesario declararlo como "global" pues ya lo es .. sustituye las apariciones de $HTTP_HOST (quitando el global ....) por lo que te indico .. Tal vez tengas problemas por ahí (sobre todo si usas register_globals a OFF)

Un saludo,
  #11 (permalink)  
Antiguo 21/04/2005, 10:15
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
pero en ese script, no he de usar lo de glbal, no?? vamos que no tengo que cambiar nada, sólo quitar esa línea...

gracias cluster again ^_*
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #12 (permalink)  
Antiguo 21/04/2005, 10:15
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
pero en ese script, no he de usar lo de glbal, no?? vamos que no tengo que cambiar nada, sólo quitar esa línea... me sigue ocurrindo lo mismo... dominio que exite lo valida todo si no sale el mismo error en pantalla...

gracias cluster again ^_*
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #13 (permalink)  
Antiguo 21/04/2005, 12:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Ya te comenté .. si quieres adaptar el script al uso de los arrays superglobales para evitar problemas con "register_globals" .. ademas de quitar el "global" completo .. debes usar $_SERVER ... donde antes aparecía sólo $HTTP_HOST .. por ejemplo:
Código PHP:
fputs ($Connect"HELO $HTTP_HOST\r\n"); 
sería:
Código PHP:
fputs ($Connect"HELO ".$_SERVER['HTTP_HOST']."\r\n"); 
No sé si aparecerá más .. revisalo.

Pero .. si te fijas:
Código PHP:
if (getmxrr($Domain$MXHost)) { 
        
$ConnectAddress $MXHost[0]; 
    }else{ 
        
$ConnectAddress $Domain
    } 
    
$Connect fsockopen ($ConnectAddress25); 
Del uso de la función:

getmxrr() (que sólo funciona en LINUX) .. se deriva si va a usar o intentar conecar a "domino.tal" o al registro MX de ese domino que es donde se supone que está atendiendo ese servidor para tratar el e-mail (SMTP).

Si eso ya te falla .. tendrías que ver en la documentación oficial de PHP si hay algo a tener encuenta ...

Un saludo,
  #14 (permalink)  
Antiguo 22/04/2005, 05:00
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 21 años, 1 mes
Puntos: 2
Gracias Cluster... he cambiaro el $_SERVER['HTTP_HOST'] no lo había visto... sigue dando el mismo error.... revisaré la documentación como me indicas... por cierto, no se puede mandar con acuse de lectura un mail en PHP??

Muchas gracias por todo :)
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #15 (permalink)  
Antiguo 22/04/2005, 07:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por X3mdesign
Gracias Cluster... he cambiaro el $_SERVER['HTTP_HOST'] no lo había visto... sigue dando el mismo error.... revisaré la documentación como me indicas... por cierto, no se puede mandar con acuse de lectura un mail en PHP??

Muchas gracias por todo :)
Si, .. el "acuse de recibo" es otra cabecera mas.

Fijate que PHP con su función mail() tan sólo te presta el soporte genera a definir un "destinatario" .. un "subject" (asunto) de tu e-mail y "genéricamente" todas las cabeceras extra que requieras .. esas cabeceras las define el protocolo SMTP en su documentación oficial (RFC correspondientes). Pero, no depende de PHP .. lamentablemente la función mail() no incorpora como "parámetro" ese tipo de cabeceras "clásicas" y muy usadas como "FROM .. " y similar. Por el mismo médio (cabeceras) se definiría también un e-mail en "multiparte" .. o enviado en formato HTML .. o con archivos adjuntos .. etc. Como veras .. es un trabajo que hay que hacerlo en esos casos "a mano" (pero no te preocupes .. por que ese trabajo ya se lo ha dado mucha gente antes que nosostros .. sólo es cosa de "buscar"):

En su defecto .. usa classes como PHP Mailer (http://phpmailer.sourceforge.net) .. Este tipo de classes incorporan ya implementado la mayoría de cabeceras SMTP habituales .. con métodos simples para definir "destinatarios" .. el "remitente" (FROM) .. e-mail en multiparte (HTML/texto plano ..) archivos adjuntos .. etc. Por mi parte hace muchoooooooo tiempo que ya no uso "mail()" directamente .. uso este tipo de classes. Además .. te permite (en ese caso) enviar tu e-mail pasando por mail() de PHP (incorporandole todas esas "cabeceras" que hay que usar en cada caso) .. usar tu MTA directo (sendmail .. SMTP directo ...) .. etc.

Por lo menos con eso ya tengo resuelto el tema "enviar e-mail" en todos los aspectos.

Un saludo,
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 21:40.