2012-12-05 16 views
6

Sto provando a eseguire uno script che accetta un file di testo, lo comprime usando Archive :: Zip e invia il file zip come allegato via smtp utilizzando Email :: Mittente per creare un messaggio mimo.File zip inviato con perl Email :: Il mittente è danneggiato

Posso inviare file txt in perl senza corruzione. Posso inviare il file che perl chiude manualmente senza corruzione. Non riesco a inviare un file zippato manualmente tramite perl.

Sospetto che il mio problema sia con la lettura del file zippato, o la creazione del messaggio MIME. Ecco il codice rilevante, che è essenzialmente il codice dalla sinossi di Email :: MIME, dove $ fileToSend è il percorso del file zippato.

Qualche idea?

use strict; 
use warnings; 
use Email::MIME; 
use Email::Sender::Transport::SMTP; 
use Email::Sender::Simple qw(sendmail); 
use Archive::Zip qw(:ERROR_CODES :CONSTANTS); 
use IO::All; 

my $message = 
     Email::MIME->create(
     header_str => [ 
    From => $sender, 
    To  => $recipient, 
    Subject => $subject, 
    ], 
      attributes => { 
       filename  => $filename, 
       content_type => 'application/zip', 
       disposition => 'attachment', 
       name   => $filename, 
      }, 
      body => io($fileToSend)->binary->all, 
      #body => io($fileToSend)->all, 
    ); 
+0

Qual è la differenza tra i file inviati e ricevuti? – Tim

+0

Il file zip ricevuto è leggermente più piccolo di quello inviato (822 kb vs 893 kb). Ecco perché sospetto che io() sia il problema. – Dodd10x

+0

perché questo metodo complesso, basta inviare file come allegato? – netawater

risposta

5

Trovato il problema infine. L'aggiunta di questa linea ha fatto il trucco.

$message->encoding_set('base64'); 
0
my $transport = Email::Sender::Transport::SMTP->new({ 
        host => $smtpserver, 
        port => $smtpport, 
        sasl_username => $smtpuser, 
        sasl_password => $smtppassword, 
        ssl => 'starttls'}); 

Email::Stuffer->from('[email protected]') 
      ->to('[email protected]') 
      ->text_body('hello') 
      ->attach_file ('zipfile') 
      ->transport($transport) 
      ->send(); 
Problemi correlati