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 を用いたメールの扱いができるようになります。