Tech.Doc By Fukui
2002.12.12

▼Procmail

Procmailを使う

 Procmailはメールが到着したら直ちにファイルを送達する機構で、本学サーバでも使えようにしました。
利用者がサーバ上で自動処理するように設定するもので、UNIXの知識を必要とします。
 仕組みとしては、起動されると最初にディフォルトの値を何個かの環境変数にセットし、標準 入力装置からエンドオブファイルになるまでメールメッセージを読み込み、ヘッダと本文を分け、ファイル $HOME/.procmailrcを見つけ、それに従って動作します。
 このファイルに書いてある処理の指示に従って到着したメールは適切なフォルダー、または転送先に届けられま す。 rcfileが見つからない場合およびrcfileの処理が正しく終了しない場合は、メールはディフォルトのメールボ ックスに保存されます。
およびrcfileの処理が正しく終了しない場合は、メールはディフォルトのメールボックスに保存されます。

 Procmailは汎用のメールフィルタとして使うことができます。 つまり、特定のメール送信規則によって起動されるように設定しておくことができるのですが、各自でメールが届いた時に確実にprocmailが起動されるようにしておかなければなりません。。
そのため$HOME/.forwardファイルが必要です。

 ではProcmailを利用するために、以下の説明を参考にしていただき、自分のディレクトリに .forward と  .procmailrc 2つのファイルを作成してください。
注意していただく点は、慎重に記述し、まず影響の少ない ところで充分にテストをしてください。間違えるとメールが吹き飛ぶことになりかねません。

.forwardファイル

.forwardには次の2行を記述してください。
2行目はprocmailが存在しかつprocmailで処理したメールはローカルには残さない要に細工してあるスクリプトで す。ですからローカルにも残す場合は必ず1行目の自分のアドレスを書くことが必要です。

  
YOUR_USERNAME   
"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #YOUR_USERNAME"
.procmailrcファイル基本スクリプト
  
環境変数
  
:0 フラグ   
条件   
アクション
.procmailrcでのフラグ

主に使用するフラグのいくつかです。フラグを省略すると、Hhbが指定されたものとみなします。
  
H ヘッダをegrepでの検索対象にします(デフォルト)。       
B 本文をegrepでの検索対象にします。   
E 直前のスクリプトが実行されなかった場合のみ実行されます。   
  これが実行されると、直後に続く「E」フ ラグ付きの一連のスクリプトは実行されません。   
h パイプにヘッダを出力します(デフォルト)。   
b パイプに本文を出力します(デフォルト)。   
f パイプでフィルターし、処理を以降のスクリプトに引き継ぎます。
.procmailrcでの条件

条件は「*」で始まります。それ以降の文字は、先頭と末尾の空白を除去された後、内部の解析ルーチンに渡さ れます。
条件が複数指定された場合、それらすべてを満たすときにアクションが実行されます。条件が満たされない場合 は、それ以降のレシピに処理が移ります。なお、条件が省略された場合は無条件に実行されます。
普通の正規表現以外に、いくつかの特殊な条件を指定することもできます。それらを用いる場合、条件を以下の 文字で開始します。
 
^-- 行頭
$ -- 行末
.-- 任意の文字(改行コードは含まない)
a* -- a で始まる任意の長さの文字列(a のみもある)
a+ -- a で始まる任意の長さの文字列
a? -- a 1文字あるいはなにもなし
\. -- ドット1文字
[abc] -- a か b か c の1文字
[a-z]-- a から z までのどれか1文字
[^a-z]-- a から z までのどれでもない1文字
.procmailrcでのアクション

条件にマッチしたメールに対する処理を記述します。
! メールアドレス
   指定したメールアドレスに転送します。複数のアドレスを指定することもできます。
| コマンドライン
   コマンドラインの標準入力にパイプします。
.procmailrcサンプルファイル

LOGFILE=$HOME/procmail.log
MAILDIR=$HOME/Maildir/

:0
* ^From k-fuku                           (1)
! xxx@mail.provider.ne.jp

:0
* ^Recieved:.*user@mydomain.com               (2)
! xxx@mail.provider.ne.jp

:0
* ^Subject.*test                           (3)
* < 2048
test/.

* ^To:.*center
                             (4)

{
    :0 c
    ! username@docomo.ne.jp

    :0
    $DEFAULT
}

説明:
まず、最初の2行は.procmailrcの始めに環境変数を設定します。 LOGFILEは指定しないとログを残さないので、エ ラーが出ても分からないですし、MAILDIRはProcmailの結果をまとめておくところですから、是非加えておきましょ う。

(1)は k-fukuから届いたメールをxxx@mail.provider.ne.jpに転送する。

(2)は user@mydomain.com宛てのメールをxxx@mail.provider.ne.jpに転送する。

(3)はSubjectに『test』という文字列を含むメールで2Kバイト未満のものを、$HOME/Maildir/test配下に 追記する。

(4)はcenterに宛てられたメールはusername@docomo.ne.jpへ転送し、大学でも読めるようにしている。

Copyright Information Processing Center,MUE