5

我有一个使用evolution 创建的spool mbox 文件,其中包含一系列我希望打印的电子邮件。我的问题是电子邮件没有按时间顺序放入 mbox 文件中。我想知道使用 bash、perl 或 python 从头到尾排列文件的最佳方式。对于发给我的文件,我想按收到的方式订购,对于我发送的文件,我想按已发送的方式订购。使用maildir文件等可能更容易吗?

电子邮件目前以以下格式存在:

From x@blah.com Fri Aug 12 09:34:09 2005
Message-ID: <42FBEE81.9090701@blah.com>
Date: Fri, 12 Aug 2005 09:34:09 +0900
From: me <x@blah.com>
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: someone <someone@hotmail.com>
Subject: Re: (no subject)
References: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
In-Reply-To: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Status: RO
X-Status: 
X-Keywords:                 
X-UID: 371
X-Evolution-Source: imap://x+blah.com@blah.com/
X-Evolution: 00000002-0010

Hey

the actual content of the email

someone wrote:

> lines of quotedtext

我想知道是否有一种方法可以使用这些信息来轻松地重组文件,也许是使用 perl 或类似的。

4

3 回答 3

13

这就是你可以在python中做到的方式:

#!/usr/bin/python2.5
from email.utils import parsedate
import mailbox

def extract_date(email):
    date = email.get('Date')
    return parsedate(date)

the_mailbox = mailbox.mbox('/path/to/mbox')
sorted_mails = sorted(the_mailbox, key=extract_date)
the_mailbox.update(enumerate(sorted_mails))
the_mailbox.flush()
于 2008-12-15T11:27:26.260 回答
1

如果使用 Thunderbird 的 ImportExportTools 插件将邮件消息导入 mbox,则 Python 解决方案将不起作用。有一个错误:消息应在格式中以'from'行为前缀:

From - Tue Apr 27 19:42:22 2010

但是 ImportExportTools 前缀带有这样的“来自”行:

From - Sat May 01 2010 15:07:31 GMT+0400 (Russian Daylight Time)

所以有两个错误:

  1. 序列“时间年”分解为“年时间”
  2. 带有 GMT 信息和时区名称的额外垃圾

由于 Python 的 mailbox.py/UnixMailbox 为“发件人”行匹配硬编码正则表达式,因此某些消息无法解析。

我给作者写了错误信息,但是有很多错误导入的信息:(。

于 2010-05-01T11:35:32.217 回答
-3

重写 mbox 有什么意义,而您可以在加载邮箱时重新排序内存中的邮件?您想在哪个时间订购?收到日期?发送日期?无论如何,所有用于玩 mbox 的 Ruby/Python/Perl 模块都可以做到这一点。

于 2008-12-15T10:57:36.443 回答