发送邮件附件
23 March 2005
This post may be outdated due to it was written on 2005. The links may be broken. The code may be not working anymore. Leave comments if needed.
简单描述
如果仅仅只是发送不带附件的邮件,请参考如何用Net::SMTP发送邮件。这里使用 MIME::Lite 模块来发送附件。分为两种情况,一种是 SMTP 服务器不需要验证的,另一种是需要验证/auth 的。
情况一:SMTP 服务器不需要验证
这种情况下可以参考 perldoc MIME::Lite. 还有个更详细的例子在 Cooking with perl.一个简单的 Example:
use MIME::Lite;
my $msg = MIME::Lite->new(From => '[email protected]',
To => '[email protected]',
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 = '[email protected]'; # your email on that smtp host
my $to = '[email protected]'; # 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
blog comments powered by Disqus