use strict; use warnings; use Mail::MboxParser; use Storable; my $mbox = shift; # name of the mailbox file my $mb = Mail::MboxParser->new( $mbox ); $mb->make_index; my @index; # Build index. I'm adding message position and subject # into index, but you can add also other fields. for ( 0 .. $mb->nmsgs - 1 ) { push @index, [ $_, $mb->get_pos($_), $mb->get_message($_)->header->{subject} ]; } # save index into file store \@index, "$mbox.idx"; #### use strict; use warnings; use Mail::MboxParser; use Storable; my $mbox = shift; my $num = shift; # loading index my $index = retrieve("$mbox.idx"); unless (defined $num) { # print index print join(" => ", @$_), "\n" for @$index; } else { # print message $num die "No such message" if $num >= @$index; my $mb = Mail::MboxParser->new( $mbox ); $mb->set_pos($index->[$num][1]); print $mb->next_message_old; }