#!/usr/bin/perl
use strict;
use warnings;
use Mail::MboxParser;
use DateTime::Format::Mail;
my $mbox = $ARGV[0];
die unless ($mbox);
my $mb = Mail::MboxParser->new($mbox,
decode => 'ALL',
parseropts => {
enable_cache => 1,
cache_file_name => 'cache-file',
});
my $i = 1;
for my $msg ($mb->get_messages) {
my ($subject, $date, $dt, $prefix);
$subject = $msg->header->{subject};
$date = $msg->header->{date};
$dt = DateTime::Format::Mail->parse_datetime($date);
$date = $dt->ymd("");
mkdir "./$date" unless (-d "./$date");
$prefix = sprintf("%02d", $i);
open my $fh, '>', "./$date/${prefix}.txt" or die $!;
$msg->store_entity_body(0, handle => \*$fh);
close $fh;
if ($msg->get_attachments) {
$msg->store_all_attachments(path => "./$date", prefix => "${prefix}_");
}
$i++;
}
$ ./parse-mbox.pl mbox
$ ls -F
20100615/ 20100616/ 20100617/