2011-12-15 4 views
0
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; 
} 

出力にはコンテンツヘッダーも表示されます。メッセージボディのコンテンツのみを配列にまとめるプロセスはありますか?MIME :: Parserを使用してメールから本文部分を取得するには?

ありがとうございます。

+0

なぜSTDINを$ MESSAGEに読みますか?なぜ$ parser-> parse(\\ * STDIN)ではないのですか? – runrig

答えて

3

my $body = $part->as_string;が間違っています。 MIMEパート($partはクラスMIME::Entityのインスタンスです)は、ヘッダーと本文とエピローグで構成されています。

my @body_encoded_lines = $part->body(行のリスト)またはmy $body_decoded_handle = $part->bodyhandle(例:​​)のいずれかにする必要があります。

関連する問題