我正在尝试运行一个带有文本文件的脚本,使用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,
);
答案 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();