fetchmailとprocmail

ダイアルアップなLinux Boxだと、BINDを動かす必要もなければ、sendmailを動かす必要もないよね。複数台のPCを持っていて、家庭内LANを立ち上げてる人ってのも最近多いかもしれないけど(オレもそうだ)それにしたって、ユーザが自分ひとりしかいないなら、その目的ってのはプリンタなどのハードウェアの共有だったり、ファイルの共有だったりってのが主なところだろう。

勉強のためならともかく、苦労してsendmailを立ち上げたあげく、変テコなヘッダ(特にMessage-IDとか)のメールを投げて見知らぬ人に迷惑をかけたり、さらには怒られたりしてたんじゃ割に合わぬ。てなわけで、おすすめなのがfetchmailだ。

POP3やIMAP4を喋ってくれるユーティリティで、ISPのメールボックスからメールを取ってきて、ローカルなマシンのスプールに置いてくれる、というのが主な機能だけど、デーモンとして起動すれば、受信に限ればサーバが動作しているのと見た目はまったくかわらない。こまごました設定も可能で便利に使っている。

fetchmail-4.4.1.tar.gzというtarballをarchieで拾ってきて、適当なところに展開する。でもって、./configure して make するだけ。とっても簡単。ただ、オレの場合、./configureしたときに makedepend で stddef.h が見付からないよ、というエラーメッセージがいくつか出た。これは無視しても問題ないようだ。

で、make して、root になって make install してインストールはおしまい。こまかい動作の調整は、~/.fetchmailrc を編集して行なう。ソースを展開したディレクトリに、sample.rcfile というファイルがあるので、それを見よう。man fetchmail で詳細を見るのもグ〜。特に難しいことはない(とオレは思う)もしも難しいようなら、いい機会だから勉強しようね。

ちなみにオレの使っている ~/.fetchmailrc はこんな感じ

poll pop3のサーバ名
protocol pop3
uidl
username ispでのユーザ名
password ispでのパスワード
no rewrite
keep
mda "/usr/bin/procmail"

まぁほとんど見たままだね。uidlってのは、新着メールか否かの判断をuidlでやってくれ、ということだ。no reweiteってのは、ヘッダをいじらないでそのままにしとけってこと。で、keepってのは、fetchしたメールもすぐ消さずに取っておいてくれってことだ。

最後の行の mda "/usr/bin/procmail" てのがちょっとしたキモで、オレはこれのおかげで完全にsendmailからオサラバしている。実はfetchmailってのは、デフォルトではsendmailにメールをそのまま渡すようになっているんだ。

ISPからメールを取ってくる
ローカルなユーザ宛のメールのふりしてsendmailに渡す
sendmailがそれぞれのユーザのスプールにメールを置く

という形で動作している。まぁこうしておけば、ローカルなLinux Boxからさらにどこかに転送するなり、自由度はあるのかも知れないけど、大多数の人には、ここでsendmailに登場してもらう必要はないよねぇ。てなわけで、procmailの出番だ。

procmailというのは、メールをあらかじめ与えられた書式にしたがって判別し、指定されたフォルダに振り分けてくれるユーティリティだ。Windows上で動く、今時のGUIGUIしたメールソフトならたいてい持っている機能だよね。やっぱり便利だから使わない手はないぜ。

例によって、師匠の菊谷さんのページから、procmail-3.11pre7.tar.gz と procmail-maildir.patch を頂いてくる。単にprocmailを使うだけなら、archieなりなんなりでprocmailのtarballを持ってくればいいんだが、今回はmboxでなくMaildirでメールを保持するようにする、という目的もあるので、procmail-maildir.patchがとにかく大事なのだ。いつもながら感謝>菊谷さん

これもインストール自体はとっても簡単で、tarballを適当に展開し、Maildirのパッチをあてて単にmakeするだけ。エラーなくmakeできたら、rootになってmake installすればおしまい。で、こまごました設定は~/.procmailrcに記述して調整する。

そもそも、なんでMaildirに拘るのか、というと、一言でダサイからだ。だって、mboxってさぁ、1個のファイルなんだぜ。単にそのフォルダにあるメールを全部catしてくっつけてあるだけ。一回でも新しいメールの追記に失敗したら、そのmboxファイルは終り。フォルダもお亡くなり。スレッドを生成するのもエラく面倒、といういいとこなしの形式なのだ。

その点、Maildirなら、1メール1ファイルで柔軟性があるし、スレッドの生成にこれほど向いた形式もなかろう。フォルダ間の移動、フォルダそのものの移動なんかも楽々だ。ふつ〜はこっちを使いたいよなぁ。

てなわけで上にもどって、~/.fetchmailrc の mda "/usr/bin/procmail" てのは何か、というと、fetchmailが取ってきたメールを、普通にsendmailに渡さないで、procmailに渡してね、という指定なのだ。mdaってのはつまり、mail delivery agentってこった。配達人ね。こうすることで、fetchmailがメールを取ってくると、即座にprocmailに渡し、procmailは言われたとおりにMaildir形式なフォルダにせっせと分配してくれるわけ。グ〜だぜ。

ちなみにオレの使っている ~/.procmailrc は抜粋するとこんな感じ

#VERBOSE=on
PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir # You'd better make sure it exists
LOGFILE=$MAILDIR/from
LOCKFILE=$HOME/.lockmail
DEFAULT=$HOME/Maildir/inbox/new

:0
* ! ^Lines:
{
# Count number of lines
:0B
* 1^1 ^.*$
{ }
LINES = $=

# Add Lines: header
:0 fhw
| formail -a "Lines: $LINES"
}

:0
* X-ML-Name: linux-users
linux/new

:0
* To: .*x-tt
x-tt/new

これも、ほとんど見たままだけど、ちょっとだけ説明ね。まず、MAILDIRはオレの場合~/Maildirになっている。これはprocmailを始めて起動するまえに、あらかじめディレクトリを掘っておこう。あとは勝手に作ってくれたはず。主にMailing Listの振り分けに使うと思うが、配信されてくるメールのヘッダに、X-ML-Nameがある場合は、上の例でいくと、Linux-usersの項目をカット&ペーストで使える。ヘッダにX-ML-Nameがない場合は、To:でもなんでも、キーになるヘッダを決めて、世紀表現なんかも折り混ぜて記述する。上の例だと、x-tt Mailing Listの項目だ。

ここまで設定したら、ISPにダイアルアップして、fetchmail -v などとしてみよう。

メール 前へ 次へ 戻る