追補あり
# 詳しくは % man procmailrc あるいは % man procmailex を参照してください。
自分のホームディレクトリィに .procmailrc というファイルを用意します。
(注意:ピリオドに注意。 .procmailrc です)
(注意:chownは自分、chmodは600とか644にしないと不備とみなされます。 通常はそのようになっています。)
メールが送られてくると、.procmailrcに 書かれた判定条件が調べられて、条件を満たすと、実行が起きます。
この[条件+実行]の1セットをレシピと呼ぶことにします。
レシピはたくさん並べることができ、レシピは上から順に調べられます。
一つのレシピの条件部が満たされていると、そのレシピの実行部が 実行され終了になります。 ただし、さらに(cフラグを書くことにより)続行せよという指示も できます。

.procmailrc の作成には十分注意してください。 不備があった場合に受信したメールが紛失する可能性もあります。 十分にテストを行い確認をしてください。

では、作り方。サンプルを中心に説明します。 .procmailrcは
パート1
パート2
パート2
パート3
をくっつけて完成させます。
パート1とパート3は固定です。

パート1は以下です。(コピーしたいときはこれを)
SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME
DEFAULT=/var/mail/$LOGNAME
LOCKFILE=$HOME/.lockmail
DROPPRIVS=yes

:0fw: spamassassin.lock
* < 556000
| spamc

:0
* ^X-Spam-Status: Yes
/var/mail/spam.$LOGNAME

パート3は以下です。(コピーしたいときはこれを)
:0
$DEFAULT
必ず、これらにしてください。

パート2の部分はバラエティーに富んでいます。 さまざまなレシピを順に追加していきます。順序も大事です。 上から下に順次にチェックされますから。

パート2には以下のレシピのサンプルを適当にみつくろって並べてください。

#上から順に解釈してマッチしたら、そこでストップ。
#ただし、:0のとなりに c が書いてあれば、さらに下に continue します。 (cはcontinueのcではなくcarbonですが)
注意:自分のケータイのメールアドレスを.transaddrに書いておくことを前提と しています。
もしも .transaddrファイルが存在しなければケータイにメールを送ることはありません。
条件(*で始まる行)が複数並んでいる場合、andを意味します。


パート2のサンプル集


サンプル1
山田さんからメールが来たら、 ケータイにメールのサマリ(480文字以内で)を送る。
さらに下のレシピへと続く
:0c
* ^From yamada@dokoka.no.domain.jp
| mailnotice -f $HOME/.transaddr 480
"-f .transaddr"の(2ワード)ところは、直接、アドレスで my-keitai-addr@dokomo.toka.ezweb.nadonadoの(1ワード)ように 置き換えることもできる

サンプル2
山田さんから来たメールを鈴木さんに転送して終了(cフラグがついてないので)
:0
* ^From yamada@dokoka.no.domain.jp
! suzuki@kokowa.doko.com
"yamada@dokoka.no.domain.jp"の部分をたとえば、".*@ss.u-tokai.ac.jp"とすると、 情数(ss)から来たメールは すべて転送される。

サンプル3
サブジェクトに hentai という文字列が入っていたら、即、消去して 終了する。(/dev/nullにしまうことは消去を意味する)
:0
* ^Subject:.*hentai
/dev/null

サンプル4
数学会から来るニュースメールは、別ファイル(suugakukai)に保存し、 終了する。 数学会からのメールはまとめてあとで読むつもり。
:0
* ^From .*announce@info.math-assoc.or.jp
* ^Subject:.*News.*No
suugakukai
あとで% mail -f $HOME/suugakukai とすることで 数学会からのメールをまとめて読むことができる。

サンプル5
マックサイコから来たメールは山田さんと鈴木さんに転送し、さらに 別ファイル(macpsych)にしまっておき、終了する
:0
* ^From owner-macpsych@nic.stolaf.edu
{
:0 c
! yamada@dokoka.no.domain.jp suzuki@kokowa.doko.com

:0
macpsych
}

サンプル6
情数からのメールはなんにもしないで素直にメールスプール(デフォルトの保管場所)に しまって終了する。普通にあとでメールソフト(MUA)で読む。
:0
* ^From .*@ss.u-tokai.ac.jp
$DEFAULT

サンプル7
情数*以外*から来たメールで、かつ 添付書類があるメールは拒否をしたいが、完全に捨てても困る場合が あるので、送ってきた相手に、「添付書類があるメールは 受け取れません。プレインテキストで送ってください。」 というメールを自動で返す。さらに下のレシピへと続ける(cがついているので)
:0cHB
*! ^From .*ss.u-tokai.ac.jp
* Encoding: base64
| warn-warn 'tenpu shorui ari'
HBとあるのでヘッダー(H)だけでなくボディ(B)も調べてる。
ここでcフラグをはずしておくと、送ってきた相手に迷惑であるとのメールを 送ったあと、メール自体は捨てられる。手元には残らない。

サンプル8
(Eがついているので) 上のレシピの条件を満たさないときに限り、このレシピも チェックする。もしも直前のレシピの条件が満たされていると、 このレシピはスキップする。(Eはelseの意味)
情数*以外*から来たメールで、かつ HTMLやMULTI-PARTになってるメールは拒否をしたいが、完全に捨てても困る場合が あるので、送ってきた相手に、「マルチパートのメールは 受け取れません。プレインテキストで送ってください。」 というメールを自動で返す。さらに下のレシピへと続ける(cがついているので)
:0EcH
*! ^From .*ss.u-tokai.ac.jp
* ^Content-Type:.*multi-?part
| warn-warn multipart

サンプル9
(Eがついているので) 上のレシピの条件を満たさないときに限り、このレシピも チェックする。もしも直前のレシピの条件が満たされていると、 このレシピはスキップする。(Eはelseの意味)
クオーテッド文字列のメールは拒否をしたいが、完全に捨てても困る場合が あるので、送ってきた相手に、 /usr/local/mesg/mesg001に書いてある文章を相手に自動で返信する。 さらに下のレシピへと続ける(cがついているので)
:0EcH
* ^Content-Transfer-Encoding:.*quoted-printable
| warn-warn /usr/local/mesg/mesg001
/usr/local/mesg/mesg001のように/で始まっていると、ファイル名と解釈をし、そ のファイルの内容を送る。/で始まらないと、それ自体をメッセージだと解釈する。

サンプル10
(Eがついているので) 上のレシピの条件を満たさないときに限り、このレシピも チェックする。もしも直前のレシピの条件が満たされていると、 このレシピはスキップする。(Eはelseの意味)
メールがでかくて256000バイト以上であったら、二つのことを行って終了する。 (cがついてないので終了となる) その二つとは、送ってきた相手に警告のメールを送ることと、 メールをbigmailファイルにしまうことである。
$HOME/warnmsgは警告の内容をいれてあるファイル名である。 ファイル名は/で始まらなければならない。$HOMEは/から始まる文字列に 変換されてるのでこの条件に合致している。
:0E
* > 256000
{
:0 c
| warn-warn $HOME/warnmsg

:0
bigmail
}

サンプル11
神居さんからのメールで、しかも情数のみんなに送ったんではなさそうな 個人的なメールだったら、急ぎかもしれないので、ケータイのほうにも要旨を (480文字以内で。 たとえばケータイ会社によっては480文字以内のメールの受信は 無料だったりする)送っておく。
:0c
* ^From kamii@ss.u-tokai.ac.jp
*! ^To: .*ssall@ss.u-tokai
*! ^To: .*sssensei@ss.u-tokai
*! ^To: .*shusyoku@ss.u-tokai
| mailnotice addr@dokomo.toka.ezweb.nadonado 480



追補集


追補(2006.05.12)
サンプル15
HTMLファイルのチェックを厳密にしてみた。それと 情数の先生達から送られてきたものなら、敢えてHTMLの警告メールは 返さない。
つまり情数から来たメールでなく、かつ、HTMLメールなら相手に 警告の文章を送る
:0EcHB
*! ^From .*ss.u-tokai.ac.jp
* Content-Type.*text\/html
| warn-warn HTML

追補(2006.05.09)
サンプル14
ANAマイレージカードから定期的に送られてくるメールはうざったいから
AMCというファイルに一括保存する。それらのメールは
% mail -f AMC とすることで読むことができる。
:0
* ^From: ANA Mail Magazine.*ana.co.jp
AMC

追補(2006.04.29)
サンプル13
マイクロソフトのMUAソフトであるアウトルックから送られてきたメールには
「ERROR--MUA このメールは受け取れない。拒否する」と返信を出す。
:0
* ^X-Mailer: Microsoft
| mailfail 'ERROR--MUA'

追補(2006.04.28)
UNIX上でエディタが使えない人は、DOSのほうからftpで
ファイル転送してくると思いますがそのときはascii(text)
転送にしてください。これは改行表現に相違があるからです。
また、漢字コードにも相違がありますが今回は日本語を使いません。

追補:(2006.04.27)
じつのところ、パート3は書かなくてもオーケーなんです。
パート3はいわば「すべり止め」です。
これがないと気づくと、かってにパート3を自動でくっつけて
くれます。書かなくても、メールが消えちゃったということには
ならないです。

追補:(2006.04.27)
これは、私が長年愛用してきたものですが、みなさんに公表してしまいましょう。
サンプル12として。
サンプル12
これはサンプル1やサンプル11にあるようなケータイにメールを送るのと ペアで使います。 ケータイのほうに、メールが送られてきますから、ついついこれに返信 したくなるわけです。ところが、普通に返信してしまうと、 相手にケータイのアドレスがばれてしまいます。 そうならないように、あたかも情数のアドレスから送ってるかのように 偽装(?)ができるものです。
相手が情数のアドレスにメールを送ってきたとします。そのあと、相手は情数から 返事が来たと思ってしまうというしろものです。じつはケータイに送られて ケータイから返事を出したのですが。
(ケータイのアドレスがmy-keitai-addr@dokomo.toka.ezweb.nadonadoと仮定して)
:0
* ^From my-keitai-addr@dokomo.toka.ezweb.nadonado
* ^Subject:.* FRO
| trans
使い方はメールがケータイに送られてきたら、そのまま(つまり 絶対にサブジェクトは変更しないこと)返信を書けばいいんです。 そうすると、オリジナルの人に返信が(あたかもssから送られたように) いきます。
実際、試してみれば、サブジェクトに工夫がしてあることがわかります。 なぜサブジェクトをいじってはいけないかもわかります。
昔、ゼロックスの社内でもこのようなことが行われていました。
当時、まだインターネット・メールのスタイルが確立してなくて、ゼロックス風のメールシステムで動いてましたが、 インターネット・メールと接続、ゲートウェイする方法を 考えました。それと似たようなことを考えました。