2012-12-05 7 views
6

Ich versuche, ein Skript, das eine Textdatei, komprimiert es mit Archive :: Zip, und sendet die ZIP-Datei als Anhang über SMTP mit E-Mail :: Absender zum Erstellen einer Pantomime-Nachricht.Zip-Datei mit perl gesendet Email :: Absender ist beschädigt

Ich kann TXT-Dateien in Perl ohne Korruption senden. Ich kann die Datei senden, die manuell per Reißverschluss ohne Beschädigung zippt. Ich kann keine manuell gezippte Datei per Perl senden.

Ich vermute, dass mein Problem entweder mit dem Lesen der gezippten Datei oder dem Erstellen der MIME-Nachricht ist. Hier ist der relevante Code, der im Wesentlichen der Code aus der Zusammenfassung von Email :: MIME ist, wobei $ fileToSend der Pfad zur gezippten Datei ist.

Irgendwelche Ideen?

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

Was ist der Unterschied zwischen den gesendeten und empfangenen Dateien? – Tim

+0

Die empfangene ZIP-Datei ist etwas kleiner als die versendete ZIP-Datei (822 KB vs. 893 KB). Deshalb vermute ich, dass io() das Problem ist. – Dodd10x

+0

Warum diese komplexe Methode, Datei nur als Anlage senden? – netawater

Antwort

5

Endlich das Problem gefunden. Das Hinzufügen dieser Zeile hat den Trick gemacht.

$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();