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を突っ込むだけやな。ひひひ。