トップ 最新

ただのにっき

2000-07-09(日) [長年日記]

procmail

IMAPを使っているのをいいことに(あんまし関係ないか)、メールはNetscapeに振り分けさせたあと、ほったらかし。さすがにメールボックスを開くのに時間がかかるようになったなー、と思ったら、多いもので3000〜4000通もたまっている。Maildir形式で保存しているので、この量になるとlsすらできなくなる(笑)。やばいって。やっぱ、日常的に使うメールボックスと、アーカイブ用のディレクトリを一緒にするのは無理があったということで、これをきちんとわけることに。

多いのはもっぱらメーリングリストのファイルなので、100通づつにわけることにしよう。通し番号の100番台を境目にしてディレクトリを掘り、1メール1ファイルで整理する。これはいずれNamazuで検索できるようにするため。問題はメールを「どうやって」入手して、「どのように」振り分けるか。

まず入手先は、受信と同時、というのが一番楽だろう。~/.qmailにはフィルタを書けるから、Maildirに入れるのと同時に、何らかの振り分け用プログラムに渡せばいい。ではそのプログラムだが。通し番号で分ける前に、メーリングリストの種別で分けなければならない。通し番号単位の振り分けはRubyで自作するとして、パターンによる振り分けはprocmail様にお任せするのがスジだよね。というわけで、メールの振り分け先を~/var/mailにするとして、~/var/mail/.procmailrcを作る。~/.qmailはこんな感じ:

./Maildir/
|procmail ./var/mail/.procmailrc

~/.procmailrcにしなかったのは、もっと賢いメーラーが手に入ったら、アーカイブ以外のメールもprocmailで振り分け用と考えているためである。まぁ、同じ用途なんだから、共通になるかも知れないけど、それは先の話。

qmail的にはprelineを通すのがスジらしいけど、別になくてもいい。あとは、標準入力から受けとった1通のメールを、Subjectの通し番号を元に適切なディレクトリに書き込むスクリプトを書くだけ。まぁ、簡単なプログラムなのでここには載せないが、仮にdispatchという名前にすると、.procmailrcはこんな感じ(例:Kondara-users.jaメーリングリスト):

:
0
* ^Subject: +\[Kondara-users.ja:[0-9]+\]
| dispatch Kondara-users.ja

これでメールを受信すると自動的に、保存されるようになるので、Maildirの方は好きなタイミングで削除しちゃっていいことになる。……あ、いままで溜まったメールも保存しておかなきゃ。lsできないってことは、findの出番かな。現在INBOX/Software/Kondaraという階層にメールを振り分けている場合、実際のディレクトリは~/Maildir/.Software.Kondara/curになるので:

export MAILDIR=$HOME/var/mail
find ~/Maildir/.Software.kondara/cur | xargs -l dispatch Kondara-users.ja

となる。これで既存のメールも、新規のメールも自動的にアーカイブされることになった。あとはNamazuを突っ込むだけやな。ひひひ。