The Mail::MboxParser
module offers a nice interface to achieve this.
MIME::Parser
is one of the most robust mail parsing moudles that you may also want
to consider, but it has a steep learning curve in my opinion.
Update As valdez
points out you will need something like Mail::POP3Client to get the
mails, I misread your post and thought for some strange reason you
already had the messages locally.
| [reply] |
| [reply] |
This
script should do what you want. I looked at several modules trying to
find one that does everything, but lately I find that most mail related
modules do one or two very specific things well, but for anything but
the simplest tasks end up using more than one to get the job done. In
this case, Mail::POP3Client is a good POP3 access tool but MIME::Parser
is hard to beat for saving attachments to disk:
#!/usr/local/bin/perl
use strict;
use warnings;
use Mail::POP3Client;
use MIME::Parser;
my $pop = new Mail::POP3Client(
USER => "user",
PASSWORD => "password",
HOST => "pop3.server"
);
## for HeadAndBodyToFile() to use
my $fh = new IO::Handle();
## Initialize stuff for MIME::Parser;
my $outputdir = "./mimemail";
my $parser = new MIME::Parser;
$parser->output_dir($outputdir);
my $i;
## process all messages in pop3 inbox
for ($i = 1; $i <= $pop->Count(); $i++) {
open (MAILOUT, ">pop3.msg$i");
$fh->fdopen( fileno( MAILOUT ), "w" );
## write current msg to file
$pop->HeadAndBodyToFile( $fh, $i );
close MAILOUT;
## MIME::Parser handles only one msg at-a-time
open (MAILIN, "<pop3.msg$i");
## flush all attachments this msg to ./mimemail dir using internal
+filename
my $entity = $parser->read(\*MAILIN);
close MAILIN;
}
BTW, this was done hastily and could use more error testing, could
probably be done more simply/elegantly, but I leave that for the poster.
Does anyone know how to read the messages directly to MIME::Parser
without having to write the intermediate files first? I've encountered
this dilemma recently trying to combine other unrelated mail modules.
--Jim | [reply] [d/l] |
This works too and is a bit simpler.
for ($i = 1; $i <= $pop->Count(); $i++) {
print "$i \n";
my $msg;
$msg = $pop->HeadAndBody( $i );
my $entity = $parser->parse_data($msg);
}
| [reply] [d/l] |
Thansk guys,
I've got it up and working now with the library you recommended!
Ta
TT |