0
|
1 .\" @(MHWARNING)
|
|
2 .\" written by MH-plus project
|
|
3 .SC SLOCAL 1
|
|
4 .NA
|
|
5 slocal \- 特別なローカルメール配送
|
|
6 .SY
|
|
7 @(MHETCPATH)/slocal \%[address\ info\ sender]
|
|
8 .na
|
|
9 .br
|
|
10 \%[\-addr\ address]
|
|
11 \%[\-info\ data]
|
|
12 \%[\-sender\ sender]
|
|
13 .br
|
|
14 \%[\-user\ username]
|
|
15 \%[\-mailbox\ mbox]
|
|
16 \%[\-file\ file]
|
|
17 .\" \%[\-home\ homedir]
|
|
18 .br
|
|
19 \%[\-maildelivery\ deliveryfile]
|
|
20 \%[\-verbose] \%[\-noverbose]
|
|
21 \%[\-debug]
|
|
22 \%[\-help]
|
|
23 .ad
|
|
24 .DE
|
|
25 \fIslocal\fP は、選択基準の複雑な設定に応じて、届いたメールを処理するように
|
|
26 設計されたプログラムです。
|
|
27 通常、\fIslocal\fP は手動で起動するのではなく、
|
|
28 システムのメッセージ配送エージェント(MTA) が
|
|
29 代わって \fIslocal\fP を起動します。
|
|
30
|
|
31 \fIslocal\fP で使われるメッセージ選択基準は、ユーザーのホームディレクトリ
|
|
32 にある \fI\&.maildelivery\fP ファイルに書かれます。
|
|
33 このファイルのフォーマットは以下にあります。
|
|
34
|
|
35 メッセージ配送アドレスとメッセージ送り主は、可能であれば
|
|
36 メッセージ配送エージェント(MTA) のエンベロープ情報によって決定されます。
|
|
37 \fISendMail\fP を使用している場合、もしあれば、送り主は
|
|
38 UUCP \*(lqFrom\ \*(rq 行から取得されます。
|
|
39 コマンド・ライン引数もしくは `\-addr' と `\-sender' オプションの
|
|
40 引数で、これらの値を置き換えるが出来ます。
|
|
41
|
|
42 メッセージは通常、標準入力から読み込まれます。
|
|
43 標準入力から読み込む代わりに、`\-file' オプションで、
|
|
44 メッセージが読み込まれるべきファイル名を指定することが出来ます。
|
|
45 `\-user' オプションは、メールを配送するユーザー名を \fIslocal\fP に
|
|
46 教えるものです。
|
|
47 `\-mailbox' オプションは、ユーザーのメールドロップファイル名を
|
|
48 \fIslocal\fP に教えるものです。
|
|
49
|
|
50 `\-info' オプションは、あなたに代わって \fIslocal\fP が呼び出した
|
|
51 サブプロセスに、任意の引数を渡すのに使われます。
|
|
52 `\-verbose' オプションをつけると、
|
|
53 \fIslocal\fR は実行中の動作を標準出力に出します。
|
|
54 `\-debug' オプションをつけると、
|
|
55 より詳細なデバッグ出力を標準エラー出力(stderr)に出します。
|
|
56
|
|
57 .Uh "メッセージ配送エージェント(MTA)"
|
|
58 もし、使用している MTA が \fISendMail\fP であるなら、
|
|
59 .sp
|
|
60 .nf
|
|
61 .in +.5i
|
|
62 \*(lq|\ @(MHETCPATH)/slocal\ \-user\ username\*(rq
|
|
63 .in -.5i
|
|
64 .fi
|
|
65 .sp
|
|
66 という行を、ホームディレクトリの \&.forward ファイルに含んでいればよいです。
|
|
67 これにより、\fISendMail\fP が代わりに \fIslocal\fP を起動してくれます。
|
|
68
|
|
69 もし使用している MTA が \fIMMDF-I\fP であれば、
|
|
70 ホームディレクトリに、@(MHETCPATH)/slocal を bin/rcvmail として
|
|
71 (シンボリック) リンクしておけばよいです。
|
|
72 これにより、正しい \*(lq\fIaddress\ info\ sender\fP\*(rq 引数で、
|
|
73 \fIMMDF-I\fP が代わりに \fIslocal\fP を起動します。
|
|
74
|
|
75 もし使用している MTA が \fIMMDF-II\fP である場合、
|
|
76 \fIslocal\fP は使えません。
|
|
77 同等の機能が \fIMMDF-II\fP によって既に用意されています。
|
|
78 詳しくは、maildelivery(5) を参照して下さい。
|
|
79
|
|
80 .Uh "maildelivery ファイル"
|
|
81
|
|
82 \fI\&.maildelivery\fR ファイルは、どの様にローカル配送を行なうかを制御します。
|
|
83 このファイルの各行は、空白かコンマで区切られた五つのフィールドで成り立って
|
|
84 います。
|
|
85 ダブル・クォートが尊重されますので、
|
|
86 これらの文字列は、ダブル・クォートで囲まれることで、
|
|
87 一つの引数としてみなされます。
|
|
88 ダブル・クォート自体は、その前にバックスラッシュをつけて含めることができます。
|
|
89 `#' で始まる行は無視されます。
|
|
90 \fI\&.maildelivery\fR ファイルの各行のフォーマットは次の通りです。
|
|
91
|
|
92
|
|
93 \fBheader pattern action result string\fR
|
|
94 .sp
|
|
95 .in +.5i
|
|
96 .ti -.5i
|
|
97 \fBheader\fP:
|
|
98 .br
|
|
99 パターンを検索するヘッダ名。
|
|
100 メッセージ・ヘッダにありうる全てのフィールド。
|
|
101 次の特別なフィールドも定義されています。
|
|
102 .sp
|
|
103 .in +1i
|
|
104 .ta +1i
|
|
105 .ti -1i
|
|
106 \fIsource\fR 送り主情報(MTA のエンベロープから取得。もしくは Sendmail であれば UUCP From から)
|
|
107 .ti -1i
|
|
108 \fIaddr\fR 送信先情報(MTA のエンベロープから取得)
|
|
109 .ti -1i
|
|
110 \fIdefault\fR メッセージがどれにも配送されなかった場合のみマッチ
|
|
111 .ti -1i
|
|
112 \fI*\fR 全てにマッチ
|
|
113 .in -1i
|
|
114
|
|
115 .ti -.5i
|
|
116 \fBpattern\fR:
|
|
117 .br
|
|
118 特定のヘッダー行にマッチする文字列の並び。
|
|
119 マッチングには大文字/小文字は関係ありませんが、正規表現は使えません。
|
|
120
|
|
121 .ti -.5i
|
|
122 \fBaction\fR:
|
|
123 .br
|
|
124 メッセージ配送のために行なうアクション
|
|
125 .sp
|
|
126 .in +1i
|
|
127 .ta +1i
|
|
128 .ti -1i
|
|
129 \fIdestroy\fR 読まずに捨てます。このアクションは常に成功します。
|
|
130
|
|
131 .ti -1i
|
|
132 \fIfile\fR もしくは > \fBstring\fR で指定されたファイルに追加します。
|
|
133 メッセージは、メッセージ配送システム(MTS) に使われた
|
|
134 メールドロップ形式でファイルに追加されます。
|
|
135 メッセージがファイルに追加することが出来れば、このアクションは成功します。
|
|
136 ファイルに書き込み中に、このメッセージがファイルに追加された日時を示す
|
|
137 \*(lqDelivery\-Date:\ date\*(rq ヘッダが付け加えられます。
|
|
138
|
|
139 .ti -1i
|
|
140 \fImbox\fR \fIfile\fR と同義です。しかし常に、\fIpackf\fR で使われる
|
|
141 フォーマット (MMDF の mailbox フォーマット) でメッセージが追加されます。
|
|
142
|
|
143 .ti -1i
|
|
144 \fIpipe\fR もしくは | メッセージを \fBstring\fR で指定されたコマンドへ、
|
|
145 標準入力でパイプします。この際、string を解釈するのに Bourne shell
|
|
146 \fIsh\fR(1) を使います。
|
|
147 シェルに文字列を送る前に、次の内蔵変数に展開されます。
|
|
148 .sp
|
|
149 .in +1i
|
|
150 .ta +1i
|
|
151 .ti -1i
|
|
152 $(sender) 送り主情報(MTA のエンベロープ情報から。もしくは Sendmail であれば UUCP From から)
|
|
153 .ti -1i
|
|
154 $(address) 送信先情報(MTA のエンベロープから取得)
|
|
155 .ti -1i
|
|
156 $(size) メッセージのサイズ (バイト数)
|
|
157 .ti -1i
|
|
158 $(reply\-to) メッセージの \*(lqReply\-To:\*(rq か \*(lqFrom:\*(rq 行
|
|
159 .ti -1i
|
|
160 $(info) サブプロセスに引き渡す任意の引数(\-info オプション参照)
|
|
161 .in -1i
|
|
162 .ti -1i
|
|
163 \fIqpipe\fR or
|
|
164 .ti -1i
|
|
165 \fI<caret>\fR \fIpipe\fR に似ています。
|
|
166 が、内蔵変数展開後、シェルの助けを借りずに、コマンドを直接実行します。
|
|
167 このアクションは、シェルが解釈してしまうかも知れない、特定の文字列の
|
|
168 クオート処理を避けるために用いられます。
|
|
169 .in -1i
|
|
170
|
|
171 .ti -.5i
|
|
172 \fBresult\fR:
|
|
173 .br
|
|
174 アクションがどの様に実行されるべきかを示します。
|
|
175
|
|
176 .in +1i
|
|
177 .ta +1i
|
|
178 .ti -1i
|
|
179 \fIA\fR アクションを実行します。
|
|
180 アクションが成功すれば、メッセージは配送されたと見なされます。
|
|
181
|
|
182 .ti -1i
|
|
183 \fIR\fR アクションを実行します。
|
|
184 アクションの結果にも関わらず、
|
|
185 メッセージは配送されたと見なされません。
|
|
186
|
|
187 .ti -1i
|
|
188 \fI?\fR メッセージが配送されていない時のみ、アクションを実行します。
|
|
189 アクションが成功すれば、メッセージは配送されたと見なされます。
|
|
190
|
|
191 .ti -1i
|
|
192 \fIN\fR メッセージが配送されておらず、前のアクションが成功した時のみ、
|
|
193 アクションを実行します。
|
|
194 アクションが成功すれば、メッセージは配送されたと見なされます。
|
|
195 .sp
|
|
196 .in -1i
|
|
197 .in -.5i
|
|
198 要約すると、例として、
|
|
199 .sp
|
|
200 .if t .in +.5i
|
|
201 .nf
|
|
202 .ta \w'default 'u +\w'mh-workersxx 'uC +\w'destroy 'uC +\w'result 'u
|
|
203 #\fIfield\fR \fIpattern\fR \fIaction\fR \fIresult\fR \fIstring\fR
|
|
204 # `#' で始まる行は無視され、空行として扱われます
|
|
205 #
|
|
206 # \*(lqTo:\*(rq 行に mmdf2 とあるものは、mmdf2.log にファイルされます
|
|
207 \fITo mmdf2 file A mmdf2.log\fP
|
|
208 # mmdf からのメッセージを err-message-archive というプログラムにパイプします
|
|
209 \fIFrom mmdf pipe A /bin/err-message-archive\fP
|
|
210 # \*(lqSender:\*(rq アドレスが \*(lqmh-workers\*(rq であるものは、
|
|
211 # まだファイルしてないなら、mh.log にファイルされます
|
|
212 \fISender mh-workers file ? mh.log\fP
|
|
213 # \*(lqTo:\*(rq unix なら、unix-news ファイルへ出力します
|
|
214 \fITo Unix > A unix-news\fP
|
|
215 .\" # アドレスが jpo=mmdf なら、mmdf-redist へパイプします
|
|
216 .\" \fIaddr jpo=mmdf | A mmdf-redist\fP
|
|
217 # アドレスが jpo=ack なら、受け取り通知を返送します
|
|
218 \fIaddr jpo=ack \fP|\fI R \*(lq/bin/resend\0\-r\0$(reply-to)\*(rq\fP
|
|
219 # steve からのは、全部 destroy (読まずに捨てる)
|
|
220 \fIFrom steve destroy A \-\fP
|
|
221 # これでもまだマッチしないものは、mailbox へ落します
|
|
222 \fIdefault \- > ? mailbox\fP
|
|
223 # rcvtty を常に走らせる
|
|
224 \fI* \- \fP|\fI R /mh/lib/rcvtty\fP
|
|
225 .re
|
|
226 .fi
|
|
227 .if t .in -.5i
|
|
228
|
|
229 ファイルは常に全部読まれます。
|
|
230 よって複数マッチする可能性があり、マッチした分、アクションを実行します。
|
|
231 \fI\&.maildelivery\fR ファイルは、owner がユーザーかルートでなくてはならず、
|
|
232 書き込みは owner によってのみ可能でなくてはなりません。
|
|
233 \fI\&.maildelivery\fR ファイルが見つからない、もしくはメッセージを配送
|
|
234 するアクションを実行できない場合は、
|
|
235 @(MHETCPATH)/maildelivery ファイルを同様のルールに従って読まれます。
|
|
236 このファイルは、owner がルートで、ルートによってのみ書き込み可能でなくては
|
|
237 なりません。
|
|
238 もしこのファイルがないとか、メッセージの配送するアクションが実行できない
|
|
239 という場合は、ユーザーのメールドロップに標準配送されます。
|
|
240
|
|
241 .Uh "サブプロセスの環境"
|
|
242 プロセスが呼ばれた場合、その環境は以下の通りです:
|
|
243 ユーザー/グループIDは、受取人のIDにセットされます。
|
|
244 ワーキング・ディレクトリは、受取人のホーム・ディレクトリになります。
|
|
245 umask は 0077 です。
|
|
246 プロセスは /dev/tty を持ちません。
|
|
247 標準入力はメッセージにセットされます。
|
|
248 標準出力と診断出力は /dev/null にセットされます。
|
|
249 他の全てのファイル記述子はクローズされます。
|
|
250 環境変数 \fB$USER\fR、\fB$HOME\fR、\fB$SHELL\fR は適切にセットされ、
|
|
251 その他の環境変数はありません。
|
|
252
|
|
253 プロセスには、実行するためにある時間を与えられます。
|
|
254 もしプロセスがこの制限以内に終了出来なかったら、
|
|
255 プロセスは終了されます。
|
|
256 この時間は、size をメッセージのバイト数として、
|
|
257 ((size × 60) + 300) 秒として計算されます。
|
|
258
|
|
259 プロセスの終了ステータスは、アクションが成功したかどうかに応じます。
|
|
260 終了ステータスがゼロであれば、アクションは成功したことを意味します。
|
|
261 これ以外の終了ステータス (もしくは異常終了) はアクションが失敗したことを
|
|
262 意味します。
|
|
263
|
|
264 時間制限を避けるために、
|
|
265 あなたは、\fIforking\fR によって開始するプロセスを実行しようと
|
|
266 するかも知れません。
|
|
267 親プロセスはすぐに適切な値を返すだろうし、子プロセスは
|
|
268 必要とするだけ長く実行し続けることが出来ます。
|
|
269 このやり方は、親プロセスが終了ステータス 0 を返す時は、いくらか
|
|
270 危険です。
|
|
271 親プロセスが終了ステータス 非0 を返す時は、
|
|
272 このやり方で、メール・ドロップに素早く配送させることが出来ますが。
|
|
273 @BEGIN: MSGID
|
|
274
|
|
275 .Uh "重複メッセージの削除"
|
|
276 \fIslocal\fR は、重複メッセージを発見し削除することが可能です。
|
|
277 これを行なうには、$HOME ディレクトリに
|
|
278 \&.maildelivery.pag と \&.maildelivery.dir という
|
|
279 二つの空のファイルを作ります。
|
|
280 これらは、入ってきたメッセージの Message-ID を貯めておくために
|
|
281 使われる ndbm ファイルです。
|
|
282 @END: MSGID
|
|
283 .Fi
|
|
284 ^@(MHETCPATH)/mtstailor~^テイラー・ファイル
|
|
285 ^$HOME/\&.maildelivery~^ローカル配送を制御するファイル
|
|
286 ^@(MHETCPATH)/maildelivery~^標準のファイルに代わる
|
|
287 ^@(MHDROPLOC)~^デフォルトのメールドロップ
|
|
288 .Sa
|
|
289 rcvstore(1), mhook(1), mh\-format(5)
|
|
290 @BEGIN: MMDFIIMTS
|
|
291 , maildelivery(5)
|
|
292 @END: MMDFIIMTS
|
|
293 .De
|
|
294 `\-noverbose'
|
|
295 .Ds
|
|
296 `\-maildelivery \&.maildelivery'
|
|
297 .Ds
|
|
298 `\-mailbox @(MHDROPLOC)'
|
|
299 .Ds
|
|
300 `\-file' デフォルトは標準入力
|
|
301 .Ds
|
|
302 `\-user' デフォルトは現在のユーザー
|
|
303 .Co
|
|
304 無し。
|
|
305 .Hi
|
|
306 @BEGIN: MHMTS
|
|
307 古いバージョンの \fIMH\fR との互換性により、
|
|
308 \fIslocal\fR がユーザーの \fI\&.maildelivery\fR ファイルを見つけられ
|
|
309 なかった場合、ユーザーの $HOME ディレクトリで、古い形の rcvmail の
|
|
310 実行を試みます。
|
|
311 まず最初に
|
|
312
|
|
313 .ti +.5i
|
|
314 \&.mh\(rureceive file maildrop directory user
|
|
315
|
|
316 の実行を試み、失敗したら、
|
|
317 あきらめてユーザーのメールドロップへ書き込む前に、
|
|
318
|
|
319 .ti +.5i
|
|
320 $HOME/bin/rcvmail user file sender
|
|
321
|
|
322 の実行を試みます。
|
|
323
|
|
324 加えて、
|
|
325 フックかプロセスが起動された時はいつでも、
|
|
326 標準入力に加えて、ファイル記述子 3 がメッセージにセットされます。
|
|
327
|
|
328 @END: MHMTS
|
|
329 \fIslocal\fP は、\fIMMDF-II\fP で提供されている \fImaildelivery\fP 機構と
|
|
330 逆互換性があるように設計されています。
|
|
331 だから、\fIslocal\fP の機能性であるように、
|
|
332 \fI\&.maildelivery\fP ファイルの文法が制限されています。
|
|
333
|
|
334 0 終了ステータスに加えて、\fIMMDF\fR は
|
|
335 \fIRP_MOK\fR (32) と \fIRP_OK\fR (9) という値を取ります。
|
|
336 これは、メッセージが完全に配送された、という意味です。
|
|
337 異常終了も含むそれ以外の非 0 終了ステータスでは、
|
|
338 \fIMMDF\fR は \fIRP_MECH\fR (200) として解釈します。
|
|
339 これは、別のルートを使った、という意味です
|
|
340 (メールドロップにメッセージを配送します)。
|
|
341 .Bu
|
|
342 たった二つのリターンコードだけが意味があります。他もそうあるべきです。
|
|
343
|
|
344 \fIslocal\fP は、\fBMMDF-II\fP により提供された \fImaildelivery\fP の
|
|
345 機能性と逆互換性があります。
|
|
346
|
|
347 \fImaildelivery\fR 機構のある \fIMMDF\fR のバージョンは、
|
|
348 \fIMMDF\fP の初期のバージョンと全く互換性がありません。
|
|
349 \fIMMDF-I\fP という古い形式のフックを持つ場合は、
|
|
350 \fI\&.maildelivery\fR file として、次の一行だけ書いたものを
|
|
351 用意するのが望ましいです。
|
|
352
|
|
353 .ti +.5i
|
|
354 default \- pipe A \*(lqbin/rcvmail $(address) $(info) $(sender)\*(rq
|
|
355 .En
|