MIME::Parser 无法正确解析多部分/混合部分

Posted

技术标签:

【中文标题】MIME::Parser 无法正确解析多部分/混合部分【英文标题】:MIME::Parser fails to parse multipart/mixed parts correctly 【发布时间】:2011-11-10 17:38:33 【问题描述】:

我有一个服务器向我发送此响应。然而,使用下面的代码,我最终得到了一个实体,它不包含边界(包括边界)之间的任何部分和所有内容,作为 MIME::Body。除了实现我自己的多部分解析器(通常可能有更多部分)和废弃应该为我做的模块之外,我还能做些什么吗?

#!/usr/bin/perl

use MIME::Parser;

my $response = <<_EOF;
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: multipart/mixed; boundary="be4dc417ebd640944ab26f033e5ea1ab"

--be4dc417ebd640944ab26f033e5ea1ab
Content-Type: application/json

"a":"b"
--be4dc417ebd640944ab26f033e5ea1ab--
_EOF

my $mime_parser = new MIME::Parser;
$mime_parser->tmp_to_core(1);
$mime_parser->output_to_core(1);
my $entity = $mime_parser->parse_data($response);

print "$MIME::Parser::VERSION $^V $^O\n\n";
$entity->print(\*STDOUT);
print "\n\n";
print $entity->parts(0)->bodyhandle->as_string;

输出:

5.502 v5.10.1 MSWin32


--be4dc417ebd640944ab26f033e5ea1ab
Content-Type: application/json

"a":"b"
--be4dc417ebd640944ab26f033e5ea1ab--


Can't call method "bodyhandle" on an undefined value at test.pl line 25.

【问题讨论】:

对我来说,$entity-&gt;parts(0) 返回一个 MIME::Entity 实例,其主体仅为"a":"b",因此发布一个可独立运行的完整程序以正确演示您的问题。 --$entity-&gt;bodyhandle-&gt;as_string抛出错误Can't call method "as_string" on an undefined value,这是一个编程错误,你要$entity-&gt;parts(0)-&gt;bodyhandle-&gt;as_string 嗯。明天会检查我的版本并发布完整的程序。 【参考方案1】:

HTTP/1.1 200 OK 行不是 MIME 响应的一部分。拿出来就可以了。

【讨论】:

以上是关于MIME::Parser 无法正确解析多部分/混合部分的主要内容,如果未能解决你的问题,请参考以下文章

使用 MIME::Parser 拆分电子邮件

如何编写多部分 MIME 混合消息以在 Outlook 中正确显示

我可以将 S/MIME 作为多部分/混合消息的一部分吗?

在 ./MIME/Parser/Filer.pm 第 365 行调用未定义的子例程 utf8::SWASHGET

Perl 解析 Outlook 收件箱中的电子邮件和附件

PHP pdf 电子邮件附件,内容类型:多部分/混合,html 消息未显示