Foros del Web » Programando para Internet » PHP »

Ayuda con código

Estas en el tema de Ayuda con código en el foro de PHP en Foros del Web. Buenas, estoy haciendo un código para verificar un correo electrónico, primero verifico mediante expresiones regulares si el formato del correo es correcto, a continuación si ...
  #1 (permalink)  
Antiguo 28/05/2004, 01:45
Avatar de PeiShar  
Fecha de Ingreso: abril-2001
Ubicación: España
Mensajes: 125
Antigüedad: 16 años, 7 meses
Puntos: 0
Pregunta Ayuda con código

Buenas, estoy haciendo un código para verificar un correo electrónico, primero verifico mediante expresiones regulares si el formato del correo es correcto, a continuación si el dominio existe, y lo que me falta por completar es la conexión al servidor y ver si el usuario exite, pero no me llega a conectar :(, os dejo el código para ver en que puedo estar fallando, saludos y gracias:

Tengo problemas a partir de la línea: $Connect = fsockopen

Código PHP:
<?php

function validate_email($Email)
{
   global 
$HTTP_HOST$ConnectAddress$Username$Domain$MXHost;

   
// Crea la validación del email mediante las Expresiones Regulares
   
$RegExp "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";

   
// Presume que el email no es válido
   
$valid 0;

   
// Valida la Sintaxis
   
if (eregi($RegExp$Email))
   {
      list(
$Username,$Domain) = split("@",$Email);

      
// Valida el dominio
      
if (getmxrr($Domain,$MXHost))
      
$valid 1;
      
$ConnectAddress $MXHost[0];
    } else {
      
$valid 0;
      
$ConnectAddress $Domain;
   }

   return 
$valid;

}
?>
<html>
<head>
   <title>Verificacion de Email</title>
</head>
<body>
<h2 align='center'>Verificación de Email</h2>
<?
if (!isset($Email))
{
?>
   <p align='center'>
   <form action="<?php $PHP_SELF ?>" method="post">
   <input type="Text" size="25" maxlength="100" name="Email" value="">
   <input type="Submit" value="ok"
   </form>
   </p>
<?
}
else
{

   
$abierto validate_email($Email);
   if (
$abierto) {
   echo 
"<p align='center'> <font face='verdana' size='1' color='#009900'>Correo: <b>$Email</b> es válido!</font></p>";
   echo 
"
   <font face='verdana' size='1' color='#009900'>Conectando con ... $ConnectAddress</font><br>"
;

      
$Connect fsockopen $ConnectAddress25, &$errno, &$errstr10) or die ("<font face='verdana' size='1' color='#FF0000'>La conección con $ConnectAddress no es posible!</font>");

      if(!
$Connect) {
      echo 
"$errstr ($errno)<br>\n";
      } else {
        
fputs ($Connect"HELO $ConnectAddress\r\n");
          while(!
feof($Connect)) {
          echo 
fgets($Connect,128);
      }
      
fclose($Connect);
      }

} else {
   echo 
"<p align='center'> <font face='verdana' size='1' color='#FF0000'>Correo: <b>$Email</b> formato o dominio no válido!</font></p>";
}
?>
</body>
</html>
<?php
}
?>
  #2 (permalink)  
Antiguo 28/05/2004, 08:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Del código que usas .. tienes que tener algunas consideraciones:

La función: getmxrr() sólo es válida para entorno *NIX (lease: Linux y afines .. no Windows) (hay una alternativa para Windows si este es NT, XP, 2000, 2003 o superior .. no W9X)

Si te dá un error en cierta función o parte del código: PON ese mensaje de error textualmente para que lo veamos (y por donde se produce).

Comenta también si usas tu PC como servidor . o un servicio de hosting (gratuito o de pago) ya que las funciones de sockets por ejemplo depende de la configuración de PHP y la mayoría de servicios de hosting gratuitos no permiten su uso.

Un saludo,
  #3 (permalink)  
Antiguo 29/05/2004, 05:31
Avatar de PeiShar  
Fecha de Ingreso: abril-2001
Ubicación: España
Mensajes: 125
Antigüedad: 16 años, 7 meses
Puntos: 0
Hola Cluster, ante todo gracias por interesarte en el tema.

El código lo tengo colgado en un servidor propio con linux, distribución debian. Lo bueno es que he añadido algunos cambios y funciona perfectamente cuando pruebo un correo de mi red corporativa, pero el problema existe cuando intento conectarme a servidores de correo de Terra, Hotmail, Yahoo, Supercable, etc.

No sé si estos últimos cierran a veces ese tipo de conección, o quizás más bien desde la red corporativa lo tienen bloqueado mediante un firewall, que es lo más seguro.

Por tanto para poder realizar la comprobación de un correo, me temo que voy a tener que conformarme con el control del dominio y el formato del correo, ya que veo dificil que en el firewall habiliten esta opción.



Puedes probar tu mismo el código y me comentas como te ha ido :

Descargar Código

Aqui una web que te comprueba eso mismo y funciona :

Visitar URL

Saludos y gracias
  #4 (permalink)  
Antiguo 29/05/2004, 12:30
Avatar de jachguate  
Fecha de Ingreso: enero-2003
Ubicación: Guatemala
Mensajes: 66
Antigüedad: 14 años, 10 meses
Puntos: 0
Lo que ocurre es que estas dando por hecho que cualquier dominio introducido en el correo tendrá abierto (y disponible) el puerto de SMTP; y has de reconocer que la mayoria van a tenerlo cerrado o bien te van a denegar la conexión al tratar de conectarte remotamente (desde fuera de sus propias redes corporativas).

Hasta luego.

;)
__________________
Juan Antonio Castillo Hernández

Visitá el blog de jachguate
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 10:58.