Sendmail で Maildir を使う

大誤解

「Sendmail が扱えるのは mbox 形式だけで、Maildir は使えない」

大嘘である。sendmail は Maildir を扱うことはできない。それは事実だ。しかし、sendmail は mbox も扱うことができない。なぜならば、sendmail は MDA ではないからだ。

MDA とは何ぞ

MTA と MDA

sendmail は MTA である。MSA や MSP としての側面もあるが、MDA としての機能は内包していない。sendmail はユーザのメールボックスの形式は関知しない。sendmail がメールボックスへの配送をするのではない。sendmail が MDA を呼び出して配送させるのである。メールをメールボックスに書き出すのは MDA の役割である。メールボックスの形式が関係するのはこの最後の書き出しの部分だけであり、その方法については MDA だけが知っていればいいことである。

代表的な MDA には以下のようなものがある。

このうち、postfix/local と qmail-local はそれぞれ postfix と qmail でローカル配送を請け負うプログラムであり、他のメールシステムで使うことはできない。

mail.local

mail.local は sendmail の配布物の中に含まれているため、一般には sendmail の一部と考えられている。実際、標準 MTA が postfix である MacOSX 10.3 は、sendmail が標準だった 10.2 までと異なり mail.local が存在しないし、Solaris では SUNWsndmr、SUNWsndmu パッケージをアンインストールすると mail.local もいっしょに消えてしまう。しかし、mail.local は汎用品であり、sendmail とは無関係な局面、たとえば fetchmail を使った POP サーバからのメール取り込みに mail.local を使うというのはよく知られた方法である。

さて、この mail.local が対応しているのは mbox だけである。残念ながら Maildir 形式を扱うことはできない。sendmail の一部である mail.local が Maildir を扱えないとなれば、sendmail というメールシステムで Maildir が使えないという考えにたどりつくのも無理からぬことである。しかし、それは間違っている。mail.local は postfix/local や qmail-local とは異なり、汎用品である。汎用品は替えが効くのである。

procmail と maildrop

procmail は古くから使われているメールフィルタで、届いたメールのフォルダへの振り分けや転送に威力を発揮する。maildrop も同様に使われるが、設定文法が procmail ほど変態的ではなく、徐々に普及してきている。

メール振り分けフィルタとして使われることの多い procmail, maildrop であるが、その正体はれっきとした汎用 MDA である。どちらも mbox, Maildir の両方の形式に対応している。つまり、sendmail から呼び出される MDA として mail.local を使わずに、これらを使えば Maildir 形式でメールを格納できるのである。

sendmail で Maildir を使う

ということで、実際の設定方法。.mc ファイルの適切な位置に

FEATURE(`local_procmail')
と書いて sendmail.cf を作りなおせばいい。これで mail.local のかわりに procmail を使うようになる。maildrop を使うようにするには、
FEATURE(`local_procmail', `/usr/local/bin/maildrop', `maildrop -d $u')
である。今さら使うことは勧めないが、WIDE CF を使っているのならば、
LOCALDELIVER_PROCMAIL=yes
といくつかの細々とした設定をすればよい(詳細はドキュメントを参照)。sendmail.cf を直接いじるのならば Mlocal のところ。

以上により、MDA が mail.local から procmail(or maildrop)に変更されたが、これらも標準のメールボックス形式は mbox なので、まだ Maildir 化が済んだわけではない。これを Maildir に変更してやれば設定完了である。/etc/procmailrc または maildroprc で

DEFAULT=$HOME/Maildir/
と書いておけばいい(procmail も maildrop も同じ)。イヤミったらしくダラダラと書いてきたが、実際におこなうべき作業はたったのこれだけである。難しいことは何もない。

なお、RedHat Linux の標準設定の sendmail.cf では、頼みもしないのに MDA に procmail を使うようにはじめから設定されている。つまり、Maildir を使いたいだけならば sendmail.cf をいじる必要はまったくなく、ただ /etc/procmailrc を書くだけでいい。また、Gentoo の標準設定の sendmail.cf は同じように頼みもしないのに MDA が procmail になっているだけでなく、頼みもしないのに /etc/procmailrc で Maildir に配送するようになっている。つまり Gentoo の場合、むしろ mbox を使いたい場合にこそわざわざ設定変更が必要になる。

蛇足

qmail で使う場合には qmail-start の第1引数で指定。postfix では $home_mailbox で指定する。

まとめ

システム標準のメールボックスを Maildir 形式にしたいというだけで sendmail を捨てようとするのは早計である。設定しだいで Maildir を使うことも可能であるし、そもそもメールシステムを評価する基準はメールボックス形式だけではない。メールボックス形式以外にもいろいろな角度から総合的に検討して、その上で乗り換えようというのならば止めないが。

ところで、IIJ Technical WEEK 2004 にて IIJ のメールサーバ構築担当者が語ったところによると、IIJ では独自チューニングの sendmail に独自開発の MDA を組み合わせて Maildir をさらに改良した形式のメールボックスに配送しているとのこと。sendmail に Maildir の組み合わせはけっして奇抜なものではなく、大手 ISP でも利用されている方法なのである。

なお、Maildir 形式で数百人規模のメールサーバを動かす場合には、運用を開始する*前*にディスクの i-node が枯渇しないかチェックしておくこと。動きだしてからでは遅い。また、Maildir は遅い。qmail は速いと言われているが、Maildir を使ったときのローカル配送は遅い。ディスクアクセスも激しいので、大量のメールを Maildir に配送しているサーバでは HDD の機械的寿命に影響があるかも(実際のところは知らんけど)。


もどる
<y@maya.st>