X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FMIME.pm;fp=Debbugs%2FMIME.pm;h=8644c359695db3a332346900c11e9a59e8f2bfff;hb=53c435119200ab9b1c2538a96b8374c51a078855;hp=1d8fcb57e2a3c633e8cf86d2bab484ca9c0e5f04;hpb=0e8f07fda6e40b5967d9c6b28b3200db22766343;p=debbugs.git diff --git a/Debbugs/MIME.pm b/Debbugs/MIME.pm index 1d8fcb5..8644c35 100644 --- a/Debbugs/MIME.pm +++ b/Debbugs/MIME.pm @@ -41,7 +41,9 @@ BEGIN { @EXPORT = (); - %EXPORT_TAGS = (mime => [qw(parse create_mime_message getmailbody)], + %EXPORT_TAGS = (mime => [qw(parse create_mime_message getmailbody), + qw(parse_to_mime_entity), + ], rfc1522 => [qw(decode_rfc1522 encode_rfc1522)], ); @EXPORT_OK=(); @@ -88,6 +90,43 @@ sub getmailbody return undef; } +=item parse_to_mime_entity + + $entity = parse_to_mime_entity($record); + +Returns a MIME::Entity from a record (from Debbugs::Log), a filehandle, or a +scalar mail message. Will die upon failure. + +Intermediate parsing results will be output under a temporary directory which +should be cleaned up upon process exit. + +=cut + +sub parse_to_mime_entity { + my ($record) = @_; + my $parser = MIME::Parser->new(); + my $entity; + # this will be cleaned up once we exit + my $tempdir = File::Temp->newdir(); + $parser->output_dir($tempdir->dirname()); + if (ref($record) eq 'HASH') { + 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"; + } + } elsif (ref($record)) { + $entity = $parser->parse($record) or + die "Unable to parse entity"; + } else { + $entity = $parser->parse_data($record) or + die "Unable to parse entity"; + } + return $entity; +} + sub parse { # header and decoded body respectively