http://search.cpan.org/~markov/Mail-Box/
http://quark.humbug.org.au/publications/perl/perlmailbox.html
Perl provides a number of interfaces to mailbox folders of which Mail::Box is but one. This article will cover the basic use of it and show how to open a mailbox folder, be it a flat file or over POP or IMAP, and how to manipulate the messages inside.
Modules
First you need to import the required modules - in most cases this will be sufficient:use Mail::Box::Manager;
Opening Mailboxes
This section will cover how to open mailboxes of 3 different formats - mbox, POP and IMAP.Mbox Format
To open a mbox folder, simply do the following:my $mailspool = "/var/spool/mail/username"; my $mgr = Mail::Box::Manager->new; my $folder = $mgr->open(folder => $mailspool);
POP3
There are two ways to open a POP folder, as follows:my $url = 'pop3://user:password@pop.example.com'
my $pop = Mail::Box::POP3->new($url);
my $mgr = Mail::Box::Manager->new;
my $pop = $mgr->open(type => 'pop3',
username => 'myname',
password => 'mypassword',
server_name => 'pop.example.com');
IMAP4
IMAP folders are opened similarly to POP, as follows:my $imap = Mail::Box::IMAP4->new(username => 'myname',
password => 'mypassword',
server_name => 'imap.example.com');
my $url = 'imap4://user:password@imap.example.com');
my $mgr = Mail::Box::Manager->new;
my $imap = $mgr->open($url);
Manipulating Folders
To find out the name of the folder you're accessing, simple do the following:$name = $folder->name;To check the number of messages in the folder, just:
my $emails = $folder->messages;To loop over each message simply call the messages subroutine in array context, like so:
foreach $msg ($folder->messages) { # all messages
# Do something with $msg
}
To extract basic information from a message, such as subject,
to, from and the body, simply use the following:
my $subject = $msg->subject; my @to = $msg->to; my $from = $msg->sender->address; my $body = $msg->decoded;The array returned from the to subroutine consists of Mail::Address objects. To pull the actual address out of it, something like the similar will do:
foreach $to (@to) {
print "to = ".$to->format."\n";
}
沒有留言:
張貼留言