2015-04-21 61 views
0

我有一個應該提取電子郵件附件並將其放置在特定位置的模塊。該代碼創建POP3客戶端來獲取郵件,並使用EMAIL :: MIME :: Attachment :: Stripper模塊來提取附件,如下所示。如何從電子郵件附件中提取壓縮的xls文件?

 my $mail=$pop->HeadAndBody($i); 
    my $parsed = Email::MIME->new($mail); 
    my $stripper = Email::MIME::Attachment::Stripper->new($parsed); 
    my @attachments = $stripper->attachments; 

    foreach my $a(@attachments) 
    { 
     next if $a->{content_type} !~ /octet-stream/i; 
     my $f = new IO::File "C:/MAIL_PARSING_DATA/" . "<filename>.<file-extension>", "w" or die "Can not create file!"; 
     print $f $a->{payload}; 
     goto EXITPOINT; 
    } 

的代碼由Perl模塊,識別標準文件做工精細,像電子表格等,但不具有拉上Excel文件作爲附件的特定郵件。在提取文件時,由Perl腳本爲該文件識別的content_typeapplication/octet-stream。使用上述代碼提取文件時,文件似乎被破壞,因爲:

  1. 該文件未通過WinZip,WinRAR或7-Zip打開。
  2. 通過此腳本提取的文件的文件大小與使用Outlook提取的同一文件略有不同。

請在問題上提供一些意見。

回答

0

問題是這裏

next if $a->{content_type} !~ /octet-stream/i; 

拉鍊具有內容類型爲應用程序/壓縮

0

@NeoNox,感謝您的響應。但是perl系統只將文件標識爲八位字節流,而不是應用程序/ zip。

無論如何,我可以找到解決方案。

我可以以二進制方式寫入文件(如下明確地提解決問題:

binmode $fh; 

在這裏,文件將被以二進制方式書面方式所以我沒有得到輸出作爲破碎的文件。

0

我發現了同樣的問題。

XLSX文件不被視爲附件。 我使用IMAP。

它將下載電子郵件正文,任何jpgs或png等,但是即使在附件下載的電子郵件中也沒有找到附加的xlsx。

相關問題