mbox形式からメール本文と添付ファイルを抜く

#!/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);
    
    # body を保存する
    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/