The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/bin/perl
#
# multipart/* - handler for File::Unpack
#
# 2012 (C) jw@suse.de, distribute under GPLv2
#
# my russian test.mht example uses \r\n to seperate header from body.
# Not sure if it is valid, but we should handle that correctly.

use MIME::Parser;
use Data::Dumper;

my $from = shift || die "usage: $0 INPUTFILE [OUTDIR]\n";
my $outdir = shift || "multipart_dir";

my $parser = new MIME::Parser;
$parser->output_under($outdir);
# $parser->output_dir($outdir);
# $parser->tmp_dir($outdir)
$parser->output_prefix("msg");

### Automatically attempt to RFC 2047-decode the MIME headers?
$parser->decode_headers(0);             ### default is false, not advisable

### Parse contained "message/rfc822" objects as nested MIME streams?
$parser->extract_nested_messages(1);    ### default is true

### Look for uuencode in "text" messages, and extract it?
$parser->extract_uuencode(1);           ### default is false

### Should we forgive normally-fatal errors?
$parser->ignore_errors(1);              ### default is true

### Ultra-tolerant mechanism:
my $entity = eval { $entity = $parser->parse_open($from) };
my $error = ($@ || $parser->last_error);

$entity->dump_skeleton;          # for debugging

die Dumper $entity, $error;