procmailでメールを振り分ける。 Postfix+DovecotのIMAPサーバでの例。
procmailでの振り分け設定
まず/etc/postfix/main.cfを編集して次のように設定しておく。
- home_mailbox
- Maildir/
- mail_spool_directory
- (コメントアウトする)
- mailbox_command
- /usr/bin/procmail
つづいて、procmailのパーミッションを変更してsetuidビットを立てる。
# 現在のパーミッションを確認
> ls -ld /usr/bin/procmail
-rwxr-xr-x 1 root mail 81616 3月 18 2005 /usr/bin/procmail
# パーミッションを変更
> chmod 4755 /usr/bin/procmail
# 変更を確認
> ls -ld /usr/bin/procmail
-rwsr-xr-x 1 root mail 81616 3月 18 2005 /usr/bin/procmail
ちなみに、setuidビットを立てない場合、/var/log/maillogにこのようなメッセージがはき出される。
relay=local, delay=1, status=bounced (can't create user output file. Command output: procmail: Couldn't create "/var/mail/santamarta" )
つづいて、ホームディレクトリ下に.forwardと.procmailrcというファイルを作成する。 .forwardで受信したメールをprocmailに渡すように設定し、.procmailrcで振り分けの設定を行う。 まずは.forwardの記述例。
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #santamarta"
ダブルクォーテーションも含めて記述する。 また、#以降にユーザ名を記述する。 続いて、.procmailrcの記述例。
SHELL=/bin/bash
PATH=$HOME/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmail.log
VERBOSE=ON
:0
* ^From.*atmarkit\.co\.jp
.INBOX.@IT/
:0
* ^Subject.*LogWatch
.INBOX.LogWatch/
:0
* ^Subject.*Cron
.INBOX.Cron/
最初の6行は環境変数の設定で、メールの保存ディレクトリ、ログファイル名、ログの詳細度などを設定している。 0:で始まる三つの部分が、振り分けのルール。 上から順に、
- 受信メールのFromヘッダ(送信元)に「atmarkit.co.jp」が含まれていたら、受信トレイの「@IT」フォルダに振り分ける
- 受信メールのSubjectヘッダ(タイトル)に「LogWatch」が含まれていたら、受信トレイの「LogWatch」フォルダに振り分ける
- 受信メールのSubjectヘッダ(タイトル)に「Cron」が含まれていたら、受信トレイの「Cron」フォルダに振り分ける
となっている(上記に該当しないメールは、受信トレイに振り分けられる)。 振り分けルールについての詳細な説明は、こちらなどを参照のこと。
Thunderbirdでの受信設定
Thunderbirdで振り分けたメールを参照できるように設定を行う。 まず、受信トレイを右クリックし、「購読」をクリックする。

すべてのフォルダにチェックを入れてOKボタンを押す。 この状態では、新着メールがフォルダに振り分けられても自動的には通知されないので、通知するように設定する。 そのために、任意のフォルダを右クリックし、

「このフォルダに新着メッセージがないか確認する」にチェックを入れる。 これをすべてのフォルダに対して行えばOK。