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。