.procmailrcの書き方

ここからがメインディッシュです。

個々のポリシーによって味付けも変わりますので適宜読みかえたり、man など参照してください。
同じく、ホームディレクトリに .procmailrc ファイルを編集します。


☆共通の事項など☆

.procmailrc ファイルの最初のほうに次のようにパスを通しておきます。

PATH=/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin:/pub/bin:. #プログラムに必要なパス。
SHELL=/bin/sh #…じゃなくても良い。
MAILDIR=$HOME/Mail/ #YATユーザなどはこのままでいいと思います。
DEFAULT=$HOME/Mail/ #これもそのままで。
LOGFILE=$MAILDIR/.procmail.log #初めて使う場合や、設定を変えた時はログを取る。

#ここから上は共通です。ログファイルの touch をお忘れなく。

メール振り分けはその条件を正規表現を使ってあらわし、
振り分けの条件とアクションは、:0 で始まるグループで指定します。

:0 [プロックメールの引数(オプション)] [ : [ロックファイル] ]
* 条件(一行について一件のみ)
アクション(一つだけっ!)

正規表現 (regexp) とは...



☆FAQなどにも含まれているいくつかの例(レシピ)☆

▲特定のアドレスからのスパム(迷惑メール)を排除する。
そのメールをゴミ箱(trashフォルダをつくって置いて下さい)に移動してしまいましょう。

:0
* ^From:.*foofoo@localhost.com
trash

▲メーリングリストを立ちあげる方法はいくつかありますが、多くの場合 root にお願いして設定してもらわなければなりません。しかしプロックメールを使うと、コンパ専用のメーリングリストを立ちあげることも可能になります。(本物にくらべると制約はありますが)

:0 #サブジェクトが EIBUN-NOMIKAI-MLだったら次へ同報
* ^Subject:.*EIBUN-NOMIKAI-ML
! ichiro@hokusei.ac.jp jiro@hokusei.ac.jp hanako@hokusei.ac.jp

▲たくさんのメーリングリストに入っているなら、少しまとまりが悪くなってしまいがちです。メーリングリスト専用のフォルダを作成して自動的に振り分けるようにしてみましょう。

:0 #foofoo@mag2.com まぐまぐは mag2 フォルダに入れておく
* ^To:.*booboo@mag2.com
mag2

▲サイズの小さいメールはモバイルでも読めるようにします。

:0 #1キロバイト以下のメールは携帯電話にも転送する
* < 1000
! callme@i-mode me@myhome

▲メールでリクエストされたファイルを添付して自動返信するファイルサーバを立ち上げてみましょう。設定が済んだら、サブジェクトに send file [ファイル名] と書いて送信する。

:0 #指定されたファイルを添付して自動返信する。
* ^Subject: send file [0-9a-z]
* !^X-Loop: sky@hokusei.ac.jp #ループはダメよ。
* !^Subject:.*Re:
* !^FROM_DAEMON #システムは相手にしない。
* !^Subject: send file .*[/.]\. #ドットではじまるファイルは送信しない。
{
MAILDIR=$HOME/fileserver #ダウンロード用ファイル置場に移る。
:0 fhw #メールヘッダをリバースしてから名前を展開する。
* ^Subject: send file \/[^ ]*
| formail -rA "X-Loop: sky@hokusei.ac.jp" #ループ防止のヘッダを書き込む。
FILE="$MATCH" #リクエストされたファイル名
:0 ah
| cat - ./$FILE 2>&1 | $SENDMAIL -oi -t
# バイナリ対応?!
| (cat - ; ¥# バックスラッシュも忘れずに
echo "" ; ¥
echo "Followed by requested file in UUENCODE format"; ¥
echo ""; cat $FILE | uuencode $FILE; ¥
# echo ""; cat $FILE | uuencode -m $FILE; ¥
# uuencode $FILE の $FILE はオペランド名 -m は GNU sharutils のみ
echo ""; ¥
echo "end of the file" ¥
) | $SENDMAIL -oi -t
}

formail のオプションなどはこちらに載せておきます。

▲特定の人にのみメール受信の確認を届ける

:0 h c #president@whitehouse.gov または queen@royal.gov.uk からのメールのみ対象
* ^From:.*president@whitehouse.gov|^From:.*queen@royal.gov.uk
* !^FROM_DAEMON
* !^X-No-Loop: sky@hokusei.ac.jp
| (formail -r -A "X-No-Loop: sky@hokusei.ac.jp" ¥
-A "Precedence: junk" ; ¥
echo "Mail received at `date`[`date -u`]. --AUTO GENERATED--") | $SENDMAIL -t



つづく、たぶん(もっと詳しく知りたい人は UNIXマガジン98年10月号を見てね)



☆その他に☆

▲これらのレシピを書く際にその順序はプログラムの動作に重大に関わります。 プロックメールは procmailrc ファイルを先頭から解釈して条件にマッチしたものを 処理していきますからレシピが複雑化するとより一層注意しなくてはいけません。

▲ログファイルは放っておくと際限なく大きくなってしまうので、mailstat などで 定期的にチェックすると良いでしょう。※また、cp /dev/null ログファイル名 とすることで初期化する事もできます。

担当:英文・須古 webadmin@hokusei.ac.jp

last modified at