gpt4 book ai didi

Perl 解析多部分/替代电子邮件

转载 作者:行者123 更新时间:2023-12-01 04:41:58 26 4
gpt4 key购买 nike

我正在寻找一种方法来解析多部分/替代电子邮件的正文部分。我目前有一个使用 Email::Mime 模块的 perl 脚本,它可以正确解析 text/plain 和 text/html。虽然我遇到的问题是当我解析多部分/替代电子邮件时 $part->body 总是返回空。我已经尝试使用 $part->body_raw 并且它确实返回了文本正文,尽管它包含我需要省略的标题。

使用 $part->data_raw 的当前输出

--_000_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Text Body

期望的输出

Text Body

PERL代码

my ( $body, $text_body, $html_body, $multi_body );
for my $part (@parts) {

if ( $part->content_type =~ m!text/html! ) {
my $hs = HTML::Strip->new( emit_spaces => 0 );
$html_body .= $hs->parse( $part->body );
print "Found HTML\n";
}
elsif ($part->content_type =~ m!text/plain!
or $part->content_type eq '' )
{

$text_body .= $part->body;
print "Found TEXT\n";
}
elsif ($part->content_type =~ m!multipart/alternative!
or $part->content_type eq '' )
{
print "Found Multipart\n";
$multi_body .= $part->body;

}

来源

Content-Type: multipart/related;
boundary="_004_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_";
type="multipart/alternative"
MIME-Version: 1.0

--_004_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_
Content-Type: multipart/alternative;
boundary="_000_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_"

--_000_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Test Body

最佳答案

多部分包含多个部分。遍历它们:

use strict;
use warnings;
use Email::MIME;
use Data::Printer;
use feature qw/say/;

my $source = <<EOF;
Content-Type: multipart/related;
boundary="_004_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_";
type="multipart/alternative"
MIME-Version: 1.0

--_004_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_
Content-Type: multipart/alternative;
boundary="_000_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_"

--_000_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Test Body
EOF

my $msg = Email::MIME->new($source);

for my $part ($msg->parts) {
if ($part->content_type =~ m!multipart/alternative!
or $part->content_type eq '' )
{
say "Found Multipart";
for my $subpart ($part->parts) {
say $subpart->body;
}
}
}

输出:

C:\>perl test_mime.pl 
Found Multipart
Test Body

关于Perl 解析多部分/替代电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23471674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com