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

Posted

技术标签:

【中文标题】使用 MIME::Parser 拆分电子邮件【英文标题】:Splitting Emails with MIME::Parser 【发布时间】:2015-05-09 11:53:06 【问题描述】:

我收到了 4GB 的电子邮件连接到一个文件中,并建议 MIME::Parser 可以将单个电子邮件再次拆分出来。我所有的约会尝试都以解析器仅复制原始文件而不提取任何电子邮件而告终。那么:这甚至是 MIME::Parser 可以处理的事情吗?我的代码非常基础:

my $file = IO::File->new("somefile", O_RDONLY);
my $parser = new MIME::Parser;
$parser->output_dir("somedir");
my $entity = $parser->parse($file);
$file->close;

以下是一些人要求的示例日期的链接。 这是所有垃圾邮件和网络钓鱼电子邮件。不要点击任何链接。享受:Pastbin of 4KB of emails.

【问题讨论】:

显示您的一些文件?可能是第一条和第二条消息的前几行和最后几行? 这是一次性的吗?如果是这样,您最好手动完成。如果不是,是什么软件把它变成这种格式的? 手工是不可行的。源文件大小为 4GB,因此我预计大约有 300,000 多封电子邮件。 查看提供的数据,这根本不是任何格式,它只是串联在一起的电子邮件 - 这意味着没有可靠的方法将它们再次分开。您将能够做的最好的事情是寻找 Received: 尽可能严格的模式(这会弄乱任何包含该模式作为内容的一部分的电子邮件,并留下任何可能在收到之前作为一部分的标题上一条消息) @ysth:昨晚我确实参加了“收到:来自”的拆分。它在一定程度上起作用,但最终会停止。我会尝试改进正则表达式,看看是否有帮助。我很犹豫是否要继续窃听数据的来源,因为他们正在从工作日抽出时间来提供数据。但这可能是唯一的解决方案。 【参考方案1】:

MIME::Parser 用于读取单个邮件以获取附件等。它可用于提取作为message/rfc822 附加在另一封邮件中的邮件,但不用于从某种存档中提取邮件里面有很多邮件串联起来。

目前尚不清楚您的单个邮件文件具有什么格式。但如果它来自 UNIX 系统或 Thunderbird 安装,它可能只是经典的Mbox 格式,并且有多种工具可以将 Mbox 文件拆分为单独的消息。除了several perl modules,还有git-mailsplit等其他工具可以帮助您从Mbox-format中提取邮件。

【讨论】:

显然该文件不是 Mbox 格式。我使用 Mail::Mbox::MessageParser 但我收到“不是邮箱”错误。 所以您要求我们帮助从某种未知格式获取邮件,甚至没有描述格式或给出示例。我不认为我们可以帮助你很多。 所有示例电子邮件都是恶意的。我按照上面的链接复制了一些到 Pastebin。

以上是关于使用 MIME::Parser 拆分电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

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

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

只获取 MIME 电子邮件的“文本/纯文本”部分

TOM随心邮——一款好用的移动办公利器

南邮数据结构考试时间

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