- my ($email,%param) = @_;
-
- # output needs to have the is_utf8 flag on to avoid double
- # encoding
- my $output = decode_utf8('');
- my $parser = MIME::Parser->new();
- # Because we are using memory, not tempfiles, there's no need to
- # clean up here like in Debbugs::MIME
- $parser->tmp_to_core(1);
- $parser->output_to_core(1);
- my $entity = $parser->parse_data( $email);
+ my ($record,%param) = @_;
+
+ my $output;
+ my $output_fh = globify_scalar(\$output);
+ my $entity;
+ my $tempdir;
+ if (not blessed $record) {
+ my $parser = MIME::Parser->new();
+ # Because we are using memory, not tempfiles, there's no need to
+ # clean up here like in Debbugs::MIME
+ # this will be cleaned up once it goes out of scope
+ $tempdir = File::Temp->newdir();
+ $parser->output_under($tempdir->dirname());
+ if ($record->{inner_file}) {
+ $entity = $parser->parse($record->{fh}) or
+ die "Unable to parse entity";
+ } else {
+ $entity = $parser->parse_data($record->{text}) or
+ die "Unable to parse entity";
+ }
+ } else {
+ $entity = $record;
+ }