mbox ファイルを時系列に並べ替えるにはどうすればよいですか?
質問
私は、Evolution で作成された 1 つのスプール 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)
したがって、2 つのエラーがあります。
- シーケンス「年」に分かれた「年度」に分かれています
- タイムゾーン名とともにGMT情報を備えた余分なゴミ
Python の mailbox.py/UnixMailbox には、「from」行と一致する正規表現がハードコーディングされているため、一部のメッセージは解析できません。
エラーメッセージを作者に書きましたが、誤ってインポートされたメッセージがたくさんあります:(。
メールボックスをロードするときは、メモリ内のメールを並べ替えることができ、一方、mbox形式の書き換えのポイントは何ですか?あなたが注文したい一つは時間ですか?日付を受信しますか?送信日?とにかく、mboxesで再生するためのすべてのRuby / Pythonの/ Perlモジュールは、それを行うことができます。