使用perl Email :: Sender发送的Zip文件已损坏

时间:2012-12-05 19:10:39

标签: perl smtp zip email-attachments

我正在尝试运行一个带有文本文件的脚本,使用Archive :: Zip压缩它,并使用Email :: Sender通过smtp将zip文件作为附件发送,以创建一个mime消息。

我可以在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,
      );

2 个答案:

答案 0 :(得分:5)

最终发现问题。添加这一行就可以了。

$message->encoding_set( 'base64' );

答案 1 :(得分:0)

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

Email::Stuffer->from('a@a.com')
          ->to('b@b.com')
          ->text_body('hello')
          ->attach_file ('zipfile')
          ->transport($transport)
          ->send();