nvrslowdown has asked for the wisdom of the Perl Monks concerning the following question:

How do I sync the attachment and the body outputs from MIME::parser?

The bottomline is that I want to parse through dozens of emails and link up attachments to the corresponding parsed bodies of the email.

I can modify the name of the MIME::Parser body output but NOT the attachment output since the following does not sync with the attachment subentity:

$parser->output_prefix("$i___")

What do I do??? Thanks!!!

Here is my code:

#!/usr/bin/perl use strict; use warnings; use Mail::POP3Client; use MIME::Parser; my $pop = new Mail::POP3Client( USER => 'joeCool', PASSWORD => 'peanuts', HOST => 'pop.gmail.com', USESSL => 1 ); my $fh = new IO::Handle(); my $parser = new MIME::Parser; for (my $i = 1; $i <= $pop->Count(); $i++) { open (OUT, ">msg-$i.msg"); $fh->fdopen( fileno(OUT), "w" ); $pop->HeadAndBodyToFile( $fh, $i ); close OUT; $parser->output_prefix("$i___"); my $entity = $parser->parse_open("msg-$i.msg"); } $pop->close();

Replies are listed 'Best First'.
Re: mime::parser change attachment name
by Anonymous Monk on Jan 28, 2013 at 08:58 UTC

    The right way to do this is to write your own subclass of MIME::Parser::Filer and create a custom output_path function.

    An easier way might be to create a subdirectory for each email message, named, say, $i, and then use output_dir, like this

    mkdir($i); $parser->output_dir($i);

    before parsing the $i'th email message