6

我正在尝试运行一个脚本,该脚本需要一个文本文件,使用 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,
      );
4

2 回答 2

5

终于找到问题了。添加这一行就可以了。

$message->encoding_set( 'base64' );
于 2012-12-05T19:45:44.190 回答
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();
于 2017-03-23T02:00:46.420 回答