如何按时间顺序重新排序mbox文件?

时间:2008-12-15 10:51:39

标签: python email sorting mbox

我有一个使用evolution创建的单个假脱机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等。

3 个答案:

答案 0 :(得分:10)

这是你在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()

答案 1 :(得分:1)

如果使用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)

所以有两个错误:

  1. 序列'时间年'被打入 '年度'
  2. GMT的额外垃圾 信息以及时区名称
  3. 由于Python的mailbox.py/UnixMailbox具有用于'from'行匹配的硬编码regexp,因此无法解析某些消息。

    我向作者写了错误信息,但有很多错误输入的信息:(。

答案 2 :(得分:-3)

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