我正在尝试使用Email :: MIME解析多部分/混合的电子邮件。我可以将其用于许多类型,但是无法弄清楚为什么它不能正确检测到这种类型。
我有一个脚本可以成功处理多种类型的电子邮件,但是这种特定类型的电子邮件不起作用。它失败并显示为“无法将主体作为多部分/混合的字符串;”
我想要的大部分实际内容都在文本/纯文本部分中,但是在此之前,它似乎在多部分/混合部分上令人窒息。
由于我也希望脚本能够处理具有不同编码的电子邮件,所以我也想拥有一个if / else来尝试对所有不同类型的邮件进行解码,并能够确定其中最重要的部分每封电子邮件。
我相信我的排序正确,但是仍然无法解码出现在多部分/混合部分之前的文本/普通部分。
my @mailData;
my $msg = Email::MIME->new($buf);
$msg->walk_parts(sub {
my ($part) = @_;
warn($part->content_type . ": " . $part->subparts);
if (($part->content_type =~ /text\/plain$/i) && !@mailData) {
#print $part->body;
@mailData = split( '\n', $part->body_str);
}
elsif (($part->content_type =~ m/multipart\/mixed\;/i) && !@mailData) {
print $part->body;
@mailData = split( '\n', $part->body_str);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?utf-8\"?/i) && !@mailData) {
#print $part->body;
@mailData = split( '\n', $part->body_str);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?us-ascii\"?/i) && !@mailData) {
#print $part->body;
@mailData = split( '\n', $part->body_str);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?windows-1252\"?/i) && !@mailData) {
#print $part->body;
@mailData = split( '\n', $part->body_str);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?iso-8859-1\"?/i) && !@mailData) {
print $part->body;
@mailData = split( '\n', $part->body_str);
} else { print "failed: $subject\n"; exit 0; }
});
当我向其传递完整的电子邮件时,它会打印:
Email::MIME::body_str(Email::MIME=HASH(0x55dccceb9510)) called at alert11a.pl line 157
main::__ANON__(Email::MIME=HASH(0x55dccceb9510)) called at /usr/share/perl5/vendor_perl/Email/MIME.pm line 845
Email::MIME::__ANON__(Email::MIME=HASH(0x55dccceb9510)) called at /usr/share/perl5/vendor_perl/Email/MIME.pm line 875
Email::MIME::walk_parts(Email::MIME=HASH(0x55dccceb9510), CODE(0x55dcccf101a0)) called at alert11a.pl line 175
multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="n1iI6MeELQa9IOaF"text/plain; charset="utf-8"
我还尝试了几种方法来打印电子邮件的所有子部分,但是“ warn($ part-> content_type。“:”。$ part-> subparts);“似乎对此感到窒息。
在这里,就像我在视觉上看到的一样:
Content-Type: multipart/mixed; boundary="===============0130613217382308956=="
--===============0130613217382308956==
Content-Type: multipart/signed; micalg=pgp-sha512;
protocol="application/pgp-signature"; boundary="n1iI6MeELQa9IOaF"
Content-Disposition: inline
--n1iI6MeELQa9IOaF
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
--n1iI6MeELQa9IOaF
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEpgY7tWAjCaQ8jrvULwmejQBegfQFAlzbUr0ACgkQLwmejQBe
gfQbvQ//RvytLvg0+M2YxHs7Pnw0etafzK7NcQ5mSH9V+WYNXCLCs9aOdYbS8JvA
...[trimmed]
--===============0130613217382308956==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline
LS0gCnVidW50dS1zZWN1cml0eS1hbm5vdW5jZSBtYWlsaW5nIGxpc3QKdWJ1bnR1LXNlY3VyaXR5... [trimmed]
如有必要,我可以提供整个电子邮件的链接