Procmail の使い方

Procmail とは?

  • メイルの自動処理をするプログラムです。
  • 処理方法は ~/.procmailrc に書きます。
  • .forward や .qmail から起動させます。つまり、メイルが届いた時に処理が行なわれます。

Sendmail の場合

  • .forward にはこう書きます(1カラム目から)
"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #username"

Qmail の場合

  • .qmail にはこう書きます(1カラム目から)
| preline /usr/local/bin/procmail

.procmailrc の書き方

  • .procmailrc の中では環境変数の設定と処理のレシピが書けます。
  • 環境変数
LOGFILE=$HOME/procmail.log (指定しないとログを残さないので、エラーが出ても分からない)
MAILDIR=$HOME/Mail/
DEFAULT=$MAILDIR       (どのレシピにも合致しなかった場合のメイルの書き出し先。
                         指定しないと /var/mail/$USER)
  • レシピ -- 基本は3行で1つの設定
:0 (レシピの始まり)
*  (条件、正規表現を使用)
(動作、1行しか書けない)

正規表現

^ -- 行頭
$ -- 行末
. -- 任意の文字(改行コードは含まない)
a* -- a で始まる任意の長さの文字列(a のみもある)
a+ -- a で始まる任意の長さの文字列
a? -- a 1文字あるいはなにもなし
\. -- ドット1文字
[abc] -- a か b か c の1文字
[a-z] -- a から z までのどれか1文字
[^a-z] -- a から z までのどれでもない1文字

動作の指定

! address -- 転送する
| program -- プログラムに渡す
{   -------- ブロックの開始(複雑な記述)
mailbox  --- mailbox に保存
mailbox/ --- Maildir 形式で保存
mailbox/. -- MH 形式で保存

設定例

サブジェクトに test が含まれるなら test/ 以下に MH 形式で入れる。 それ以外は Maildir/ 以下に入れるが、もし Maildir/new があればそこに入れる。

LOGFILE=$HOME/procmail.log
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
:0
*^Subject.*test
test/.

設定例

From で振り分ける。

LOGFILE=$HOME/procmail.log
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
:0
*^From owner-FreeBSD  <== あるいは *^Sender: owner-FreeBSD
freebsd/.
:0
*^From owner-bugtraq  <== あるいは *^List-Id: <bugtraq
bugtraq/.

設定例

サブジェクトが Cron か Daily で始まるなら、フォワードする。

:0
*(^Subject: Cron|^Subject: Daily)
! other@my.other.domain

設定例

レシピの1行目に :0 c と書くと、1通のメイルに複数のレシピを記述できる
動作行の先頭に | を書くと、パイプで他のプログラムにメイルを渡せる

:0 c
*^From: owner-list
list/
:0
*^From: owner-list
| mhonarc -add -outdir ~/public_html/arc --

この例ではメイルをフォルダに入れ、更に mhonarc で処理させている

おまけ

ログファイルは放っておくと、どんどん大きくなるので、見たら

% cp /dev/null procmail.log

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2004-11-08 (月) 22:33:46 (5483d)