如何按时间顺序对 mbox 文件重新排序?
题
我有一个使用 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 等。
解决方案
这是你如何能做到这一点在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()
其他提示
如果使用 Thunderbird 的 ImportExportTools 插件将邮件消息导入 mbox,Python 解决方案将无法工作。有一个错误:消息应以“from”行前缀,格式为:
From - Tue Apr 27 19:42:22 2010
但 ImportExportTools 前缀带有这样的 'from' 行:
From - Sat May 01 2010 15:07:31 GMT+0400 (Russian Daylight Time)
所以有两个错误:
- 序列“时间年”被分解为 “年时间”
- 格林威治标准时间的额外垃圾 信息以及时区名称
由于Python的mailbox.py/UnixMailbox对“from”行匹配进行了硬编码正则表达式,因此某些消息无法解析。
我把错误信息写给了作者,但是有很多错误导入的信息:(。
是什么在改写MBOX而加载了邮箱的时候,你可以重新排序邮件在内存中的点?这时间您要订购的吗?接收日期?发送日期?无论如何,所有用于与mbox档案播放拼音/ Python / Perl模块可以做到这一点。
不隶属于 StackOverflow