Sendmail で Maildir 形式を使用する (CentOS 5.5)
Sendmail で Maildir へ配信する
CentOS 5.5 では、既定では Sendmail が利用できるようになっていました。
初期状態では、Sendmail からのローカル配送の際は mbox 形式が採用されているようでしたけど、全てのメールを 1 つのファイルで管理する mbox 形式よりは、メールを 1 つずつ 1 つのファイルで管理する Maildir 形式の方が、効率や耐久性の面で優れていると思います。
そこで今回は、Sendmail の MDA (Mail Delivery Agent) 設定を調整して、Maildir へ配送されるように設定してみることにします。
procmail を設定する
Sendmail の場合、ローカル配送を行う MDA (Mail Delivery Agent) を設定で切り替えることができるようになっているようです。
例えば "mail.local" という MDA の場合は mbox への配信しかできませんが、これを "procmail" や "maildrop" であれば mbox と Maildir のどちらへもローカル配送を行うことが出来るようになる、といった感じの様子です。
MDA として procmail や maildrop を利用する場合には、"/etc/mail/sendmail.mc" 内で "FEATURE(`local_procmail')" という設定を追加すれば良いそうです。
実際に、自分の CentOS 5.5 の "/etc/mail/sendmail.mc" を調べてみると、次のような設定を見つけることが出来ました。
FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
つまり、MDA として "procmail" が利用される設定になっているようです。
そうなれば、後は procmail の設定を変更することで、mbox から Maildir へ切り替えることが出来るはずです。
各ユーザーのホームディレクトリーに ".procmailrc" というファイルを作成して設定する方法もあるようなのですが、今回は全てのユーザーで Maildir を利用したいと思いますので、"/etc/procmailrc" に次のような内容を記載しました。
なお、CentOS 5.5 では、既定では "/etc/procmailrc" が用意されていないようでしたので、初めての場合はここで新規作成しておきます。
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$HOME/procmail.log
このように記載することで、既定のメール形式が Maildir となります。
このファイルを編集すれば、とくに sendmail の再起動等はしなくても、この内容がすぐに有効になる様子です。
なお、このときでも、ホームディレクトリー内に Maildir 用のディレクトリーがないユーザーへメール配信された場合、従来の mbox である /var/spool/mail/$USER の方へメールが配信されるようでした。
新規ユーザーについて Maildir が作成されるようにする
各ユーザーへ Maildir 形式でメールを配信するには、それぞれのユーザーのホームディレクトリーに Maildir ディレクトリーが必要です。
新規ユーザーを作成した際に Maildir をその都度作成しなくても済むように、次のようにして "/etc/skel/" ディレクトリー内に Maildir の雛形を作成しておくと良いでしょう。
mkdir /etc/skel/Maildir
mkdir /etc/skel/Maildir/new
mkdir /etc/skel/Maildir/cur
mkdir /etc/skel/Maildir/tmp
chmod -R 700 /etc/skel/Maildir
これにより、新しく useradd でアカウントを追加した場合に、自動的に Maildir が作成されるようになりました。
既存のユーザーに Maildir を用意する
既存のユーザーについても、ホームディレクトリー上に Maildir を用意しなければ、そのまま mbox が使用され続けるようです。
そのため、各ユーザーについても Maildir を作成する必要があるのですが、どのようにするのが便利なのでしょうね。
"prefect_maildir.pl" という mbox を Maildir に変換するツールというのもあるようですが、今回の自分の環境ではちょうど新規に構築中のメールサーバーというのもあったりして、今回はわざわざ用意してまで利用するツールではなさそうです。
空の Maildir さえ作成できれば良い感じですので、次のようなスクリプトをとりあえず作ってみました。
#!/bin/sh
MAILDIR_TEMPLATE="/etc/skel/Maildir"
if test "$1" = ""
then
echo "Usage: $0 owner [group] [/home/owner]"
exit 1
else
MAILDIR_OWNER=$1
fi
if test "$2" = ""
then
MAILDIR_GROUP=$MAILDIR_OWNER
else
MAILDIR_GROUP=$2
fi
if test "$3" = ""
then
MAILDIR_PATH="/home/$MAILDIR_OWNER"
else
MAILDIR_PATH=$3
fi
echo Owner: $MAILDIR_OWNER
echo Group: :$MAILDIR_GROUP
echo Create Path: $MAILDIR_PATH
echo
echo "Create Maildir ? [y/N]"
read MAILDIR_CREATE
if test "$MAILDIR_CREATE" = "y"
then
cp -r $MAILDIR_TEMPLATE $MAILDIR_PATH/ && chown -R $MAILDIR_OWNER $MAILDIR_PATH/Maildir && chgrp -R $MAILDIR_GROUP $MAILDIR_PATH/Maildir
echo "Done."
else
echo "Canceled."
fi
このようにしたら、このスクリプトを "make-maildir.sh" と保存して実行権限を設定したら、"./make-maildir.sh username" という感じにすることで、username に対して Maildir が作成されるようになりました。
このスクリプトでは、これまでの mbox 内のデータは移行しませんので、従前のメールデータが必要であれば、別の何らかの方法を取る必要があります。
ともあれ、このような形で、mbox から Maildir への切り替えができました。
後は POP3 や IMAP4 といったメール受信のためのサーバー類を Maildir へ対応させれば、Maildir を用いたメールの扱いができるようになります。