解析损坏的多部分/混合电子邮件

问题描述 投票:0回答:1

我正在尝试使用 perl Email::MIME 将电子邮件的多部分/混合部分捕获到缓冲区中。我有一个已经使用了很长时间的脚本,现在在处理特定电子邮件时出现问题,我认为这是因为该电子邮件的格式不正确。

use Email::MIME;
my $buf;
while(<STDIN> ){
        $buf .= $_;
}
my @mailData;
my $msg = Email::MIME->new($buf);
my @parts = $msg->parts;
my $desc = $msg->debug_structure;
print "descr: $desc\n";
 $msg->walk_parts(sub {
     my ($part) = @_;
     #warn($part->content_type . ": " . $part->subparts);
     my $content_type = $msg->content_type;
     if (($content_type =~ m/multipart\/mixed/i) && !@mailData) {
             @mailData = split( '\n', $part->body);
        print $part->body;
     }
     elsif (($part->content_type =~ m/text\/plain$/i) && !@mailData) { 
        @mailData = split( '\n', $part->body);
     }
 });

以下是电子邮件的相关部分,与显示的完全相同,包括两个连字符线:

Content-Type: multipart/mixed; boundary="===============7958309719180706421=="
Content-Length: 8034
Status: RO
X-Status: 
X-Keywords: NonJunk         
X-UID: 2

--===============7958309719180706421==

--------------------------------------------------------------------------------
Sending command: "Execute SMART Extended self-test routine immediately in off-line 
Drive command "Execute SMART Extended self-test routine immediately in off-line
    
--------------------------------------------------------------------------------

system security tool that allows system administrators to set authentication
policy without having to recompile programs that handle authentication.

上面的代码将正文添加到@mailData,但仅添加第二行连字符之后的文本。它只是完全跳过它,只收集以“系统安全工具”开头的文本。

它还打印显示部件的描述:

descr: + multipart/mixed; boundary="===============7958309719180706421=="
     + 
     + text/plain; charset="utf-8"

电子邮件客户端中显示的文本/纯文本部分似乎只是邮件列表信息,而不是实际的正文内容。

这是 Email::MIME 中的错误吗?还是我没有正确处理零件?

编辑:这是完整原始电子邮件的链接 https://pastebin.com/F5MbSfYm

perl email parsing mime
1个回答
0
投票

这对我来说就像是 Email::MIME 的问题,而且也是邮件本身的问题:

  • 第一个 MIME 部分没有 MIME 标头,因此应该是带有 US-ASCII 的文本/纯文本(请参阅 RFC 2046) - 但它显然是 utf-8。这是邮件中的问题。
  • 看起来 Email::MIME 无法正确处理没有 MIME 标头的 MIME 部分。

后一个问题实际上已经存在 10 年了,并且提议的补丁似乎已经存在了 8 年 - 请参阅 https://github.com/rjbs/Email-MIME/issues/14

© www.soinside.com 2019 - 2024. All rights reserved.