Foros del Web » Programando para Internet » PHP »

Envio de Archivo adjunto con php mailer

Estas en el tema de Envio de Archivo adjunto con php mailer en el foro de PHP en Foros del Web. Esto es, necesito enviarle al usuario un archivo especifico por correo luego que él haya diligenciado un formulario, para ello estoy utilizando lo siguiente: @import ...
  #1 (permalink)  
Antiguo 25/02/2014, 08:39
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años
Puntos: 20
Envio de Archivo adjunto con php mailer

Esto es, necesito enviarle al usuario un archivo especifico por correo luego que él haya diligenciado un formulario, para ello estoy utilizando lo siguiente:

Código PHP:
Ver original
  1. include ('conexion.php');
  2.  
  3. //Recibimos las variables
  4. $codigo = $_POST['codigo'];
  5. $email = $_POST['email'];
  6. $libro = $_POST['libro'];
  7.  
  8. //Desechamos el código
  9.  
  10. $update = "UPDATE primer_ttiraje SET activo = '1'  WHERE codigo ='$codigo'";
  11. $r_update = mysql_query ($update) or die (mysql_error());
  12.  
  13. $update2 = "UPDATE primer_ttiraje SET libro = '$libro' WHERE codigo ='$codigo' ";
  14. $r_update2 = mysql_query ($update2) or die (mysql_error());
  15.  
  16. //Enviamos el libro por correo:
  17.  
  18.  
  19. if ($libro =='1') {
  20. // primero hay que incluir la clase phpmailer para poder instanciar
  21.       //un objeto de la misma
  22.       require "PHPMailer/class.phpmailer.php";
  23.  
  24.       //instanciamos un objeto de la clase phpmailer al que llamamos
  25.       //por ejemplo mail
  26.       $mail = new phpmailer();
  27.  
  28.       //Definimos las propiedades y llamamos a los métodos
  29.       //correspondientes del objeto mail
  30.  
  31.       //Con PluginDir le indicamos a la clase phpmailer donde se
  32.       //encuentra la clase smtp que como he comentado al principio de
  33.       //este ejemplo va a estar en el subdirectorio includes
  34.       $mail->PluginDir = "PHPMailer/";
  35.  
  36.       //Con la propiedad Mailer le indicamos que vamos a usar un
  37.       //servidor smtp                            
  38.       $mail->Mailer = "smtp";
  39.  
  40.       //Asignamos a Host el nombre de nuestro servidor smtp
  41.       $mail->Host = "smtp.gmail.com";
  42.      
  43.       $mail->Port       = 587;
  44.       //Definmos la seguridad como TLS
  45.       $mail->SMTPSecure = 'tls';
  46.      
  47.       //Le indicamos que el servidor smtp requiere autenticación
  48.       $mail->SMTPAuth = true;
  49.  
  50.       //Le decimos cual es nuestro nombre de usuario y password
  51.       $mail->Username = "****@crmbusiness.biz";
  52.       $mail->Password = "buckdich";
  53.      
  54.       //Indicamos cual es nuestra dirección de correo y el nombre que
  55.       //queremos que vea el usuario que lee nuestro correo
  56.       $mail->From = "[email protected]";
  57.  
  58.       $mail->FromName = "The Matrix Thinking";
  59.  
  60.       //Asignamos asunto y cuerpo del mensaje
  61.       //El cuerpo del mensaje lo ponemos en formato html, haciendo
  62.       //que se vea en negrita
  63.       $mail->Subject = "Libro Piensa en lo Nuevo";
  64.       $mail->Body = "<b>Acabas de recibir el libro Piensa en lo Nuevo en formato pdf, descargalo y disfruta tu lectura.</b>";
  65.  
  66.       //Definimos AltBody por si el destinatario del correo no admite
  67.       //email con formato html
  68.       $mail->AltBody ="Mensaje de prueba mandado con phpmailer en formato texto";
  69.  
  70.       //el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar
  71.       //una cuenta gratuita y voy a usar attachments, por tanto lo pongo a 120  
  72.       $mail->Timeout=120;
  73.  
  74.       //Indicamos el fichero a adjuntar si el usuario seleccionó uno en el formulario
  75.       $mail->AddAttachment('/webroot/matrix/beta2/zte45m8Ih/Piensa_en_Lo_Nuevo/libro.pdf');
  76.      
  77.  
  78.       //Indicamos cuales son las direcciones de destino del correo y enviamos
  79.       //los mensajes
  80.       //reset($direcciones);
  81.       //while (list($clave, $valor)=each($direcciones)) {
  82.     $mail->AddAddress($email);
  83.  
  84.     //se envia el mensaje, si no ha habido problemas la variable $success
  85.     //tendra el valor true
  86.     $exito = $mail->Send();
  87.  
  88.     //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas
  89.     //como mucho para intentar enviar el mensaje, cada intento se hara 5 s
  90.     //segundos despues del anterior, para ello se usa la funcion sleep
  91.     $intentos=1;
  92.     while((!$exito)&&($intentos<5)&&($mail->ErrorInfo!="SMTP Error: Data not accepted")){
  93.        sleep(5);
  94.            //echo $mail->ErrorInfo;
  95.            $exito = $mail->Send();
  96.            $intentos=$intentos+1;              
  97.     }
  98.  
  99.     //La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
  100.     //attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho
  101.     //valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
  102.     if ($mail->ErrorInfo=="SMTP Error: Data not accepted") {
  103.        $exito=true;
  104.         }
  105.        
  106.     if(!$exito)
  107.     {
  108.        echo "Problemas enviando correo electrónico a ".$valor;
  109.        echo "<br/>".$mail->ErrorInfo;  
  110.     }
  111.     else
  112.     {
  113.        //Mostramos un mensaje indicando las direccion de
  114.        //destino y fichero  adjunto enviado en el mensaje  
  115.        $mensaje="<p>Has enviado un mensaje a:<br/>";
  116.        $mensaje.=$valor." ";
  117.        if ($archivo !="none") {
  118.         $mensaje.="Con un fichero adjunto llamado ".$archivo_name;
  119.        }
  120.        $mensaje.="</p>";
  121.            echo $mensaje;
  122.  
  123.  
  124.     }
  125.     // Borro las direcciones de destino establecidas anteriormente
  126.         $mail->ClearAddresses();
  127.    
  128.    
  129.     echo "<a href='$PHP_SELF'> VOLVER AL FORMULARIO</a>";
  130. }
  131. ?>

Pero al ejecutarlo me da estos errores
Cita:
Could not access file: /webroot/matrix/beta2/zte45m8Ih/Piensa_en_Lo_Nuevo/libro.pdf SMTP Error: Could not connect to SMTP host. SMTP Error: Could not connect to SMTP host. SMTP Error: Could not connect to SMTP host. SMTP Error: Could not connect to SMTP host. SMTP Error: Could not connect to SMTP host. Problemas enviando correo electrónico a
SMTP Error: Could not connect to SMTP host
__________________
Say no more.......
  #2 (permalink)  
Antiguo 25/02/2014, 11:25
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Envio de Archivo adjunto con php mailer

Could not access file: /webroot/matrix/beta2/zte45m8Ih/Piensa_en_Lo_Nuevo/libro.pdf
Esto es que el archivo no está accesible desde donde se ejecuta el phpmailer, considerando que usas ruta absoluta, habría que ver si el archivo existe, se llama así considerando mayúsculas y minúsculas, y está en ese directorio.

SMTP Error: Could not connect to SMTP host

Esto parece ser problema de conexión con la cuenta, habría que ver si el puerto es correcto.
  #3 (permalink)  
Antiguo 25/02/2014, 11:26
 
Fecha de Ingreso: junio-2011
Ubicación: Barcelona
Mensajes: 212
Antigüedad: 12 años, 11 meses
Puntos: 17
Respuesta: Envio de Archivo adjunto con php mailer

Hola :) Bueno lo primero es basicamente que no puede acceder a ese archivo por que pones la rula absoluta? Creo que añadiendo la ruta en base a donde esta el archivo .php ya funcionara creo, ejemplo:

El php esta en la raiz /enviar.php y el pdf en la carpeta pdf /pdf/libro.pdf pues "pdf/libro.pdf" o si esta una carpeta anterior "./pdf/libro.pdf".

Aparte creo que te falta un parametro el nombre del documento que se va a mostrar, ejemplo:

Código PHP:
Ver original
  1. $mail->AddAttachment('/webroot/matrix/beta2/zte45m8Ih/Piensa_en_Lo_Nuevo/libro.pdf', "Soy_el_libro.pdf");

Luego el segundo error es por que no se a conectado al servidor smtp de google. Aunque tambien te falta avisar de que vas a enviar el correo por smtp;
Código PHP:
Ver original
  1. $mail->IsSMTP();

Ahora mismo en un archivo que utilice yo hace un tiempo tengo estos datos y me funciono correctamente por conexion ssl.

Código PHP:
Ver original
  1. $mail->SMTPAuth   = true;   // enable SMTP authentication
  2.     $mail->SMTPSecure = "ssl";
  3.     $mail->Port       = 465;                    // set the SMTP server port
  4.     $mail->Host       = "smtp.gmail.com"; // SMTP server

Comentame que tal, un saludo.
__________________
Twitter: @ed33x

Etiquetas: formulario, html, mailer, mysql, variable
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 09:27.