OSDN Git Service

procmail: Generate draft and release pages from ja.po.
[linuxjm/jm.git] / manual / procmail / draft / man5 / procmailex.5
1 .de  Id
2 .ds Rv \\$3
3 .ds Dt \\$4
4 ..
5 .\"if n .pl +(135i-\n(.pu)
6 .Id $Id: procmailex.5,v 1.1 2003/06/16 17:06:43 motoki Exp $
7 .\"*******************************************************************
8 .\"
9 .\" This file was generated with po4a. Translate the source file.
10 .\"
11 .\"*******************************************************************
12 .\"
13 .\" Japanese Version Copyright (c) 2003 Akihiro MOTOKI
14 .\"         all rights reserved.
15 .\" Translated Mon Jun 23 22:53:33 JST 2003
16 .\"         by Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
17 .\"
18 .TH PROCMAILEX 5 \*(Dt BuGless 
19 .rn SH Sh
20 .de  SH
21 .br
22 .ne 11
23 .Sh "\\$1"
24 ..
25 .rn SS Ss
26 .de  SS
27 .br
28 .ne 10
29 .Ss "\\$1"
30 ..
31 .rn TP Tp
32 .de  TP
33 .br
34 .ne 9
35 .Tp \\$1
36 ..
37 .rn RS Rs
38 .de  RS
39 .na
40 .nf
41 .Rs
42 ..
43 .rn RE Re
44 .de  RE
45 .Re
46 .fi
47 .ad
48 ..
49 .de  Sx
50 .PP
51 .ne \\$1
52 .RS
53 ..
54 .de  Ex
55 .RE
56 .PP
57 ..
58 .na
59 .SH 名前
60 procmailex \- procmail 設定ファイルの例
61 .SH 書式
62 \fB$HOME/.procmailrc の設定例\fP
63 .ad
64 .SH 説明
65 設定ファイル (rcfile) の書式の説明は \fBprocmailrc\fP(5)  を参照のこと。
66 .PP
67 重みつきスコアリング手法については \fBprocmailsc\fP(5) に詳しい説明がある。
68 .PP
69 この manpage は、いろいろなレシピの例を示したものである。 rcfile 全体の例については、 \fBprocmail\fP(1)  の \fB備考\fP
70 の節や、procmail のソース配布に含まれる rcfile のサンプル (procmail*/examples/?procmailrc)
71 を参照してほしい。
72 .SH 例
73 scuba\-dive メーリングリストからのメールをすべて選び出して scubafile と いうメールフォルダに入れる (ロックファイルとして
74 scubafile.lock を使用する)。
75 .Sx 3
76 :0: * ^TOscuba scubafile
77 .Ex
78 peter からのメールで、Subject に compilers が入っているものを すべて william に転送する (かつメールのコピーを
79 petcompil に保存する)。
80 .Sx 10
81 :0
82 * ^From.*peter
83 * ^Subject:.*compilers
84 {
85    :0 c
86    ! william@somewhere.edu
87
88    :0
89    petcompil
90 }
91 .Ex
92 上記と同じことを実現する別の方法:
93 .Sx 7
94 :0 c * ^From.*peter * ^Subject:.*compilers ! william@somewhere.edu
95
96    :0 A
97    petcompil
98 .Ex
99 同じことを実現できるが、上記の方法より少し動作が遅い方法:
100 .Sx 9
101 :0 c * ^From.*peter * ^Subject:.*compilers ! william@somewhere.edu
102
103 :0 * ^From.*peter * ^Subject:.*compilers petcompil
104 .Ex
105 procmail を使うのがほとんど初めてで、ちょっとだけ試してみたい場合は、 何らかの \fIセーフティネット\fP を設けておくと助かることが多い。
106 以下の 2 つのレシピを、他のどのレシピより前に入れておくと、 到着したメールのうち常に最新の 32 通を保存することができる。
107 この機能を働かせるためには、これら 2 つのレシピを追加する前に $MAILDIR に `backup'
108 という名前のディレクトリを作っておかなければならない。
109 .Sx 5
110 :0 c backup
111
112 :0 ic | cd backup && rm \-f dummy `ls \-t msg.* | sed \-e 1,32d`
113 .Ex
114 使っているメールシステムが、各メールの先頭の `From ' 行を生成しなかったり、 間違った `From '
115 行を生成したりする場合は、procmail を \-f\- オプションをつけ て呼び出すことでこの問題を修正する (すなわち、正しい `From '
116 行をつける)  ことができる。 この問題を解決する別の方法としては、以下のレシピを rcfile の中で一番最初の
117 レシピとして入れる方法もある。こうすると、全てのメールのヘッダは formail に よりフィルタリングされる。 formail は、メールの先頭にある
118 `From ' 行を 取り除いた上で、さらに `From ' 行を自動生成する。
119 .Sx 2
120 :0 fhw | formail \-I "From " \-a "From "
121 .Ex
122 管理者 (postmaster) 以外から来た全てのメールのヘッダを、(統計をとったり、 メールのデバッグのために)
123 自分だけのヘッダコレクションに追加するには、 次のように設定する。書きこみ時のロックファイルとして `headc.lock' を
124 使用する。パイプ処理が完了する前にロックファイルが削除されることがないよ うに、`w' オプションを指定しなければいけない。指定しなかった場合、
125 パイプが処理対象のメールを受け付けるとすぐに ロックファイルは削除されてしまう。
126 .Sx 3
127 :0 hwc: * !^FROM_MAILER | uncompress headc.Z; cat >>headc; compress
128 headc
129 .Ex
130 上記のレシピで compress の代わりに、もっと圧縮率が良い gzip を使用するには 以下のようにすればよい。
131 .Sx 3
132 :0 hwc: * !^FROM_MAILER | gzip >>headc.gz
133 .Ex
134 1000 バイト未満のメールをすべて自宅のアドレスに転送する (このレシピの場合、ロックファイルは必要ない)。
135 .Sx 3
136 :0 * < 1000 ! myname@home
137 .Ex
138 surfing メーリングリストのまとめ送りのメールを個々のメッセージに分割して、 メールフォルダ surfing に格納する。ロックファイルとして
139 surfing.lock を使用する。
140 .Sx 3
141 :0: * ^Subject:.*surfing.*Digest | formail +1 \-ds >>surfing
142 .Ex
143 postmaster や mailer\-daemon から来た全てのメール(エラーで戻ってきたメールなど)  を postm
144 ファイルに格納する。ロックファイルとして postm.lock を使用する。
145 .Sx 3
146 :0: * ^FROM_MAILER postm
147 .Ex
148 簡単な自動返信用のレシピ。このレシピは、デーモンからのメール (戻ってきた メールやメーリングリストからのメールなど)
149 や自分自身からの自動返信のメールには 自動返信しないことを保証している。もしこのような注意を怠ったならば、 (メール ループなど)
150 大変なことが起こり得る。 このレシピを用いて、受信したすべてのメールに対して自動応答を行うためには、 言うまでもないが、 rcfile
151 の他の全てのレシピより前にこれを置く必要がある。 実際には、講読しているメーリングリストからのメールを処理するレシピの \fI後ろ\fP
152 にこのレシピを置くことを推奨する。一般的には、 メーリングリストに対して自動返信を行うのはよい考えではない。 (確かに、正規表現
153 !^FROM_DAEMON によってそのようなメールはすでに捕まえ られているはずだが、メーリングリストが一般的な慣習に従っていない場合は、
154 これだけでは \fI不十分\fP だからである。)
155 .Sx 6
156 :0 h c
157 * !^FROM_DAEMON
158 * !^X\-Loop: your@own.mail.address
159 | (formail \-r \-I"Precedence: junk" \e
160     \-A"X\-Loop: your@own.mail.address" ; \e
161    echo "Mail received.") | $SENDMAIL \-t
162 .Ex
163 以下はもっと複雑な自動返信のレシピの例で、有名な \fBvacation\fP(1)  プログラムと同じ機能を実現するものである。 このレシピは
164 (メールループを防ぐなどの) 直前のレシピと同じ方針で作られている。 さらに、このレシピでは送信者の名前を抽出して vacation
165 データベースを作っており、 名前が新しいものだったときには vacation.cache ファイルにその名前が追加 される
166 (vacation.cache ファイルは formail により管理されており、 常に最近の送信者名が格納され、ファイルのサイズの上限が約 8192
167 バイトに なることが formail により保証される)。 新しい送信者名だった場合は、自動応答メッセージが送信される。
168 .PP
169 見て分かるように、以下のレシピでは条件の「間」にコメントが 入っている。このようなコメントの入れ方は認められている。
170 しかし、条件と同じ行にコメントを入れては「いけない」。
171 .Sx 18
172 SHELL=/bin/sh # for other shells, this might need adjustment
173
174 :0 Whc: vacation.lock
175  # Perform a quick check to see if the mail was addressed to us
176 * $^To:.*\e<$\eLOGNAME\e>
177  # Don't reply to daemons and mailinglists
178 * !^FROM_DAEMON
179  # Mail loops are evil
180 * !^X\-Loop: your@own.mail.address
181 | formail \-rD 8192 vacation.cache
182
183   :0 ehc         # if the name was not in the cache
184   | (formail \-rI"Precedence: junk" \e
185             \-A"X\-Loop: your@own.mail.address" ; \e
186           echo "I received your mail,"; \e
187           echo "but I won't be back until Monday."; \e
188           echo "\-\- "; cat $HOME/.signature \e
189          ) | $SENDMAIL \-oi \-t
190 .Ex
191 TeX に関係する全メッセージを、texmail というディレクトリに、一通毎に別の、 他とは重複しない名前のファイルに保存する
192 (ここで指定するディレクトリは あらかじめ存在しなければならない)。 この場合、ロックファイルを使用する必要がないので、 レシピでもそうなっている。
193 .Sx 3
194 :0 * (^TO|^Subject:.*)TeX[^t] texmail
195 .Ex
196 上と同じだが、メールを番号が振られたファイル (MH 形式のフォルダ)  に格納する点が異なる。
197 .Sx 3
198 :0 * (^TO|^Subject:.*)TeX[^t] texmail/.
199 .Ex
200 メールを同時に複数のディレクトリ・フォルダに振り分けることもできる。 以下のレシピは、メールを 2 つの MH 形式のフォルダと 1 つのディレクトリ・
201 フォルダに振り分ける。実際にはファイルは 1 つ作成されるだけで、追加で ハードリンクが 2 つ作成される。
202 .Sx 3
203 :0 * (^TO|^Subject:.*)TeX[^t] texmail/. wordprocessing dtp/.
204 .Ex
205 会議 (meeting) に関する全メッセージを月毎に異なるディレクトリに 保存する。例えば、1994 年 1 月だったとすると、フォルダ名は
206 `94\-01/meeting' という名前となり、ローカルロックファイルは `94\-01/meeting.lock' になる。
207 .Sx 3
208 :0: * meeting `date +%y\-%m`/meeting
209 .Ex
210 上と同じだが、`94\-01' ディレクトリが存在しなかった場合、 自動的に作成される。
211 .Sx 9
212 MONTHFOLDER=`date +%y\-%m`
213
214 :0 Wic * ? test ! \-d $MONTHFOLDER | mkdir $MONTHFOLDER
215
216 :0: * meeting ${MONTHFOLDER}/meeting
217 .Ex
218 上と同じだが、少しだけ違う方法:
219 .Sx 6
220 MONTHFOLDER=`date +%y\-%m` DUMMY=`test \-d $MONTHFOLDER || mkdir $MONTHFOLDER`
221
222 :0: * meeting ${MONTHFOLDER}/meeting
223 .Ex
224 複数のメーリングリストを講読していて、そのメーリングリストのいくつかに クロスポストする人がいる場合、同じメッセージを何回か受け取ることがよくある
225 (各メーリングリストからは一通だが)。以下の簡単なレシピを使うと、重複した メールを除去することができる。このレシピでは、 formail
226 を通じて最近受信した メールの Message\-ID を格納する 8KB のキャッシュ・ファイルを作っている。 Message\-ID
227 は新着メール毎に一意であることが保証されているので、Message\-ID を使うのは重複するメールを除くのにまさにぴったりの方法である。このレシピを
228 rcfile の一番最初に置くだけで、重複するメールはこのレシピを通過できなくなる。
229 .Sx 2
230 :0 Wh: msgid.lock | formail \-D 8192 msgid.cache
231 .Ex
232 注意すべきこととして、これより後のレシピで配信に問題があると procmail は
233 そのメールをキューにもう一度入れようとする。そうすると、次回のキュー処理の 際にこのメールは重複しているとみなされ、なくなってしまう。
234 自分のスクリプト作成技術にあまり自信がない場合は、代わりに以下のレシピを 使うことができる。このレシピは、重複するメールをどこか捨ててしまうのではなく、
235 別のフォルダに入れる。もちろん、定期的にこのフォルダを空にするのは、 自分でやらないといけない。
236 .Sx 5
237 :0 Whc: msgid.lock | formail \-D 8192 msgid.cache
238
239 :0 a: duplicates
240 .Ex
241 procmail は MH 形式のフォルダに直接メッセージを配信することができるが、 本物の MH が管理している未読番号 (unseen
242 sequence) の更新は行わない。 procmail にも未読番号の更新を行わせたい場合は、以下のようなレシピを使うとよい。 この例では、本文に
243 spam という言葉を含む全てのメールを spamfold という MH フォルダに入れている。ローカルロックファイルが必要な点に注意すること。
244 なぜなら、MH のプログラム群は番号ファイル (sequences file) のロックを 行わないからである。したがって、番号ファイルを変更する MH
245 のプログラムが 非同期で複数実行されると、内容がおかしくなったり、いつの間にか変更が失われる
246 可能性がある。残念ながら、ロックファイルを使ってもこの問題を完全に解決する ことはできない。`show'、`mark' や他の MH
247 プログラムの実行中に rcvstore が起動されることがあり得るからである。この問題が MH の将来のバージョンで
248 修正されることを期待しているが、それまでは、番号が失なわれたりおかしく なったりする危険と、未読番号を使う利点を、天秤にかけた上で使わなけらば
249 ならないだろう。
250 .Sx 3
251 :0 :spamfold/$LOCKEXT * B ?? spam | rcvstore +spamfold
252 .Ex
253 emacs のメールフォルダ (RMAIL や VM といった emacs 上で動作するメール・ パッケージで管理されているメールフォルダ)
254 に直接配信する場合、 emacs と 同じロックファイルを使用すべきである。 emacs のメーラーはこの点で少し おかしなところがあり、すでに
255 emacs の内部バッファに読み込まれている メールフォルダに第三者がメールを配信すると、非常に混乱してしまう。 以下のレシピは $HOME の値が
256 /home/john の場合の例である。
257 .Sx 5
258 MAILDIR=Mail
259
260 :0:/usr/local/lib/emacs/lock/!home!john!Mail!mailbox * ^Subject:.*whatever
261 mailbox
262 .Ex
263 別の方法としては、procmail 専用のメールボックスを設け、procmail はそこに メールを配信するようにして、定期的に \fBmovemail\fP
264 を使ってメールボックスを空にし、内容を emacs メーラーのファイルにコピーする こともできる。 movemail
265 はメールボックス単位のローカルロックファイル mailbox.lock を使用する。 実のところ、procmail
266 と一緒に使う場合、この方法を使う方が望ましい。
267 .PP
268 メールから特定のヘッダを抽出して環境変数に設定するには、 以下のいずれかの方法も使用することができる。
269 .Sx 5
270 SUBJECT=`formail \-xSubject:` # 通常のフィールド FROM=`formail \-rt \-xTo:` # 特殊な例
271
272 :0 h # 他の方法 KEYWORDS=| formail \-xKeywords:
273 .Ex
274 procmailrc ファイル内で一時ファイルを使っていて、procmail 終了直前に
275 一時ファイルが確実に削除されるようにするには、以下のようにすればよい。
276 .Sx 2
277 TEMPORARY=$HOME/tmp/pmail.$$ TRAP="/bin/rm \-f $TEMPORARY"
278 .Ex
279 キーワード TRAP は procmail の終了コードを変更するために使うこともできる。 つまり、通常の終了コードの代わりに終了コード `1' を
280 procmail が返すように したい場合、以下のようにすればよい:
281 .Sx 3
282 EXITCODE=""
283 TRAP="exit 1;"   # 最後のセミコロンは大事である。 exit は独立した
284                  # コマンドではなくシェルのコマンドだからである。
285 .Ex
286 終了コードに TRAP から起動されたプログラムの結果を反映させる必要がない 場合は、以下のように書くだけでもよい。
287 .Sx 1
288 EXITCODE=1
289 .Ex
290 以下のレシピは、受信したメールのうち postscript ファイルと思われるメールを 全部印刷する。
291 .Sx 3
292 :0 Bb * ^^%! | lpr
293 .Ex
294 次のレシピは同じ動作をするが、もう少し選択条件が厳しくなっている。 print\-server から来た postscript ファイルだけを印刷する。
295 最初の条件は、ヘッダ内に指定パタンが見つかった場合のみマッチする。 二番目の条件は、メール本文の先頭でのみマッチする。
296 .Sx 4
297 :0 b * ^From[ :].*print\-server * B ?? ^^%! | lpr
298 .Ex
299 上と同じだが、少しだけ違う方法:
300 .Sx 7
301 :0
302 * ^From[ :].*print\-server
303 {
304   :0 B b
305   * ^^%!
306   | lpr
307 }
308 .Ex
309 これも同様:
310 .Sx 4
311 :0 HB b * ^^(.+$)*From[ :].*print\-server * ^^(.+$)*^%! | lpr
312 .Ex
313 メールアカウントを 2つ持っているとしよう。どちらも常時使用しているが、 とても離れた場所にあるとする (つまり、いずれか一方のアカウントに届いた
314 メールしか読むことができないとする)。アカウント 1 に届いたメールを アカウント 2 に転送し、反対向きも行いたいという状況を考える。
315 まず思いつくのは、両方のサイトで .forward ファイルを使う方法だが、 もちろんうまく動かない。メールのループが起こってしまうからだ。
316 このメールのループは、両方のサイトの $HOME/.procmailrc ファイルの先頭に 以下のレシピを入れておくことで避けることができる。
317 両方のサイトで同じ X\-Loop: フィールドを追加するようにしておけば、 メールはどちらのアカウントからでも安全に
318 もう一方のアカウントに転送することができるようになる。
319 .Sx 4
320 :0 c
321 * !^X\-Loop: yourname@your.main.mail.address
322 | formail \-A "X\-Loop: yourname@your.main.mail.address" | \e
323    $SENDMAIL \-oi yourname@the.other.account
324 .Ex
325 誰かが件名に `retrieve' というキーワードを入れたメールを送ってくると、 以下のレシピは自動的に info_file
326 の内容を送信者に送り返す。 メールを送信するレシピではいつもそうであるが、メールのループが起こらない ように気を付けること。
327 .Sx 6
328 :0 * !^From +YOUR_USERNAME * !^Subject:.*Re: * !^FROM_DAEMON *
329 ^Subject:.*retrieve | (formail \-r ; cat info_file) | $SENDMAIL \-oi \-t
330 .Ex
331 今度は、メールでアクセス可能な非常に簡単なファイルサーバの例である。 もっと高度な機能が必要な場合には、 \fBSmartList\fP
332 を調べてみることをお薦めする (SmartList は procmail の配布場所と同じ場所で入手できる)。
333 以下のリストにあるように、このファイルサーバは一つのリクエストに対し 最大でも一つのファイルしか送り返さない。また、受信したメールの本文は無視され、
334 Subject: 行は「Subject: send file the_file_you_want」 (空白には意味がある)
335 という形式になっていなければならない。 ファイルネームがドット (.) で始まるファイルは送り返さないし、
336 ファイルサーバのディレクトリ・ツリーの外部にあるファイルを 取り出すこともできないようになっている
337 (この例に手を入れる場合は、この最後の制限項目を不注意で 緩めることがないように気をつけること)。
338 .Sx 18
339 :0
340 * ^Subject: send file [0\-9a\-z]
341 * !^X\-Loop: yourname@your.main.mail.address
342 * !^Subject:.*Re:
343 * !^FROM_DAEMON
344 * !^Subject: send file .*[/.]\e.
345 {
346   MAILDIR=$HOME/fileserver # ファイルサーバのディレクトリに移動
347
348   :0 fhw                   # 返信用ヘッダ作成とファイル名抽出
349   * ^Subject: send file \e/[^ ]*
350   | formail \-rA "X\-Loop: yourname@your.main.mail.address"
351
352   FILE="$MATCH"            # 要求のあったファイル名
353
354   :0 ah
355   | cat \- ./$FILE 2>&1 | $SENDMAIL \-oi \-t
356 }
357 .Ex
358 以下の例は、特定の MIME 形式でエンコードされて届いた plain\-text のメールを、よりコンパクトな 8 ビット形式に前もって変換する。
359 こうすることで、多くのプログラムで簡単に使用したり表示したり できるようになる。 \fBmimencode\fP(1)  プログラムは Nathaniel
360 Borenstein の metamail パッケージに含まれている。
361 .Sx 17
362 :0
363 * ^Content\-Type: *text/plain
364 {
365   :0 fbw
366   * ^Content\-Transfer\-Encoding: *quoted\-printable
367   | mimencode \-u \-q
368
369      :0 Afhw
370      | formail \-I "Content\-Transfer\-Encoding: 8bit"
371
372   :0 fbw
373   * ^Content\-Transfer\-Encoding: *base64
374   | mimencode \-u \-b
375
376      :0 Afhw
377      | formail \-I "Content\-Transfer\-Encoding: 8bit"
378 }
379 .Ex
380 以下の例はあまり見かけないものだが、こんな機能もこともできるという 紹介である。HOME ディレクトリに ".urgent"
381 という名前のファイルがあり、 そのファイルに (一人の) 人の名前が書かれていて、その人からメールが来た場合、 通常のメールフォルダに入れる代わりに
382 $MAILDIR/urgent に格納したいとする。 このレシピでそれができる。 (気を付けるべき点として、$HOME/.urgent
383 のファイルサイズは $LINEBUF より 小さくすべきである。必要なら LINEBUF の値を増やすこと。)
384 .Sx 5
385 URGMATCH=`cat $HOME/.urgent`
386
387 :0: * $^From.*${URGMATCH} urgent
388 .Ex
389 procmail の全く別の使い方として、特定の (外に出ていく) テキストやメールに
390 条件に応じてフィルタを適用するといった方法がある。代表的な例としては、 外に出ていく全てのメールを通すフィルタで、 必要な場合のみ MIME
391 エンコードされるようにするものがある。 この場合には、パイプの中段として procmail を起動することになる。
392 .Sx 1
393 cat newtext | procmail ./mimeconvert | mail chris@where.ever
394 .Ex
395 \fBmimeconvert\fP rcfile には、以下のようなルールが入ることだろう (=0x80= や =0xff= には 実際の 8
396 ビット文字を入れること):
397 .Sx 10
398 DEFAULT=|    # いつものようにメールを配信するのではなく
399              # 標準出力にパイプする
400 :0 Bfbw
401 * [=0x80=\-=0xff=]
402 | mimencode \-q
403
404   :0 Afhw
405   | formail \-I 'MIME\-Version: 1.0' \e
406      \-I 'Content\-Type: text/plain; charset=ISO\-8859\-1' \e
407      \-I 'Content\-Transfer\-Encoding: quoted\-printable'
408 .Ex
409 .SH 関連項目
410 .na
411 .nh
412 \fBprocmail\fP(1), \fBprocmailrc\fP(5), \fBprocmailsc\fP(5), \fBsh\fP(1), \fBcsh\fP(1),
413 \fBmail\fP(1), \fBmailx\fP(1), \fBbinmail\fP(1), \fBuucp\fP(1), \fBaliases\fP(5),
414 \fBsendmail\fP(8), \fBegrep\fP(1), \fBgrep\fP(1), \fBbiff\fP(1), \fBcomsat\fP(8),
415 \fBmimencode\fP(1), \fBlockfile\fP(1), \fBformail\fP(1)
416 .hy
417 .ad
418 .SH 著者
419 Stephen R. van den Berg
420 .RS
421 <srb@cuci.nl>
422 .RE
423 Philip A. Guenther
424 .RS
425 <guenther@sendmail.com>
426 .RE
427 .\".if n .pl -(\n(.tu-1i)
428 .rm SH
429 .rn Sh SH
430 .rm SS
431 .rn Ss SS
432 .rm TP
433 .rn Tp TP
434 .rm RS
435 .rn Rs RS
436 .rm RE
437 .rn Re RE