Página 1 de 1

Adjuntar xls a un correo

NotaPublicado: 2014-06-24 15:01 @667
por audax
Hola a todos.

Después de mucho buscar y no encontrar la solución, lo que me queda es preguntar y qué mejor que en el mejor sitio de Perl en español.

Bueno, mi tema es el siguiente: Deseo enviar un xls por correo, pero quiero agotar todas las opciones de la librería Mail::Sendmail. Yo logro enviar correo correctamente; bien hasta ahí. Pero no he podido encontrar la opción para adjuntar un archivo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use Mail::Sendmail;
  4.  
  5. my $archivo = "C:\\xxx\\archivo.xlsx";
  6.  
  7. %mail = (smtp    => 'xxx.xx.x.xx:25',
  8.          to      => '[email protected]',
  9.          from    => '[email protected]',
  10.          subject => 'Test!',
  11.          message => 'Mensaje de Prueba',
  12. );
  13. sendmail(%mail) or die;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Les agradecería un montón su ayuda.
Saludos,

Re: Adjuntar xls a un correo

NotaPublicado: 2014-06-24 16:16 @719
por explorer
En este foro ya hemos hablado alguna vez sobre el tema de adjuntar archivos a un correo. Casi siempre pasa por usar algún módulo para crear partes MIME.

En la propia página de manual de Mail::Sendmail te lleva a la página del FAQ, y entre las más frecuentes está la de How to send attachments?

Inténtalo. Si tienes algún problema, avísanos.

Aquí tienes un ejemplo muy sencillo, usando MIME::Entity. Y otro mucho más completo.

Re: Adjuntar xls a un correo

NotaPublicado: 2014-06-25 08:30 @396
por audax
explorer, muchas gracias, amigo.

Al final sí me sirvió pero con el ejemplo de MIME::Entity.

En un principio usando Mail::Sendmail la solución la vi bien compleja, ya que había que guardar el archivo con una codificación diferente, etc. Eso me pareció engorroso. Cambié a la librería Email::Stuff. Con ésta sí pude enviar archivo, pero me enviaba el xls sin imágenes el cual no pude saber el porqué. Y luego probé con el ejemplo que mencionastes usando MIME::Entity y envió el archivo en excelentes condiciones. Con esto ya puedo dormir tranquilo. Funcionó de mil maravillas.

Muchas gracias, explorer, por tu ayuda desinteresada.

Saludos,

Re: Adjuntar xls a un correo

NotaPublicado: 2014-07-11 09:53 @453
por audax
Hola nuevamente.

Sobre este mismo tema me apareció un problema. Resulta que pude enviar correos dentro del mismo dominio, pero no los puedo enviar, por ejemplo, a direcciones de afuera, como Gmail. ¿Me pueden ayudar, por favor, para saber qué pasa? Gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my $msg = MIME::Lite->new(
  2.         From    => '[email protected]',
  3.         To      => '[email protected]',
  4.         Subject => 'Prueba...',
  5.         Type    => 'multipart/mixed'
  6.     );
  7.  
  8.  
  9.         $msg->attach(
  10.         Path     => 'Temp/Test.xls',
  11.         Type     => 'application/msword',
  12.         Encoding => 'base64',
  13.         );
  14.  
  15.     ### use Net:SMTP to do the sending
  16.     $msg->send('smtp','MidominioMail.net', Debug=>1 );    
  17.  
  18.  
  19.  
  20.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Edito:
Pude activarle un Debug y me sale esto:

MIME::Lite::SMTP=GLOB(0x247ea5c)>>> RCPT TO:<[email protected]>
MIME::Lite::SMTP=GLOB(0x247ea5c)<<< 550 5.7.1 Unable to relay
SMTP recipient() command failed:
5.7.1 Unable to relay


No entiendo qué pasa. ¿Me pueden ayudar, por favor? Muchas Gracias de antemano.

Saludos.

Re: Adjuntar xls a un correo

NotaPublicado: 2014-07-11 13:08 @589
por explorer
El mensaje de error es devuelto por el servidor de correo. Dice que no admite el reenvío de correos externos a tu red de forma libre.

Eso quiere decir que debes autenticarte en el servidor de correo para que él te reconozca como usuario legítimo, y así poder recoger tu correo y luego reenviarlo al exterior.

Como estás usando el MIME::Lite, debes agregarle las opciones AuthUser y AuthPass en la línea del send().

Tienes más información y ejemplos en la página de manual de MIME::Lite. Busca por la palabra 'AuthUser'.

Re: Adjuntar xls a un correo

NotaPublicado: 2014-07-11 13:59 @624
por audax
Estimado: le prendo velitas por la gran ayuda. Era justo lo que comentas del problema. Al final la línea del send() queda así:

$msg->send('smtp','MidominioMail.net' , AuthUser=>"user", AuthPass=>"pass" );

Además me pidió instalar las librerías MIME::Base64 y Auten::SASL para que funcionara satisfactoriamente, y lo menciono por si alguien más tiene algún problema parecido.

explorer: reitero mis agradecimientos.

Saludos.