要读取邮件,可以下载 Net::POP3 模组。
模组相关介绍以及下载地址: http://search.cpan.org/~gbarr/libnet-1.19/Net/POP3.pm
#!/usr/local/bin/perl #*********************************************************************** # [Author]:oscar999 # #*********************************************************************** use strict; use Net::POP3; our $mail_host = 'XXXXXXXX'; our $mail_login = 'XXXXXXXX'; our $mail_pass = 'XXXXXXXX'; my $pop = Net::POP3->new($mail_host) or die "Can't connect to $mail_host"; if($pop->login($mail_login,$mail_pass)>0) { my $msgnums = $pop->list; foreach my $msgnum (keys %$msgnums) { my $msg = $pop->get($msgnum); print($msgnum."\n"); print (@$msg); } } $pop->quit;
这里的$msgnums 是一个哈希表(hash)类型的数据。
key 值(对应上面的$msgnum)是没有删除的邮件的编号(形如 1, 2, ..... )
而对应的value(对应到上面的$msg) 是一个数组。包含了文件头和文件的内容。
my $msg = $pop->get(1); print (@$msg);如果取所有邮件较慢的话, 可以直接取一封邮件看看就知道了。
要详细的读取这份邮件的内容,可以使用 Mail::Message对上面的msg array 进行转型。
Mail::Message的下载和介绍:
http://search.cpan.org/~markov/Mail-Box-2.110/lib/Mail/Message.pod
实例:
my $msg = $pop->get(1); print (@$msg); my $mail_msg = Mail::Message->read($msg); my $subject = $mail_msg->subject; my $revtime = $mail_msg->timestamp; print("subject=$subject\n"); print("revtime=$revtime\n");
MIME::Lite 是比较早使用的Perl 发信的模块, 但是现在已经不推荐使用了。
官方的介绍是说: 此模块尚会更新一些小bug, 但是不会做大的重构, 推荐使用Email::MIME 或者 MIME::Entity 或者Email::Sender来发信。
不过此处还是介绍一下。
模块介绍与下载地址:
http://search.cpan.org/~rjbs/MIME-Lite-3.030/lib/MIME/Lite.pm
直接看示例:
#!/usr/local/bin/perl #*********************************************************************** # [Author]:oscar999 # #*********************************************************************** use MIME::Lite; $msg = MIME::Lite->new( From => '[email protected]', To => '[email protected]', Cc => '[email protected], [email protected]', Subject => 'Helloooooo, nurse!', Type => 'image/gif', Encoding => 'base64', Path => 'hellonurse.gif' ); $msg->send('smtp','some.host'); # host like smtp.xxxxx.xx
MIME::Lite->send('smtp', 'some.host', Timeout=>60); $msg define ................. $msg->send();
Email::MIME和Email::Sender 的模组地址是:
http://search.cpan.org/~rjbs/Email-MIME-1.925/lib/Email/MIME.pm
http://search.cpan.org/~rjbs/Email-Sender-1.300006/lib/Email/Sender.pm
1. 构造 Email Message
use Email::MIME; my $parsed = Email::MIME->new($message); my @parts = $parsed->parts; # These will be Email::MIME objects, too. my $decoded = $parsed->body; my $non_decoded = $parsed->body_raw; my $content_type = $parsed->content_type;
use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTP qw(); use Try::Tiny; try { sendmail( $message, { from => $SMTP_ENVELOPE_FROM_ADDRESS, transport => Email::Sender::Transport::SMTP->new({ host => $SMTP_HOSTNAME, port => $SMTP_PORT, }) } ); } catch { warn "sending failed: $_"; };