我发现很难相信这个问题在SO上不存在,但是我找不到Perl的实例或类似的实例....
无论如何,我应该用什么Perl模块将多个文件附加到电子邮件中?
目前,我正在使用此代码发送包含单个附件的电子邮件,但我无法弄清楚如何修改它以处理多个附件:
my $mail_fh = \*MAIL;
open $mail_fh, "|uuencode $attachment $attachment |mailx -m -s \"$subject\" -r $sender $recipient";
print $mail_fh $message;
close($mail_fh);
是否可以修改此代码块以处理多个附件?或者我是否必须使用特殊模块将其关闭?如果是这样,模块是什么以及如何编写它?
感谢您的帮助!
答案 0 :(得分:3)
我最后使用MIME::Lite
找到here
use MIME::Lite;
use Getopt::Std;
my $SMTP_SERVER = 'smtp.server.com'; #change
my $DEFAULT_SENDER = 'default@sender.com'; #change
my $DEFAULT_RECIPIENT = 'default@recipient.com'; #change
MIME::Lite->send('smtp', $SMTP_SERVER, Timeout=>60);
my (%o, $msg);
# process options
getopts('hf:t:s:', \%o);
$o{f} ||= $DEFAULT_SENDER;
$o{t} ||= $DEFAULT_RECIPIENT;
$o{s} ||= 'Files';
if ($o{h} or !@ARGV) {
die "usage:\n\t$0 [-h] [-f from] [-t to] [-s subject] files ...\n";
}
# construct and send email
$msg = new MIME::Lite(
From => $o{f},
To => $o{t},
Subject => $o{s},
Data => "Data",
Type => "multipart/mixed",
);
while (@ARGV) {
$msg->attach('Type' => 'application/octet-stream',
'Encoding' => 'base64',
'Path' => shift @ARGV);
}
$msg->send( );
示例用法:
./notify_mime.pl -f cheese -t queso -s subject /home/id/cheeseconqueso/some_dir/example1.xls /home/id/cheeseconqueso/some_other_dir/*.xls
答案 1 :(得分:2)
如果您需要更多控制权,请参阅Email::Stuff中的attach_file
或Email::MIME。
答案 2 :(得分:1)
尽管收视率不尽相同,但我发现Mail::Sender(并且它的朋友Mail::Sender::Easy)使用起来非常简单直接,看起来它可以处理多个附件。
我发现界面在Mail::Internet中非常烦人。
但是,任何东西都应该比你上面的东西更好。 : - )