Foros del Web » Programando para Internet » PHP »

PHPMailer envía pero no recibo el mail!

Estas en el tema de PHPMailer envía pero no recibo el mail! en el foro de PHP en Foros del Web. Hola gente… estoy utilizando la clase PHPMailer, para el envío de mails por SMTP. Esto lo tuve que implementar ya que en el servidor donde ...
  #1 (permalink)  
Antiguo 08/10/2008, 11:04
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años, 7 meses
Puntos: 1
Pregunta PHPMailer envía pero no recibo el mail!

Hola gente… estoy utilizando la clase PHPMailer, para el envío de mails por SMTP.
Esto lo tuve que implementar ya que en el servidor donde esta el sitio para el cual es el formulario que la utiliza, no funciono jamás con la funcion mail() de PHP.
Ahora bien, en mi hosting hice la prueba y luego de algunos errores puede hacerlo funcionar. Ahora bien, en el servidor en donde alojo el sitio con problemas el mismo código también dio errores al principio hasta que logre corrigiendo algunos parámetros que me de el mensaje de “éxito”
Hasta donde entiendo, si el mensaje es positivo, se supone que la conexión con el SMTP fue exitosa y el posterior envío del mail se realiza, a diferencia de la funcion mal() que solo nos informa si el mail fue enviado al SMTP.
Les dejo el código por si acaso:
Pero les recuerdo que en mi hosting comercial me funciona perfectamente, así que el problema esta en la configuración del SMTP del servidor en cuestión, supongo!

Desde ya muchas gracias a quien pueda darme una mano!!!

codigo PHP
Código php:
Ver original
  1. <?php
  2.   // para que no corte a los 30 segundos y muestre el verdadero error
  3.  
  4.   // primero hay que incluir la clase phpmailer para poder instanciar
  5.   //un objeto de la misma
  6.   include_once('includes/class.phpmailer.php');
  7.  
  8.   //instanciamos un objeto de la clase phpmailer al que llamamos
  9.   //por ejemplo mail
  10.   $mail = new phpmailer();
  11.  
  12.   //Definimos las propiedades y llamamos a los métodos
  13.   //correspondientes del objeto mail
  14.  
  15.   //para que muestre los errores en español
  16.   //$mail->SetLanguage("es", "includes/");
  17.    
  18.   //Con PluginDir le indicamos a la clase phpmailer donde se
  19.   //encuentra la clase smtp que como he comentado al principio de
  20.   //este ejemplo va a estar en el subdirectorio includes
  21.   $mail->PluginDir = "includes/";
  22.  
  23.   //Con la propiedad Mailer le indicamos que vamos a usar un
  24.   //servidor smtp
  25.   $mail->Mailer = "smtp";
  26.  
  27.   //Indicamos el puerto que sera diferente al 25
  28.   $mail->Port = "1025";  
  29.  
  30.   //Asignamos a Host el nombre de nuestro servidor smtp
  31.   $mail->Host = "IPdelsmtp";
  32.  
  33.   //Le indicamos que el servidor smtp requiere autenticación
  34.   //$mail->SMTPAuth = true;
  35.  
  36.   //Le decimos cual es nuestro nombre de usuario y password
  37.   //$mail->Username = "infoserver";
  38.   //$mail->Password = "xxxxxx";
  39.  
  40.   //declaro las variables From y FromName
  41.   $emailfrom=$_POST["mail"];
  42.   $nombrefrom=$_POST["nombre"];
  43.  
  44.   //Indicamos cual es nuestra dirección de correo y el nombre que
  45.   //queremos que vea el usuario que lee nuestro correo
  46.   $mail->From = $emailfrom;
  47.   $mail->FromName = $nombrefrom;
  48.  
  49.   //el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar
  50.   //una cuenta gratuita, por tanto lo pongo a 30  
  51.   $mail->Timeout=30;
  52.  
  53.   //Indicamos cual es la dirección de destino del correo
  54.   $mail->AddAddress("info@mailserver");
  55.  
  56.   //cambiamos el formato de fecha y hora al español
  57.     $nommes = array(Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre);
  58.     $nomdia = array(Domingo, Lunes, Martes, Miercoles, Jueves, Viernes, Sabado);
  59.     $dia = date(j); //Dia del mes en numero
  60.     $mes = date(n); //Mes actual en numero
  61.     $diasemana = date(w); //Dia de semana en numero
  62.     $fecha = $nomdia[$diasemana].' '.$dia.' de '.$nommes[$mes-1].' de '.date(Y).', hora '.date(h).':'.date(i).' '.date(a).' de la Argentina.';
  63.  
  64.   //Asignamos asunto y cuerpo del mensaje
  65.   //El cuerpo del mensaje lo ponemos en formato html, haciendo
  66.   //que se vea en negrita
  67.   $mail->Subject = "Desde el Sitio";
  68.   $mail->Body = "<b>** Formulario Web **</b></br></br>
  69.    ESCRIBIO: <b>" .$_POST["nombre"]."</b></br>
  70.     EMPRESA: " .$_POST["empresa"]."</br>
  71.     CARGO: " .$_POST["cargo"]."</br>
  72.     PAIS: " .$_POST["pais"]."</br>
  73.     TELEFONO: " .$_POST["telefono"]."</br>
  74.     E-MAIL: " .$_POST["mail"]."</br></br>
  75.     CONSULTA: " .$_POST["comentarios"]."</br></br>
  76.     ** Mensaje enviado el ".$fecha." **.</br>
  77.     ** El remitente accedio al formulario desde el sitio en ".$_POST["idioma"]." **.</br>";
  78.  
  79.   //asignamos el tipo de caracteres que soportara el cuerpo del mail  
  80.   $mail->CharSet = "UTF-8";
  81.   //$mail->Body = utf8_decode();
  82.  
  83.   //Definimos AltBody por si el destinatario del correo no admite email con formato html
  84.   $mail->AltBody = "** FORMULARIO WEB **"."\n\n
  85.  ESCRIBIO: " .$_POST["nombre"]."\n
  86.  EMPRESA: " .$_POST["empresa"]."\n
  87.  CARGO: " .$_POST["cargo"]."\n
  88.  PAIS: " .$_POST["pais"]."\n
  89.  TELEFONO: " .$_POST["telefono"]."\n
  90.  E-MAIL: " .$_POST["mail"]."\n\n
  91.  CONSULTA: " .$_POST["comentarios"]."\n\n\n\n
  92.  ** Mensaje enviado el ".$fecha." **"."\n
  93.  ** El remitente accedio al formulario desde el sitio en ".$_POST["idioma"].". **"."\n";
  94.  
  95.   //se envia el mensaje, si no ha habido problemas
  96.   //la variable $exito tendra el valor true
  97.   $exito = $mail->Send();
  98.  
  99.   //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho
  100.   //para intentar enviar el mensaje, cada intento se hara 5 segundos despues
  101.   //del anterior, para ello se usa la funcion sleep
  102.   $intentos=1;
  103.   while ((!$exito) && ($intentos < 5)) {
  104.     sleep(5);
  105.         //echo $mail->ErrorInfo;
  106.         $exito = $mail->Send();
  107.         $intentos=$intentos+1; 
  108.    
  109.    }
  110.  
  111.        
  112.    if(!$exito)
  113.    {
  114.     echo "Problemas enviando correo electrónico a ".$valor;
  115.     echo "<br/>".$mail->ErrorInfo; 
  116.    }
  117.    else
  118.    {
  119.     echo "Mensaje enviado correctamente!!!";
  120.     echo "&estatus=ok&";
  121.    }
  122. ?>
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:

Última edición por GatorV; 08/10/2008 a las 11:26
  #2 (permalink)  
Antiguo 08/10/2008, 11:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: PHPMailer envía pero no recibo el mail!

Hola Mono-R,

Tanto mail() como PHPMailer el resultado es si el envio al servidor SMTP fue el correcto, el que envie o no el mail al servidor de destino ya no lo puedes monitorear desde PHP.

Por lo que como bien dices el problema esta en el servidor SMTP que estas utilizando, y desde PHP no puedes cambiar esa configuración.

Saludos.
  #3 (permalink)  
Antiguo 08/10/2008, 11:24
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: PHPMailer envía pero no recibo el mail!

Gracias GatorV por la pronta respuesta.
Teneia entendido que PHPMailer monitoreaba todo el proceso y abría y cerraba la conexión si el envío era exitoso, pero claro, el envío final (el e-mail resultante) depende del SMTP.
Ahora bien, puedo estar seguro que los datos son enviados de forma correcta y que la conexión con el SMTP del servidor es optima, no? Ya que cualquier inconveniente en este proceso me seria devuelto con algún tipo de error, por mas mínimo que fuese éste, no?
Tenes algún parámetro de configuración del SMTP para que funcione, se que no es algo inherente a esta sección del foro, pero… Cualquier aporte se agradece!!! (jaja)
El tema del puerto supuestamente era la solución ya que el 25 no funcionaba al pedir autenticación (según el administrador del Server, que no se dedica al web hosting, sino que es un Server empresarial)

Saludos!
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #4 (permalink)  
Antiguo 08/10/2008, 11:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: PHPMailer envía pero no recibo el mail!

Lo que pasa es que no solo existe 1 solo server SMTP, hay muchos, y cada uno tiene su configuración, debes de investigar que software SMTP usan, y entonces (si tienes los permisos) modificar su configuración.

Si no tienes los permisos lo mejor esque tomes el tema con tu administrador del server ya que por algo compraste el servicio y ellos tienen que configurar esos servicios.

Saludos.
  #5 (permalink)  
Antiguo 08/10/2008, 11:58
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: PHPMailer envía pero no recibo el mail!

Ok GatorV, Gracias!, una más…
Es posible que algún otro parámetro del código PHP lo haga funcionar? Esto te lo digo porque me comentan que también tienen otro sitio y a este si funcionan los formularios. Me pasaron el código, que interactúa con una base de datos…
El tema es que no puedo postearlo por cuestiones éticas, y no se si esto me implicaría una sanción!
El puerto y la IP del servidor son las mismas que uso yo, y como menciono el código me devuelve éxito en el envio!
Por eso te comento lo de algún otro parámetro para pasarle al SMTP.
Gracias nuevamente por tu tiempo y espero ser claro.
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #6 (permalink)  
Antiguo 08/10/2008, 12:12
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: PHPMailer envía pero no recibo el mail!

P:D: el servidor no es mió, (sino ya lo hubiese cambiado!!!), es el de un cliente al cual le diseñe un sitio web, y no se dedican al web hosting, si bien alberga un par de sitio propios.
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #7 (permalink)  
Antiguo 08/10/2008, 12:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: PHPMailer envía pero no recibo el mail!

La lista de parámetros puede variar, si el servidor usa autentificación es necesario pasarle los datos de login y password, pero como te digo todo depende del servidor smtp.

Saludos.
  #8 (permalink)  
Antiguo 08/10/2008, 13:55
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: PHPMailer envía pero no recibo el mail!

Hola, tengo novedades…
Según el log del SMTP la cabecera “from” le llega vacía!

log...

Oct 8 16:58:02 xxxx/smtpd[21908]: 837AF1DC006: client=unknown[IP del server +1]
Oct 8 16:58:02 xxxx /cleanup[21911]: 837AF1DC006: message-id=<[email protected] om>
Oct 8 16:58:02 xxxx /qmgr[21247]: 837AF1DC006: from=<>, size=1605, nrcpt=1 (queue active)
Oct 8 16:58:02 xxxx /smtpd[21908]: disconnect from unknown[IP del server +1]
Oct 8 16:58:03 xxxx /smtp[21912]: 837AF1DC006: to=<[email protected]>, relay= IP del server -1 +.2 [IP del server -1 +.2], delay=1, status=bounced (host IP del server -1 +.2[IP del server -1 +.2] said: 553 sorry, invalid mail address in MAIL FROM envelope header: (#5.7.1) (in reply to MAIL FROM command))
Oct 8 16:58:03 xxxx /qmgr[21247]: 837AF1DC006: removed
Oct 8 16:59:46 xxxx smtpd[22219]: connect from unknown[IP del server +1]

Edíto el log por obvias rezones!
Algún aporte?
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #9 (permalink)  
Antiguo 08/10/2008, 16:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: PHPMailer envía pero no recibo el mail!

En ese caso puedes ver que cuando haces $mail->From no estas pasando una cadena valida por lo que el email queda vacio y no se envia.

Saludos.
  #10 (permalink)  
Antiguo 08/10/2008, 21:37
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: PHPMailer envía pero no recibo el mail!

Gracias GatorV
Bueno, finalmente llegan los mails!... el problema de la cabecera vacía es porque el from que llega al SMTP es externo al dominio. Esto lo descubrí al hacer varias pruebas, entre ellas definir el valor del from en el PHP para que no quedaran dudas con respecto a la llegada de la variable desde el formulario. Y desde el formulario mismo (flash) colocando en el campo mail un e-mail que fuere del propio dominio, y vuala! (Talvez esto le ayude a alguien con el mismo problema!)

Ahora queda resolver el tema de por que el SMTP rechaza los remitentes externos, pero supongo que eso no lo puedo hacer desde el php, no? jajaja
Bueno, saludos, y si alguien sabe que puede estar pasando con el SMTP, agradecido por el dato ya que si bien no depende de mí, si no se soluciona no sirvió de nada que hiciera funcionar el php! (claro, además de aprender, eso sí!)
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:18.