Foros del Web » Programando para Internet » PHP »

Todo tipo de problemas con PHPMailer

Estas en el tema de Todo tipo de problemas con PHPMailer en el foro de PHP en Foros del Web. Buenas tardes: Les comento brevemente. Estoy intentando enviar un mail con la librería PHPMailer y 'sufro' toda clase de contratiempos. En primer lugar, unas veces ...
  #1 (permalink)  
Antiguo 11/01/2011, 14:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Todo tipo de problemas con PHPMailer

Buenas tardes:

Les comento brevemente.

Estoy intentando enviar un mail con la librería PHPMailer y 'sufro' toda clase de contratiempos.
  • En primer lugar, unas veces el mail llega sin mensaje y otras con mensaje.
  • Otro fallo, es que no siempre recoge las variables que le paso, como por ejemplo con el fichero adjunto, que lo envía bien, pero siempre como: 'NONAME'
  • Otra cosa que hace, es no validar el envío del mail, es decir, aunque siempre lo envíe, a su manera, lo envía, sin embargo, para PHPMailer siempre es !$respuesta, con lo que lo envía las veces indicadas en el 'while'.

Espero que alguien pueda echarme una mano.

Muchas gracias.

Saludos


Código PHP:
<?php
session_start
();

require_once(
'libs/phpmailer.inc.php');
require_once(
'constantes.php');

if(isset(
$_POST['f_contacto'])) { // comprobamos si se trata de la recepción del formulario
    
    // extraemos los valores del formulario
    
extract($_POST);
        
    
// recogemos el fichero en la variable   
    
$fichero $_FILES['imagen']['name'];
    
$fichero_1 $_FILES['imagen'];
    
    
$allowedExtensions = array("jpg""jpeg""gif""png""doc""pdf");
    
$tipo end(explode('.',$fichero));
        
    
// definimos la referencia
    
$referencia str_replace(' ','',$nombre).str_replace(' ','',$apellidos).'_'.date('Ymd').'_'.date('His');
    
    
//creamos nombre de la imagen
    
$n_imagen $referencia.'.'.$tipo;
    
    
$destino '../../../uploaded_files/'.$n_imagen;
    
    if(
in_array($tipo,$allowedExtensions)) {
        
// verificamos si se ha subido el fichero
        
if(is_uploaded_file($_FILES['imagen']['tmp_name'])){                            
            if(@
copy($_FILES['imagen']['tmp_name'],$destino)) {
                        
            
$mensaje .= '<b>FORMULARIO RECIBIDO</b><br>'
            
$mensaje .= '<b>Ref: '.$referencia.'</b><br>';
            
$mensaje .= 'Se ha recibido un formulario con la siguiente informaci&oacute;n:<br>';
            
$mensaje .= '<b>Nombre:</b> '.$nombre.'<br>';
            
$mensaje .= '<b>Apellidos:</b> '.$apellidos.'<br>';
            
$mensaje .= '<b>Tel&eacute;fono:</b> '.$tfno.'<br>';
            
$mensaje .= '<b>Mail:</b> '.$mailTo.'<br>';
            
$mensaje .= '<b>Nombre Fichero Original:</b> '.$fichero.'<br>';
            
$mensaje .= '<b>Nombre Fichero:</b> '.$n_imagen.'<br>';
            
$mensaje .= '<b>Ruta Imagen: </b>'.$destino.'<br>';
            
$mensaje .= '<b>Mensaje:</b> '.$f_mensaje;
            
            
$mail = new phpmailer();                                                      // se instancia la clase, para crear el mail
            
$mail->Mailer 'mail';
            
$mail->From '[email protected]';                                            // dirección de envío
            
$mail->FromName 'Nombre';                                                   // nombre del remitente
            
$mail->Sender $mailTo;
            
$mail->Timeout 120;                                                         // se ajusta el timeout a 120
            
if($imagen != 'none') {
                
$mail->AddAttachment($destino$n_imagen);                                // añadimos el archivo adjunto               
            
}    
            
$mail->AddAddress('[email protected]');                                       // dirección de destino
            
$mail->Subject 'Solcitud de información web - Ref: '.utf8_decode($referencia);         // asunto del mail
            
$mail->Body $mensaje;                                                       // mensaje HTML
            
$mail->WordWrap 50;
            
$mail->IsHTML(true);
            
$respuesta $mail->Send();                                                   // envío del mail    

            
$intentos 0;                                                                // contador de intentos
            
            
while((!$respuesta) && ($intentos 5)) {
                
sleep(5);
                
$exito $mail->Send();
                
$intentos $intentos 1;
            }

            
            if(!
$respuesta) {
                echo 
"<p>No se ha podido enviar el mail, int&eacute;ntelo de nuevo m&aacute;s tarde.</p>";
                echo 
"<p>Muchas Gracias</p>";                
            
            }else{
                echo 
"<p>El mail se ha enviado correctamente</p>";
                echo 
"<p>Muchas Gracias</p>";
            }

        }else{
            echo 
"Error al crear el fichero";
        }      
        
        }else{
          echo 
'Error al subir el fichero';  
        
        }
        
    }else{
        echo 
'<p>Archivo no permitido. Los tipos de archivo permitidos son:</p>';
        echo 
'<p>jpg - jpeg - gif - png - doc - pdf</p>';
        
    }

}else{
    echo 
"Ha ocurrido un error al enviar el mail. Reint&eacute;ntelo de nuevo m&aacute;s tarde.";    
}

?>
  #2 (permalink)  
Antiguo 11/01/2011, 16:40
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Todo tipo de problemas con PHPMailer

Buenas noches:

He puesto:
Código PHP:
error_reporting(E_ALL); 
Y me dice que las variables no están definidas, sin embargo, hago un
Código PHP:
print_r($_POST); 
Y si me imprime el array, con lo que no consigo que entren siempre las variables dentro de la clase.

¿A alguien le ha pasado?
  #3 (permalink)  
Antiguo 11/01/2011, 17:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Todo tipo de problemas con PHPMailer

Código PHP:
Ver original
  1. // Esto esta mal:
  2. $mensaje .= '<b>FORMULARIO RECIBIDO</b><br>';
  3.  
  4. // Deberia ser:
  5. $mensaje = '<b>FORMULARIO RECIBIDO</b><br>';

Como no has definido la variable $mensaje no puedes agregarle contenido, recuerda que:
$mensaje .= 'otro contenido';
Es equivalente de:
$mensaje = $mensaje . 'otro contenido';

Entonces, si $mensaje es una variable no definida... donde se agregara 'otro contenido'?

P.D. Eso es lo poco que puedo suponer en base a lo que agregaste, pero no estaria de mas ver el reporte de error tal como lo obtienes, para no estar adivinando.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 11/01/2011, 17:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Todo tipo de problemas con PHPMailer

Hola, muchas gracias, me di cuenta de ese detalle y ya lo corregí.

Uno de los errores que da es:
Código PHP:
Ver original
  1. Notice: Undefined variable: from in /homepages/44/d295951148/htdocs/des_produpin/content/includes/php/libs/phpmailer.inc.php on line 259

Ahora no me devuelve otros errores en las pruebas.

Seguiré probando, porque en la próxima prueba, saldrá otra cosa.
  #5 (permalink)  
Antiguo 11/01/2011, 17:42
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Todo tipo de problemas con PHPMailer

Cita:
Iniciado por jesusjj
1- Ahora no me devuelve otros errores en las pruebas.
2- Seguiré probando, porque en la próxima prueba, saldrá otra cosa.
1- Por supuesto, ya corregiste la principal fuente de errores, ya no tienen porque aparecer.
2- Dificilmente los errores son por causa de PhpMailer, me inclino a pensar que tienes alguna otra variable no definida y el hacer un extrat($_POST) no es garantia de que todas se definan automaticamente, ya sea porque se trata de checkbox o el nombre del input es diferente del que usas para enviar el mail.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 11/01/2011, 17:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Todo tipo de problemas con PHPMailer

En principio, por eso mismo me decidí a utilizar la librería, por seguridad, pero no sé si por los servidores de prueba, o por el código, o incluso por errores de incompatibilidad en el mismo PHPMailer, no hay forma de estabilizarla.

Como servidores para pruebas utilizo, en local, WAMP; y en la Red, 1and1.es.

El código ahora se encuentra de la siguiente manera:
Código PHP:
Ver original
  1. <?php
  2.  
  3. require_once('libs/phpmailer.inc.php');
  4. require_once('constantes.php');
  5.  
  6.  
  7. echo "1.<br>";
  8.  
  9. if(isset($_POST['f_contacto'])) { // comprobamos si se trata de la recepción del formulario
  10. echo "2.<br>";
  11.  
  12.     $nombre = $_POST['nombre'];
  13.     $apellidos = $_POST['apellidos'];
  14.     $tfno = $_POST['tfno'];
  15.     $mailTo = $_POST['mailTo'];
  16.     $f_mensaje = $_POST['f_mensaje'];
  17.     $imSize = $_POST['MAX_FILE_SIZE'];
  18.        
  19.     // recogemos el fichero en la variable  
  20.     $fichero = $_FILES['imagen']['name'];
  21.     $fichero_1 = $_FILES['imagen'];
  22.     $fichero_pre = $fichero_1 ['tmp_name'];
  23.    
  24.     $allowedExtensions = array("jpg", "jpeg", "gif", "png", "doc", "pdf");
  25.     $tipo = end(explode('.',$fichero));
  26.        
  27.     // definimos la referencia
  28.     $referencia = str_replace(' ','',$nombre).str_replace(' ','',$apellidos).'_'.date('Ymd').'_'.date('His');
  29.    
  30.     //creamos nombre de la imagen
  31.     $n_imagen = $referencia.'.'.$tipo;
  32.    
  33.     $destino = '../../../uploaded_files/'.$n_imagen;
  34.    
  35.     if(in_array($tipo,$allowedExtensions)) {
  36. echo "3.<br>";        
  37.        
  38.         if(is_uploaded_file($_FILES['imagen']['tmp_name'])){                            // verificamos si se ha subido el fichero
  39. echo "4.<br>";
  40.            
  41.             if($_FILES['imagen']['size'] > $imSize) {
  42. echo "4b.<br>";
  43.                 echo "El tama&ntilde;o supera el m&aacute;ximo permitido de 3MB";                
  44.                
  45.             }else{
  46.                
  47.                 if(@copy($_FILES['imagen']['tmp_name'],$destino)) {
  48. echo "5.<br>";
  49.                            
  50.                 $mensaje = '<b>FORMULARIO RECIBIDO</b><br>';
  51.                 $mensaje .= '<b>Ref: '.$referencia.'</b><br>';
  52.                 $mensaje .= 'Se ha recibido un formulario con la siguiente informaci&oacute;n:<br>';
  53.                 $mensaje .= '<b>Nombre:</b> '.$nombre.'<br>';
  54.                 $mensaje .= '<b>Apellidos:</b> '.$apellidos.'<br>';
  55.                 $mensaje .= '<b>Tel&eacute;fono:</b> '.$tfno.'<br>';
  56.                 $mensaje .= '<b>Mail:</b> '.$mailTo.'<br>';
  57.                 $mensaje .= '<b>Nombre Fichero Original:</b> '.$fichero.'<br>';
  58.                 $mensaje .= '<b>Nombre Fichero:</b> '.$n_imagen.'<br>';
  59.                 $mensaje .= '<b>Ruta Imagen: </b>'.$destino.'<br>';
  60.                 $mensaje .= '<b>Mensaje:</b> '.$f_mensaje;
  61.                
  62.                 echo $mensaje;
  63.                
  64.                 $intentos = 0;                                                                // contador de intentos
  65.    
  66.                 $mail = new phpmailer();                                                      // se instancia la clase, para crear el mail
  67.                
  68.                 $mail->Plugindir = 'libs/';                              // definimos el plugin smtp
  69.                
  70.                 $mail->Mailer = 'mail';
  71.                 $mail->From = '[email protected]';                                      // dirección de envío
  72.                 $mail->FromName = 'Nombre';                                               // nombre del remitente
  73.                 $mail->Sender = $mailTo;
  74.                 $mail->Timeout = 120;                                                       // se ajusta el timeout a 120
  75.                 if($fichero != 'none') {
  76.                     $mail->AddAttachment($destino);//, $n_imagen);                              // añadimos el archivo adjunto              
  77.                 }    
  78.                 $mail->AddAddress('[email protected]','jesus');                          // dirección de destino
  79.                 $mail->Subject = 'Solcitud de información web - Ref: '.utf8_decode($referencia);         // asunto del mail
  80.                 $mail->Body = $mensaje;                                                     // mensaje HTML
  81.                 $mail->WordWrap = 50;
  82.                 $mail->IsHTML(true);
  83.                 $respuesta = $mail->Send();                                                     // envío del mail    
  84.                
  85.     //            while((!$exito) && ($intentos < 5)) {
  86.     //                sleep(5);
  87.     //                $exito = $mail->Send();
  88.     //                $intentos = $intentos + 1;
  89.     //            }
  90.    
  91.                
  92.                 if(!$respuesta) {
  93.                     echo "<p>No se ha podido enviar el mail, int&eacute;ntelo de nuevo m&aacute;s tarde.</p>";
  94.                     echo "<p>Muchas Gracias</p>";                
  95.                
  96.                 }else{
  97.                     echo "<p>El mail se ha enviado correctamente</p>";
  98.                     echo "<p>Muchas Gracias</p>";
  99.                 }
  100.  
  101.         }else{
  102. echo "6.<br>";        
  103.             echo "Error al crear el fichero";
  104.         }  
  105.             }
  106.    
  107.         }else{
  108. echo "7.<br>";
  109.           echo 'Error al subir el fichero';  
  110.        
  111.         }
  112.        
  113.     }else{
  114. echo "8.<br>";
  115.         echo '<p>Archivo no permitido. Los tipos de archivo permitidos son:</p>';
  116.         echo '<p>jpg - jpeg - gif - png - doc - pdf</p>';
  117.        
  118.     }
  119.  
  120. }else{
  121. echo "9.<br>";
  122.     echo "Ha ocurrido un error al enviar el mail. Reint&eacute;ntelo de nuevo m&aacute;s tarde.";    
  123. }
  124.  
  125. ?>

Para el smtp he desisitido por los problemas de conexión con el socket y eso que utilizo gmail.

Muchas gracias de nuevo
  #7 (permalink)  
Antiguo 11/01/2011, 18:21
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Todo tipo de problemas con PHPMailer

Buenas, estoy recibiendo ya mensaje, pero me corta la variable mensaje en el mail.

Cuando hago el:
Código PHP:
echo $mensaje
Aparece bien, sin embargo, el mensaje que llega al mail llega cortado y devuelve todo desde la 2ª fila, exactamente desde '.$referencia ...'

Código PHP:
$mensaje '<b>FORMULARIO RECIBIDO<br>'
                
$mensaje .= 'Ref: <i>'.$referencia.'</i></b><br>';
                
$mensaje .= 'Se ha recibido un formulario con la siguiente informaci&oacute;n:<br>';
                
$mensaje .= '<b>Nombre:</b> '.$nombre.'<br>';
                
$mensaje .= '<b>Apellidos:</b> '.$apellidos.'<br>';
                
$mensaje .= '<b>Tel&eacute;fono:</b> '.$tfno.'<br>';
                
$mensaje .= '<b>Mail:</b> '.$mailTo.'<br>';
                
$mensaje .= '<b>Nombre Fichero Original:</b> '.$fichero.'<br>';
                
$mensaje .= '<b>Nombre Fichero:</b> '.$n_imagen.'<br>';
                
$mensaje .= '<b>Ruta Imagen: </b>'.$destino.'<br>';
                
$mensaje .= '<b>Mensaje:</b> '.$f_mensaje
Otra cosa que sigue fallando, es la asignación de nombre al fichero, continúa llegando como 'noname'.

Seguiré investigando.

Ciao
  #8 (permalink)  
Antiguo 12/01/2011, 03:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Todo tipo de problemas con PHPMailer

Pues nada, voy comentando 'descubrimientos'.

He leído algo de un problema de gmail con archivos, que los renombra a 'noname', así que he probado a cambiar la dirección de envío a la del trabajo y llega correctamente el archivo, aunque ahora vuelve a aparecer vacío el correo.

Parte de los problemas por los que el mensaje llega vacío es por el WordWrap. Cuando lo comento, llega vacío, si lo dejo a 50, pierde parte del mensaje. Si lo dejo a 10, llega entero (a veces).

Sigo investigando y espero terminar de solucionarlo y lo comento.

Saludos,

Etiquetas: phpmailer, tipo, todo
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 01:28.