Как получить часть тела из почты, используя MIME :: Parser? - PullRequest
0 голосов
/ 15 декабря 2011
use MIME::Parser;
use Data::Dumper qw(Dumper);

$parser = MIME::Parser->new( );
$parser->output_to_core(1); # don't write attachments to disk

while (<STDIN>) {
$MESSAGE .= $_;
}

$message = $parser->parse_data($MESSAGE); # die( )s if can't parse

$head = $message->head( ); # object--see docs
$preamble = $message->preamble; # ref to array of lines
$epilogue = $message->epilogue; # ref to array of lines

$num_parts = $message->parts;
for (my $i=0; $i < $num_parts; $i++) {
    print "part number = $i\n";
    my $part = $message->parts(1);
    my $content_type = $part->mime_type;
    my $body = $part->as_string;
    print $body;
}

В выводе я также вижу заголовки контента.У нас есть какой-нибудь процесс, чтобы в массиве содержалось только содержимое тела сообщения?

заранее спасибо.

1 Ответ

3 голосов
/ 15 декабря 2011

my $body = $part->as_string; неверно.Часть MIME ($part является экземпляром класса MIME :: Entity ) состоит из заголовков, основного текста и эпилога.

Вместо этого должно быть либо my @body_encoded_lines = $part->body (список строк)) или my $body_decoded_handle = $part->bodyhandle (экземпляр MIME :: Body ).

...