2012-12-05 32 views
6

我想運行一個腳本,需要一個文本文件,壓縮它使用Archive :: Zip,並通過使用電子郵件發送zip文件作爲附件通過smtp ::發件人創建一個MIME消息。與Perl電子郵件::發件人發送的Zip文件已損壞

我可以在perl中發送txt文件而不會損壞。我可以發送手動perl文件而不會損壞的文件。我無法通過perl發送手動壓縮文件。

我懷疑我的問題是讀取壓縮文件或創建MIME消息。下面是相關的代碼,它基本上是Email :: MIME的摘要中的代碼,其中$ fileToSend是壓縮文件的路徑。

任何想法?

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

什麼是發送和接收文件的區別? – Tim

+0

收到的zip文件比發送的壓縮文件略小(822 kb比893 kb)。這就是爲什麼我懷疑io()成爲問題。 – Dodd10x

+0

爲什麼這個複雜的方法,只是發送文件作爲附件? – netawater

回答

5

最後發現問題。添加這條線是有訣竅的。

$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(); 
相關問題