Category: Modules Keywords: attachment email MIME::Lite auth Net::SMTP
简单描述
如果仅仅只是发送不带附件的邮件,请参考如何用Net::SMTP发送邮件。这里使用 MIME::Lite 模块来发送附件。分为两种情况,一种是 SMTP 服务器不需要验证的,另一种是需要验证/auth 的。
情况一:SMTP 服务器不需要验证
这种情况下可以参考 perldoc MIME::Lite. 还有个更详细的例子在 Cooking with perl.一个简单的 Example:
use MIME::Lite;
my $msg = MIME::Lite->new(From => 'sender@example.com',
To => 'recipient@example.com',
Subject => 'My photo for the brochure',
Type => 'multipart/mixed');
$msg->attach(Type => 'image/jpeg',
Path => '/Users/gnat/Photoshopped/nat.jpg',
Filename => 'gnat-face.jpg');
$msg->attach(Type => 'TEXT',
Data => 'I hope you can use this!');
#$msg->send( ); # default is to use sendmail(1)
# now we use smtp.
$msg->send('smtp', 'mailserver.example.com');
情况二:SMTP 服务器需要验证/auth
现在的 SMTP 服务器大部分都需要验证,我猜测可能的原因是为了防止垃圾邮件。MIME::Lite 中是不支持 SMTP 验证/auth 的。所以我们一般将 MIME::Lite 转为 string, 然后通过验证后的 Net::SMTP 来发送。详细的代码如下(已测试成功):
use Net::SMTP;
use MIME::Lite;
# setting
my $mailhost = 'smtp.163.com';
my $username = 'usr';
my $password = 'pwd';
my $from = 'usr@163.com'; # your email on that smtp host
my $to = 'recipient@example.com'; # the recipient
my $subject = 'It\'s a test mail with attachment'; # the email title
my $content = 'emailed from fayland.'; # the content of email
my $attachment = 'E:/test.gif';
$smtp = Net::SMTP->new($mailhost, Timeout => 120, Debug => 1);
# anth login
$smtp->auth($username, $password);
# attachment
my $msg = MIME::Lite->new(
From => $from,
To => $to,
Subject => $subject,
Type => 'TEXT',
Data => $content,
);
# Attach
$msg->attach(
Type => 'image/gif', # the attachment mime type
Path => $attachment, # local address of the attachment
Filename => 'asuwish.gif', # the name of attachment in email
);
my $str = $msg->as_string() or die "Convert the message as a string: $!\n";
$smtp->mail($from);
$smtp->to($to);
$smtp->data();
$smtp->datasend($str);
$smtp->dataend();
$smtp->quit;
参考
- http://forums.devshed.com/archive/t-184255/Send-Attachments-using-MimeLite-and-NetSMTP
Send Attachments using Mime::Lite and Net::SMTP? - perldoc MIME::Lite, Net::SMTP