Archivemailを用いたメールボックスの清掃法

 今日、複数のメールアカウントを使っている人間も多いと思うが、自分で管理すべきメールボックスに、2度と開封することのない多量のメッセージを溜め込んだままにしてはいないだろうか。特に管理者アカウント宛に届けられるのは、自動送信されるイベント類の定期通知メールが多く、こうしたものは目を通すことがあるとしても、せいぜい1度だけ開いて終わるのが関の山のはずだ。こうした不要メッセージの山を手軽に処分したいと思うなら、本稿で紹介する archivemail というツールの使用を検討すべきだろう。ここで行われるアーカイブ化処理は、ディスクスペースの空き容量を増やすと同時に、メールクライアントのパフォーマンス向上にも貢献するはずだ。

 archivemailの入手法に関しては、たいていのディストリビューションのソフトウェアリポジトリに収録されているが、ソースのtarボールを入手して自力でインストールすることもできる。なお同プロジェクトのWebサイトにアクセスしてみると、1年前にリリースされたarchivemail-0.7.2が最新バージョンとされているが、これは開発活動の中止を意味している訳ではなく、開発サイドの説明によると現在は次バージョンのリリースに向けて、新機能の追加、バグの修正、コードのスリム化といった作業が進行中とのことだ。

 archivemailの場合、IMAP、mbox、MH、Maildirフォーマットのメールボックスをサポートしている。そしてarchivemailで処理するメールボックスについては、その正確なパスを指定しなくてはならない。例えばメールクライアントとしてEvolutionを使用しているなら~/.evolution/mail/local/Inbox.sbd/が、同じくThunderbirdの場合は~/.mozilla-thunderbirdにあるディレクトリが、デフォルト設定下のメールボックス用に使われているはずだ。ただし実際のメールボックスの格納位置は、メールクライアントの種類だけでなく各自のユーザ設定でも異なってくるものだが、デフォルト設定として各ユーザのhomeディレクトリの下層に置かれるケースが多いことは憶えておいても損はしないだろう。いずれにせよ、archivemailを使用する際にはメールボックスの正確なフルパス指定が必要となるが、これを省略してメールボックスの名前だけを入力することも可能で、その場合はカレントディレクトリが適用されることになる。

 メールボックスを指定したarchivemailをデフォルト設定下で実行すると、180日以上経過したすべてのメッセージが自動的にアーカイブ化される。この経過日数は-dコマンドオプションにより変更でき、こうしたオプション類は「archivemail options mailbox 」という構文で指定すればいい。例えば「archivemail -d 40 trip」を実行すると、指定メールボックスのtrip中にて受信後40日以上経過したメッセージ群を圧縮したファイルがtrip_archive.gzという名称で作成される。そして、ここでアーカイブ化対象となったメッセージ群は、メールボックスから自動的に削除されるようになっているのだ。

 同様に-Dオプションを用いると、先のような経過日数ではなく、明示的な日付指定によるarchivemailの制御もできる。例えば先のtripメールボックスにて2008年7月4日(July 4, 2008)以前のメッセージ群をアーカイブ化したければarchivemail -D '4 Jul 2008' tripと指定すればいい。

 こうした日付指定は、先のようなフォーマット以外にも’2008-07-04’や’4 July 2008’という表記が利用できる。その際の注意点としては、一重引用符で囲むことと、年の数字を4桁のフル表記にすることだ(archivemailは2桁の年表記は扱えない)。こうしたコマンドラインオプションの使い方に不慣れなうちは、-nというコマンドオプション指定でarchivemailを実行させてみればいいだろう。この-nオプションを付けた場合のarchivemailは、対象となるファイルを実際に処理する代わりに“当該オプションの指定下ではどのような処理が行われるか”という情報を表示してくれるのだ。以下の出力はこうしたドライランモードにて、10月20日(20 October)以前のメッセージを処理させるよう指定した結果である。

$ archivemail -D '20 Oct 2008' -n trip:
trip:
    I would have archived 9 of 16 message(s) (1.2MB of 2.0MB) in 0.0 seconds

 デフォルト設定下のarchivemailは圧縮ファイルをメールボックスと同じディレクトリに作成するが、作成先をユーザ指定するには-oオプションを使用すればよく、例えば「archivemail -d 90 -o ~/mail-archives/ trip」というコマンドは、90日以上経過したメッセージ群を~/mail-archives/ディレクトリにアーカイブ化する。ただし指定された圧縮先ディレクトリが存在しなかった場合、archivemailからはエラーが出されるので、こうしたディレクトリは事前に用意しておかなくてはならない。

より高度なオプション指定

 archivemailにはより高度なオプション指定も用意されており、例えば、メールボックス中の未読メッセージは操作の対象外とする、指定サイズ以上のメッセージだけを圧縮対象とする、該当するメッセージ群を非圧縮モードでアーカイブ化する、といった追加オプションが利用できる。

 このうちメールボックス中の未読メッセージを除外させる指定は-uオプションにて行う。

 特定サイズ以上の巨大メッセージだけを圧縮対象とさせる指定は-Sオプションにて行う。例えば「archivemail -d 60 -S 2 trip」というコマンドは、受信後60日以上経過した中でサイズが2MB以上のメッセージだけをアーカイブ化させるという指定だ。

 あるいは、対象となるメッセージ群はアーカイブ化不要で削除だけを行いたいという場合は--deleteオプションを指定すればいい。つまり「archivemail -d 120 --delete trip」というコマンドは、受信後120日以上経過した全メッセージを対象に削除処理だけをしてくれるのだ。同様に、サイズが5MB以上のメッセージを削除だけさせるには「archivemail -S 5 --delete trip」というコマンド指定をすればいい。

 最後に残された、該当するメッセージ群を非圧縮モードでアーカイブ化させるという指定は--no-compressオプションにて行う。

 デフォルト設定下のarchivemailは圧縮モードでのアーカイブ化を施し、アーカイブ化された各ファイルにはmailbox_archive.gzという名称が付けられる。こうしたアーカイブ名については、-sオプションを用いることで、週、月、年の情報を追加させることもできる。例えばarchivemail -D '1 Jan 2008' -s _%Y tripというコマンド指定では、2008年1月1日(January 1, 2008)以前の全メッセージがアーカイブ化されるが、ここで作成されるアーカイブはtrip_2007.gzという名前とされるのだ。アーカイブ名にはその他の情報を追加させることも可能だが、その詳細についてはmanページを参照して頂きたい。

 当然ながら、こうしたarchivemailによるアーカイブ化や削除のプロセスも、cronジョブを用いた自動実行が行える。例えば、システムメッセージを月間ベースでアーカイブ化させるには、crontabに下記のようなエントリを追加すればいい。

0 0 1 * * archivemail -d10 /var/spool/mail/username

 これは毎月頭に、10日以上経過したメッセージをアーカイブ化させるためのコマンド指定だ。

 このようにarchivemailはシンプルなツールでありながら、所定の目的を過不足なくこなしてくれる。対象となるメッセージ群の指定に用いるパラメータの種類も充実しており、本来の機能であるメッセージ群のアーカイブ化や削除といった処理も、迅速かつ簡単に実行できるのだ。archivemailさえ用意しておけば、不要なメールメッセージの処分という分野において必要とされる作業の大部分に対処できるだろう。

Shashank Sharmaは、フリー/オープンソース系ソフトウェアの初心者向け記事の執筆およびLinux.comフォーラムボードの管理を行なっており、Apress社から刊行されている『Beginning Fedora』の共著者でもある。

Linux.com 原文(2008年11月13日)