读书人

怎样从body中提取邮件正文

发布时间: 2012-03-27 13:44:24 作者: rapoo

求教:怎样从body中提取邮件正文?
现在想用perl写个pop取信的小程序
用Net::POP3模块可以得到邮件的body
但是邮件正文不知道怎么提取出来
似乎不同的邮件工具生成的body的格式都不一样
请教各位大虾该怎么办?CPAN上有没有现成可用的module?


[解决办法]
#!/usr/bin/perl -w

use strict;

use Net::POP3;
use MIME::Entity;
use MIME::Parser;
use MIME::Parser::Filer;
use MIME::Head;
use MIME::Body;
use MIME::Tools;


my $file = '/home/admin/test.eml ';
my $outputDir = '/tmp/ ';

open F,$file or die "can 't open $file!\n ";

my $parser =new MIME::Parser;

if(!$parser-> output_dir($outputDir))
{
print "output_dir error\n ";
}

my $entity = $parser-> parse(\*F);

$entity-> head-> decode();

my $filer = $parser-> filer;
my $emap = $filer-> output_type_ext;

print "From = ",$entity-> head-> get( 'From '), "\n ";
print "Subject = ",$entity-> head-> get( 'Subject '), "\n ";
print "To = ",$entity-> head-> get( 'To '), "\n ";
print "MIME type = ",$entity-> mime_type, "\n ";
print "parts = ",scalar $entity-> parts, "\n ";

my $numparts = $entity-> parts;
if (!$numparts)
{

#$entity-> print_body();
my $body = $entity-> bodyhandle();
my $content = join( " ", $body-> as_lines);
$content = htmlspecialchars($content);
print $content;
print "---------------------------------------\n ";
$body-> purge;

}
else
{
my $part_ent = $entity-> parts(0);
if ($part_ent-> parts)
{
$part_ent = $part_ent-> parts(0);
}
my $body = $part_ent-> bodyhandle();
my $content = join( " ", $body-> as_lines);
my $path = $body-> path();
print "path : " , $path , "\n ";
$content = $content;
print $content;
print "-------------------------------------------\n ";
}

for my $part ($entity-> parts)
{
my $body = $part-> bodyhandle();
my $path = ' ';
if($body)
{
$path = $body-> path();
}
else
{
$path = ' ';
}
my $ext = $emap-> {$part-> mime_type} || ' ';
my $partFileName = $path.$ext;
if($ext eq '.jpg ')
{
open(FH1, "> $partFileName ");
binmode(FH1);
print FH1 join( ' ',$body-> as_lines);
close FH1;
}
print $path.$ext. "\n ";
}

$entity-> purge();

这是一个例子 看看就会了

读书人网 >perl python

热点推荐