受信したメールをルールに則って振り分けてくれるProcmail
について解説していきます。かなり細かいところまで柔軟に振り分ける事ができるので活用しないてはありません。
|
|
■procmail のインストール
RedHatの場合は、既にRPMパッケージがインストールされていると思います。インストールされていなければインストールしておいてください。
# rpm -q procmail
# apt-get install procmail
# which procmail
/usr/bin/procmail |
|
■Postfix の設定
Postfix の設定を行っておきます。/etc/postfix/main.cf を開いて以下の行を探します。
# vi /etc/postfix/main.cf
#mailbox_command = /some/where/procmail
#mailbox_command = /some/where/procmail
-a "$EXTENSION" |
|
procmail コマンドのパスを以下のように編集しておきます。どこにprocmail があるのか確認するには、which
procmail コマンドを実行してください。
mailbox_command
= /usr/bin/procmail
#mailbox_command = /some/where/procmail
-a "$EXTENSION" |
|
■procmail の設定ファイル
procmail は、用途に分けて記述する設定ファイルが異なります。システム全体に対してprocmail
の内容を適用するには、/etc/procmail に記述し、ユーザー個別に対して適用するには、$HOME/.procmailrc
に記述します。未承諾広告やSPAMメールの削除用途以外は、できるだけ、ユーザー個別の設定ファイルを用意し、そこにレシピを記述しておいた方がいいでしょう。なお、/etc/profile
に記述しても、.procmailrc に記述する場合でも書式は同様です。
|
/etc/procmail |
システム全体に対して適用する場合 |
|
.forward
.procmailrc |
ユーザーごとに対して適用する場合 |
|
■ユーザー個別の設定
ユーザーごとにprocmail の設定を行っていきます。必要となるファイルは、$HOME/.forward
と$HOME/.procmailrc です。最初に、ホームディレクトリ直下に、.forward を作成しておきましょう。既に、.forward
を転送用途に使用していた方は、.procmailrc で同様の操作が実現できるので記述内容をコメントアウトするか、削除してしまっても構いません。.forward
に記述する内容は以下の1行です。/usr/bin/procmail は、各環境に合わせてパスを変更しておいてください。「ユーザ名」には、システムに存在するユーザ名を入力してください。また、Maildir
形式のメールボックスを使用している方は、ユーザ名の代わりに「~/Maildir/ 」とします。
$ vi .forward
"|IFS=' ' && exec /usr/bin/procmail
-f- || exit 75 #ユーザ名"
もしくは、
"|IFS=' ' && exec /usr/bin/procmail
-f- || exit 75 #~/Maildir/"
|
|
■.procmailrc の設定
次に、ホームディレクトリ直下に、.procmailrc を作成します。先頭行には、procmail が参照する環境変数を記述しておきます。MAILDIR変数は、Maildir
形式を使用していない場合は、デフォルトで、/var/spool/mail 以下にメールが格納される(mbox
形式)のでわざわざ記述する必要はありません。LOGFILE変数を記述しておくとprocmail が実行した内容をログってくれるので非常に便利です。なお、LOGFILEを指定した場合は、きちんとログのローテートも行っておきましょう。
$ vi .procmailrc
SHELL=/bin/bash
PATH=$HOME/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
LOGFILE=$MAILDIR/procmail.log |
|
◎procmail の環境変数
|
SHELL |
使用しているシェルのPATHを指定する |
|
PATH |
検索するコマンドのPATHを指定する |
|
MAILDIR |
メールの格納場所を指定する |
|
DEFAULT |
レシピに一致しないメッセージがデフォルトで格納されるPATHを指定 |
|
LOGFILE |
ログファイルのPATHを指定する |
|
環境変数を記述し終えたら、いよいよとメールの振り分けの設定を行います。ここから先は用途によって異なってくるので簡単な例を紹介していきます。
■メールの転送と削除
受信したメールを指定したメールに転送させたり、特定のアドレスからきたメールを削除したりする事ができます。レシピには正規表現を使う事ができますが、ここでは説明を割愛させていただきます。以下の例では、vodafone.ne.jp
を含んだアドレスからきたメール(=From)を削除します。/dev/null を指定する事で、メッセージを廃棄することができますが、復元は不可能なので注意してください。
# vi ~/procmailrc
:0
* ^From.*vodafone.ne.jp
/dev/null |
|
受信メールを指定のアドレスに転送させたい場合は以下のようにします。「 ! 」のアクションを先頭に記述しておく事で指定のアドレスに転送できるようになります。なお、複数のアドレスに転送させたい場合は、スペース(半角)で区切って列挙します。
# vi ~/procmailrc
:0
* ^From.*vodafone.ne.jp
!xxxxxx@yahoo.co.jp yyyyyy@yahoo.co.jp |
|
上記の方法では、xxxxxx@yahoo.co.jp と yyyyyy@yahoo.co.jp に転送されますが、サーバー上にはメールは残りません。これでは、自宅のメーラーで受信しようとした場合にメールが残っていないので不便です。受信メールをサーバー上に残したい場合には以下のようにします。:0
c のようにするとメールをサーバー上に残します。mbox 形式の方は、~/Maildir の箇所に自分のユーザアカウントを指定してください。
:0
* ^From.*t.vodafone.ne.jp
{
:0 c
!xxxxxx@yahoo.co.jp
yyyyyy@yahoo.co.jp
:0
~/Maildir/
} |
|
■特定のフォルダに振り分ける
仕事用、プライベート用、メーリングリスト用など用途に分けてフォルダにわけたほうが便利ですね。以下のように記述すると特定の文字列を含むメールを特定のフォルダに振り分ける事ができます。以下、ふたつの例では、Postfix
のメーリングリストとSambaのメーリングリストを各フォルダに振り分けています。なお、メーリングリストの場合は、Subject
やFrom、To で振り分けるのではなく、
X-ML-Nameや
X-Sequenceヘッダを使用して振り分けるのが推奨されています。
:0
* ^(From|CC|To).*postfix-jp-list@lists.sourceforge.jp
.postfix-ML/
:0
* ^X-ML-Name: samba-jp
.samba-ML/ |
|
なお、MH形式(1メール1ファイル)の場合は、
./フォルダ名 ではなく、
フォルダ名/.
となる事に注意してください。また、:0 のさらに右に半角スペースを空けて、「 : 」(コロン)を追加し、ロックをかけてください(以下参照)。
:0 :
* ^X-ML-Name: samba-jp
samba-ML/. |
|
◎振り分け + 転送
以下の例では、xxxxxx@plala.or.jp から来たメールをyyyyyy@yahoo.co.jp
に転送しつつ、private フォルダに残します。
:0
* ^From.*xxxxxx@plala.or.jp
{
:0 c
!yyyyyy@yahoo.co.jp
:0
.private/
}
|
|
■ログのローテート
$Maildir/procmail.log
{
weekly
rotate 4
missingok
create 666 $USER $USER
} |
|
/usr/sbin/logrotate
/etc/logrotate.conf |
|
■参考
⇒Procmail
の紹介とレシピの書き方