这是我的脚本:
package RFC2822;
use strict;
use Mail::Message;
sub _findTextOrHTMLPart {
my ( $obj ) = @_;
my $msg;
if ( !$obj->isMultipart ) {
$msg = $obj->body->decoded();
$msg =~ s/(<[^<]+>)//g if ($obj->head->get('Content-Type') && lc($obj->head->get('Content-Type')) == "text/html");
$msg =~ s/$(\s*\n)+/\n/g;
return $msg;
}
else {
for (0..$obj->body->parts) {
$msg = _findTextOrHTMLPart( $obj->body->part($_) );
return $msg if $msg;
}
}
return "error";
}
sub parse {
my ( $rfc2822 ) = @_;
my $obj = Mail::Message->read( $rfc2822 );
return { "subject" => $obj->subject , "text" => _findTextOrHTMLPart( $obj ) };
}
1;
但是,它没有正确解析数据(在这个例子中,我使用了带有主题和正文的 html 消息,这个脚本通常必须解析电子邮件的所有部分,以便将其插入到带有其他脚本的数据库中。这是解析:
$VAR1 = {
'text' => bless( {
'MMB_end' => 1656,
'MR_log' => 4,
'MMB_description' => bless( [
'Content-Description',
' none
'
], 'Mail::Message::Field::Fast' ),
'MMB_transfer' => bless( [
'Content-Transfer-Encoding',
' none
'
], 'Mail::Message::Field::Fast' ),
'MMB_begin' => 1656,
'MMB_disposition' => bless( [
'Content-Disposition',
' none
'
], 'Mail::Message::Field::Fast' ),
'MMB_message' => undef,
'MMBL_array' => [],
'MMB_type' => bless( [
'Content-Type',
' text/plain
'
], 'Mail::Message::Field::Fast' ),
'MMB_eol' => 'NATIVE',
'MMB_id' => bless( [
'Content-ID',
' none
'
], 'Mail::Message::Field::Fast' ),
'MMB_checked' => 0,
'MMB_seqnr' => 0,
'MR_trace' => 4,
'MMB_modified' => 0
}, 'Mail::Message::Body::Lines' ),
'subject' => ''
};
任何人都可以帮助我吗?
谢谢。