FetchmailとMaildir形式の近くて遠い関係

以前はSylpheedやThunderbirdと言ったMUAを導入して、メールを管理していた。個々のメールの保存方法に、 1つのフォルダのメールを全て1つのファイルに保存するmbox形式と、メーラの中のフォルダがファイルシステム上のフォルダに対応し、メール1通を1ファイルとして保存するMaildir形式がある。mbox形式はフォルダ内のメールの総サイズがファイルシステムのファイルサイズの上限の制約を受ける。Maildir形式は、フォルダ内のメールファイルの操作が、OSのコマンドの制限を受けることがある。

メールを配信するMTAには、mbox形式で実装されているものとMaildir形式で実装しているものがある。sendmailは前者でqmailは後者であり、postfixは両方から選べる。スプールをPOP3やIMAP4などメールサーバが受信したメールを操作するサービスにも、mbox形式で実装されているものとMaildir形式で実装されているものがある。dovecotはpostfiixと同様に両方から選べる。ポピュラーな組み合わせであるpostfixとdovecotは両方に対応している。

ところで複数のメールサーバからメールを集めてくる仕組みには大きく、転送によるプッシュ方式とコマンドによるプル方式がある。前者はforwardを指定し、後者はfetchmailなどを使う。前者はMTAの機能で、後者はPOP3やIMAP4のサーバと通信してメールを取得するMUAである。

fetchmailはMUAだが、集めてきたメールをローカルのスプールに流し込む機能を提供する。その時に、勝手にスプールを操作したりせず、ローカルなMTAに自分への配信を依頼する。つまり遠くのサーバからメールを奪ってきて、近くのサーバに自分への配信を要求するのが、fetchmailの仕事だ。procmailは自分に届いたメールをフォルダに振り替えたり、他所に転送するなど、届いたところから仕事が始まる。

メールサーバを立ち上げるのが久々だったので、これらの全体像を忘れていた。送信しないからとdovecotとfetchmailだけを導入したところ、最近のメールが全て行方不明になり、困った。原因はdovecotをMaildir形式で動作するように設定し、別のサーバからMaildirの中身を全て移したことにある。以前のメールは全て読めたが、fetchmailはmboxのスプールで動作する設定のままで、/var/spool/mailの中にメールを保管していた。

正しくはpostfixとdovecotをセットでMaildirで動作するように設定しなければならない。POP3もIMAP4も、メールサーバ上のスプールを覗く仕組みであり、スプールの管理はMTAの仕事だからである。

このミスは以前にもやった記憶が蘇ってきた。素人のサーバ管理は斯様にも危ない。