comparison doc/ja-mhn.me @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:bce86c4163a3
1 .\" This file is automatically generated. Do not edit!
2 .\" written by MH-plus project
3 .SC MHN 1
4 .NA
5 mhn \- マルチメディア MH
6 .SY
7 mhn
8 \%[\%[+folder] \%[msgs] | \%[\-file\0file]]
9 .br
10 \%[\-part\0number]... \%[\-type\0content]...
11 .br
12 \%[\-list\0\%[\-headers]\0\%[\-noheaders]
13 .br
14 \%[\-realsize]\0\%[\-norealsize]] \%[-nolist]
15 .br
16 \%[\-show\0\%[\-serialonly]\0\%[\-noserialonly]
17 .br
18 \%[\-form\0formfile]\0\%[\-pause]\0\%[\-nopause]] \%[\-noshow]
19 .br
20 \%[\-store\0\%[\-auto]\0\%[\-noauto]] \%[\-nostore]
21 .br
22 \%[\-cache] \%[\-nocache] \%[\-rcache\0policy] \%[\-wcache\0policy]
23 .br
24 \%[\-check]\0\%[\-nocheck]
25 .br
26 \%[\-ebcdicsafe]\0\%[\-noebcdicsafe]
27 .br
28 \%[\-rfc934mode]\0\%[\-norfc934mode]
29 .br
30 \%[\-verbose]\0\%[\-noverbose]
31 .br
32 \%[\-junet]\0\%[\-nojunet]
33 .br
34 \%[\-8bit]\0\%[\-no8bit]
35 .br
36 \%[\-help]
37 .DE
38 \fImhn\fR コマンドは RFC\-2045 で規定されているマルチメディア・メッセージを
39 扱います。
40
41 次の4つのオプションが \fImhn\fR の行動を規定します。
42 すなわち、`\-list'、`\-show'、`\-store'、そして `\-cache' です。
43 これらのオプションは全て、いくつかを同時に指定する事も出来ます。
44 通常、これらのオプションは指定のメッセージの全てのコンテンツ(内容)を
45 操作するものです。
46 しかし、`\-part' や `\-type' オプションを使うと、
47 操作を行なうコンテンツを(マルチパートの)特定のサブパートや、
48 特定のタイプのものに限定する事が出来ます。
49
50 パート指定はピリオドで分割された数字の列で成り立っています。
51 例えば、
52 3つのパートから成るマルチパートに於いては、
53 これらはそれぞれ 1、2、そして 3 という名前になります。
54 もし、2番目のパートがさらに、
55 2つのパートからなるマルチパート・コンテンツであった場合、
56 これらはそれぞれ 2.1 と 2.2 という名前になります。
57 `\-part' オプションはマルチパートを含むメッセージにのみ効果がある事に
58 注意して下さい。
59 もし、メッセージが他の種類のコンテンツであったり、
60 指定したパート自身がマルチパート・コンテンツであった場合には、
61 `\-part' オプションは操作対象のコンテンツの限定をしません。
62
63 コンテンツ指定はコンテンツのタイプとサブタイプから成り立っています。
64 標準的なコンテンツのタイプとサブタイプは RFC\-2046 に書かれています。
65 .ne 18
66 共通に使用されるコンテンツのリストは次の通りで、サブタイプは必須です。
67 .sp
68 .nf
69 .in +.5i
70 .ta \w'application 'u
71 タイプ サブタイプ
72 ---- --------
73 text plain
74 multipart mixed, alternative, digest, parallel
75 message rfc822, partial, external-body
76 application octet-stream, postscript
77 image jpeg, gif, x-pbm, x-pgm, x-ppm, x-xwd
78 audio basic
79 video mpeg
80 .re
81 .in -.5i
82 .fi
83 .sp
84 .PP
85 `\-type' オプションでコンテンツを指定する際に、サブタイプを問わない場合は、
86 例えば、\*(lqaudio\*(rq という風にタイプの名前だけを使います。
87 特定のサブタイプを指定したい場合は、
88 例えば、\*(lqaudio/basic\*(rq という風に二つの間をスラッシュで区切って
89 指定します。
90 `\-type' オプションで与えられた値に関わらず、マルチパート・コンテンツ
91 (どのサブタイプでも)は常に扱われる点に注意して下さい。
92 さらに、`\-type' オプションで message/external-body コンテンツの指定を
93 行なう場合は、`\-type' オプションは二回現われなければなりません。
94 一回は message/external-body のために、
95 そしてもう一回はその外部参照されたコンテンツのためにです。
96
97 それぞれのコンテンツはオプションとして、完全性のチェックを持っているかも
98 知れません(\*(lqContent-MD5\*(rq ヘッダーの事)。
99 もし、それがあり、`-check' オプションが指定されると、
100 \fImhn\fR はそのコンテンツの完全性をチェックします。
101
102 `\-file\ file' オプションによって、フォルダ内のメッセージではなく、
103 指定のファイルを処理させる事が出来ます。
104 そのファイルは他の全ての \fIMH\fR メッセージ同様に、
105 正しい形式のメッセージであるべきです。
106 メールドロップ形式であるべきではありません
107 (メールドロップ形式のファイルをフォルダ内の \fIMH\fR メッセージの形式に
108 変換する方法は \fIinc\fR\0(1) を参照して下さい)。
109
110 .Uh "コンテンツの一覧表示"
111 `\-list' オプションを指定すると、\fImhn\fR は指定されたメッセージの
112 コンテンツの目次を一覧表示します。
113 `\-headers' オプションをつけると、その一覧の上に一行のヘッダー行を表示します。
114 `\-realsize' オプションをつけると、\fImhn\fR は一覧表示に先立ち、
115 それぞれのコンテンツの生来の(デコードされた)形式に対して評価をします。
116 これは少々の遅れを犠牲にして正確なカウントを準備します。
117
118 .Uh "コンテンツの表示"
119 `\-show' オプションを指定すると、\fImhn\fR は指定されたメッセージの
120 コンテンツを表示します。
121 メッセージのヘッダーは \fImhlproc\fR で、
122 フォーマット・ファイル \fImhl.headers\fR を使って表示されます
123 (フォーマット・ファイルは `\-form\0formfile' オプションで変更できます)。
124
125 \fImhn\fR は異なるコンテンツをどのように表示すべきかを決めるために、
126 ユーザーのプロファイルの中の情報を見ます。
127 そこから表示文字列を引き出し、標準入力をそのコンテンツに設定して、
128 その表示文字列を \fB/bin/sh\fR で実行する事で達成されます。
129 .ne 16
130 表示文字列には以下のエスケープを含む事が出来ます。
131 .sp
132 .nf
133 .in +.5i
134 .ta \w'%F 'u
135 %a 付加的な引数
136 %e 排他的な実行
137 %f コンテンツが含まれているファイル名
138 %F %e、%f 且つ、標準入力はコンテンツではなく端末
139 %l コンテンツを表示する前に一覧表示
140 %p %l 且つ、確認のために質問をする
141 %s サブタイプ名
142 %d コンテンツの説明
143 .re
144 .in -.5i
145 .fi
146 .sp
147 %e または %F エスケープを含んでいる表示文字列に対しては、
148 \fImhn\fR は同時には多くとも一つしか実行しません。
149 %F エスケープはそのコンテンツを含むファイル名に展開されますが、
150 %e エスケープはシェルが関係する範囲内では何の展開もしません。
151
152 %p エスケープが確認の質問をした時に、
153 INTR (通常 control-C) を打つと \fImhn\fR はそのコンテンツは表示しません
154 (%p エスケープは `\-nopause' オプションで抑制できます)。
155 さらに、
156 \fImhn\fR がコンテンツを表示する際に、
157 QUIT (通常 control-\\) を打つと \fImhn\fR は直ちに終らせます。
158
159 %a エスケープは \*(lqContent-Type\*(rq 行のパラメータ列に展開されます。
160 また、%d エスケープは \*(lqContent-Description\*(rq 行の内容に展開されます。
161
162 もし表示されるコンテンツがマルチパートの場合、
163 \" そして、上述のリストにあるサブタイプにない場合、
164 %f と %F エスケープは
165 それぞれの下位のコンテンツを含んだ複数のファイル名に展開されます。
166 さらに、
167 標準入力は端末からコンテンツへとはリダイレクトされません。
168
169 まず、
170 \fImhn\fR はコンテンツを表示するために使うコマンドを決めるために、
171 次の形式のエントリを探します。
172 .sp
173 .in +.5i
174 mhn-show-<type>/<subtype>
175 .in -.5i
176 .sp
177 もし見つからなかった場合は、
178 \fImhn\fR は表示コマンドを決めるために、次の形式のエントリを探します。
179 .sp
180 .in +.5i
181 mhn-show-<type>
182 .in -.5i
183 .sp
184 .ne 10
185 もし、見つからなかった場合は、
186 \fImhn\fR は次の二つのデフォルトの値を持ちます。
187 .sp
188 .nf
189 .in +.5i
190 mhn-show-text/plain: %pmoreproc '%F'
191 mhn-show-message/rfc822: %pshow -file '%F'
192 .in -.5i
193 .fi
194 .sp
195 もし、いずれも適応されなかった場合は、
196 \fImhn\fR はそのメッセージが application/octet-stream コンテンツで
197 \*(lqtype=tar\*(rq パラメータを持っていないかをチェックします。
198 もしそうなら、
199 \fImhn\fR は適切なコマンドを使います(後述)。
200 もしそうでないなら、
201 \fImhn\fR はエラーを出します。
202
203 .ne 10
204 エントリの例は次のような感じです。
205 .sp
206 .nf
207 .in +.5i
208 mhn-show-audio/basic: raw2audio 2>/dev/null | play
209 mhn-show-image: xv '%f'
210 mhn-show-application/PostScript: lpr -Pps
211 .in -.5i
212 .fi
213 .sp
214 %f または %F エスケープを使う場合、
215 そのエスケープの回りにシングル・クォートを使うのは良い考えかも知れません。
216 これはファイル名におかしな文字が含まれる場合、シェルに誤解釈されるのを
217 防ぐでしょう。
218 但し、マルチパートに対しては %f や %F は複数ファイルに展開されるので、
219 その点、注意して下さい。
220
221 テキストのコンテンツは非 ASCII 文字を含んでいるかも知れないので、
222 \fImhn\fR はそのコンテンツに \*(lqcharset\*(rq パラメータを見つけると、
223 環境変数 $MM_CHARSET が設定されているかどうかを調べ、
224 その環境変数の値が、この charset パラメータの値と等しいかどうかを調べます。
225 もし等しくないないなら、
226 \fImhn\fR は以下の形式のエントリを探します。
227 .sp
228 .in +.5i
229 mhn-charset-<charset>
230 .in -.5i
231 .sp
232 これには、その文字集合を表示するための環境を作るコマンドが含まれている
233 べきです。
234 このコマンド文字列は一つの \*(lq%s\*(rq を含んでいるべきです。
235 これはコンテンツを表示するためのコマンドが埋められます。
236
237 エントリの例は次のような感じです。
238 .sp
239 .in +.5i
240 mhn-charset-iso-8859-1: xterm -fn '-*-*-medium-r-normal-*-*-120-*-*-c-*-iso8859-*' -e %s
241 .in -.5i
242 .sp
243 最上位ビットを落してしまうページャー・プログラムも多いという点には
244 注意して下さい。
245 しかし、
246 \fIless\fR プログラムの新しいリリースでは、8ビット文字集合にも
247 \" ささやかながら
248 対応しています。
249 \" これに対応した \fIless\fR version 177 のソースは
250 \" MH のソース・ツリーの \fBmiscellany/less-177\fR ディレクトリ以下にあります。
251 \" ISO 8859/1 文字集合で送られたメッセージを \fIless\fR で見るためには、
252 \" .ne 9
253 \" \&.login ファイルに以下のように書くと良いでしょう。
254 \" .sp
255 \" .nf
256 \" .in +.5i
257 \" setenv LESSCHARSET latin1
258 \" setenv LESS "-f"
259 \" .in -.5i
260 \" .fi
261 \" .sp
262 \" 最初の行は \fIless\fR が文字が \*(lqnormal\*(rq、\*(lqcontrol\*(lq、または
263 \" \*(lqbinary\*(rq であるかどうかを決める際に、8859/1 の定義を使う事を指定
264 \" します。
265 \" 2行目は \fIless\fR が非 ASCII 文字に遭遇しても警告しないように指示します。
266 \" そして、
267 \fBmoreproc\fR プロファイル・エントリを \fIless\fR に設定すると、
268 それが自動的に呼び出されるでしょう。
269 \" 他の
270 8ビット文字集合を扱う方法は、
271 詳しくは \fIless\fR\0(1)
272 \" のマニュアルの \fBLESSCHARDEF\fR 環境変数の部分
273 を参照して下さい。
274
275 最後に、
276 \fImhn\fR はそれぞれのメッセージを
277 順番に処理していきます。\0--\0カレント・メッセージを表示するために
278 実行されたコマンドの全てが終了するまでは
279 次のメッセージの表示は始まりません。
280 マルチパート・コンテンツの場合、
281 コンテンツにはそのパートを順番に表示すべきか同時に表示すべきかを示す
282 情報が含まれています。
283 これは特にウィンドーが一つしかない表示装置では矛盾を引き起こすので、
284 `\-serialonly' オプションを付けると、\fImhn\fR はそれぞれのパートを
285 決して同時には表示しないようにします。
286
287 .Uh "コンテンツを格納する"
288 `\-store' オプションを指定すると、\fImhn\fR は指定されたメッセージの
289 コンテンツを生来の(デコードされた)形式でファイルに格納します。
290 この際、次の二つの事が決められなければなりません。
291 そのコンテンツを格納するディレクトリとファイル名です。
292 ファイルは \fBmhn-storage\fR プロファイル・エントリで指定されたディレクトリ
293 に書き出されます。
294 .ne 6
295
296 .sp
297 .in +.5i
298 mhn-storage: /tmp
299 .in -.5i
300 .sp
301 もし、このエントリが存在しなければ、カレント・ディレクトリが使われます。
302
303 \fImhn\fR は異なるコンテンツをどのように格納すべきかを決めるために、
304 ユーザーのプロファイルの中の情報を見ます。
305 これは整形文字列を使うことで達成されます。
306 .ne 13
307 整形文字列には以下のエスケープを含む事が出来ます。
308 .sp
309 .nf
310 .in +.5i
311 .ta \w'%P 'u
312 %m メッセージ番号
313 %P .パート
314 %p パート
315 %s サブタイプ
316 .re
317 .in -.5i
318 .fi
319 .sp
320 もしコンテンツがマルチパート・コンテンツのサブパートではない場合は、
321 %p エスケープは無視されます。
322 もし整形文字列が文字 \*(lq+\*(rq で始まっている場合、
323 これらの文字列は無視され、コンテンツはその名前のフォルダに格納されます
324 (整形文字列が文字 \*(lq+\*(rq だけである場合は、
325 カレント・フォルダを意味します)。
326 さらに、
327 整形文字列が文字 \*(lq-\*(rq だけである場合は、標準出力を意味します。
328
329 まず、
330 \fImhn\fR は整形文字列を決めるために、次の形式のエントリを探します。
331 .sp
332 .in +.5i
333 mhn-store-<type>/<subtype>
334 .in -.5i
335 .sp
336 もし見つからなかった場合は、
337 \fImhn\fR は整形文字列を決めるために、次の形式のエントリを探します。
338 .sp
339 .in +.5i
340 mhn-store-<type>
341 .in -.5i
342 .sp
343 もし、見つからなかった場合は、
344 \fImhn\fR はそのメッセージが application/octet-stream コンテンツで
345 \*(lqtype=tar\*(rq パラメータを持っていないかをチェックします。
346 もしそうなら、
347 \fImhn\fR は適切なファイル名を使います。
348 もしコンテンツが application/octet-stream でなかった場合は、
349 \fImhn\fR はそのコンテンツが message かどうかをチェックします。
350 もしそうなら、
351 \fImhn\fR は \*(lq+\*(rq を整形文字列とします。
352 もしそうでないなら、
353 \fImhn\fR は \*(lq%m%P.%s\*(rq を整形文字列とします。
354
355 もし整形文字列が '/' で始まっている場合は、コンテンツは
356 (\fBmhn-storage\fR で与えられたディレクトリやカレント・ディレクトリではなく)
357 与えられた絶対パスに格納されます。
358 同様に、
359 もし整形文字列が '|' で始まっている場合は、
360 \fImhn\fR はそのコンテンツを究極的に格納するべきコマンドを実行します。
361 このコマンドを実行する前には、
362 \fImhn\fR は適切なディレクトリに移る点に注意して下さい。
363 さらに、もし整形文字列が '|' で始まっている場合は、
364 \fImhn\fR は整形文字列を処理する際に、表示文字列同様の %a エスケープも
365 尊重します。
366
367 .ne 10
368 エントリの例は次のような感じです。
369 .sp
370 .nf
371 .in +.5i
372 mhn-store-text: %m%P.txt
373 mhn-store-audio/basic: | raw2audio -e ulaw -s 8000 -c 1 > %m%P.au
374 mhn-store-application/PostScript: %m%P.ps
375 .in -.5i
376 .fi
377 .sp
378 さらに、
379 分割メッセージを含むコンテンツを格納しようとする時には、
380 \fImhn\fR は全ての分割部分のありかを見つけ、
381 それに応じてそれらを組み立てようとします。
382 もし、誰かがメッセージをいくつかの部分に分けて送って来た場合、
383 それらの全てを一つのフォルダに置いて、次のようにする事が出来ます。
384 .sp
385 .in +.5i
386 mhn all -store
387 .in -.5i
388 .sp
389 これで、それらは正しく、各部分の総和を含む一つのメッセージに格納されます。
390 もし \fImhn\fR が全ての分割部分を集められなかった場合は、
391 何も格納はされません。
392
393 最後に、
394 `\-auto' オプションが指定された場合で、そのコンテンツに、
395 そのコンテンツがどういうファイル名に格納すべきかの情報が含まれていた場合は
396 (そしてそのファイル名が '/' で始まらない場合は)、
397 上述の方式に代わって、そのコンテンツから得られたファイル名が使われます。
398 `\-auto' でない場合は、送り主が指定してきたファイル名は無視される点に
399 注意して下さい。
400
401 .Uh "外部アクセス"
402 message/external-body コンテンツに対しては、
403 .ne 12
404 \fImhn\fR は以下のアクセス・タイプをサポートしています。
405 .sp
406 .nf
407 .in +.5i
408 afs
409 anon-ftp
410 ftp
411 local-file
412 mail-server
413 .in -.5i
414 .fi
415 .sp
416 \*(lqanon-ftp\*(rq と \*(lqftp\*(rq アクセス・タイプに対しては、
417 もしシステムが TCP/IP への SOCKET インターフェイスをサポートしているなら、
418 \fImhn\fR は内蔵の FTP クライアント・ルーチンを使います。
419 さもなくば、
420 \fImhn\fR は、FTP アクセスをするプログラムのパス名を決めるために、
421 \fBmhn-access-ftp\fR プロファイル・エントリを探します。
422 .ne 6
423
424 .sp
425 .in +.5i
426 mhn-access-ftp: myftp.sh
427 .in -.5i
428 .sp
429 .ne 14
430 このプログラムは以下の引数と共に起動されます。
431 .sp
432 .nf
433 .in +.5i
434 FTP サイトのドメイン名
435 ユーザー名
436 パスワード
437 リモート・ディレクトリ
438 リモート・ファイル名
439 ローカル・ファイル名
440 \*(lqascii\*(rq または \*(lqbinary\*(rq
441 .in -.5i
442 .fi
443 .sp
444 このプログラムはファイルの回収が成功した場合にはゼロの終了コードをもって
445 終了すべきです。
446
447 .Uh "コンテンツのキャッシュ"
448 \fImhn\fR が \*(lqContent-ID:\*(rq ヘッダーを含む外部参照コンテンツに
449 遭遇した時、
450 そのコンテンツがキャッシュを許せば、
451 \fImhn\fR のキャッシュ機能に従って、そのコンテンツは読まれ、
452 キャッシュに書き出されるかも知れません。
453
454 \fImhn\fR のキャッシュ機能は
455 `\-rcache' そして `\-wcache' オプションで制御されます。
456 これらはそれぞれ、
457 キャッシュの際の読まれる時と書き出される時の方針を定義します。
458 以下の4つの方針のうちの一つが指定できます。
459 \*(lqpublic\*(rq
460 は、\fImhn\fR が皆がコンテンツのキャッシュにアクセス出来るようにするよう
461 指示します。
462 \*(lqprivate\*(rq
463 は、\fImhn\fR がそのユーザー個人のキャッシュを作るよう指示します。
464 \*(lqnever\*(rq
465 は、\fImhn\fR がキャッシュを使わないよう指示します。
466 そして、
467 \*(lqask\*(rq
468 は、\fImhn\fR がユーザーに尋ねるよう指示します。
469
470 コンテンツがキャッシュされるディレクトリは以下の2つがあります。
471 プロファイル・エントリ \fBmhn-cache\fR は皆が読めるキャッシュを
472 置くディレクトリを定義します。
473 そして、
474 プロファイル・エントリ \fBmhn-private-cache\fR は個人のキャッシュを
475 置くディレクトリを定義します。
476 前者は絶対パスのディレクトリ名であるべきです。
477 .ne 6
478 例えば、もしシステムのリブートの度にキャッシュが消えるのを気にしないのなら、
479 .sp
480 .in +.5i
481 mhn-cache: /tmp
482 .in -.5i
483 .sp
484 という風にしてもいいでしょう。
485 後者はもし絶対パスでないなら、ユーザーの MH ディレクトリからの相対パスと
486 考えられます。
487 .ne 6
488
489 .sp
490 .in +.5i
491 mhn-private-cache: .cache
492 .in -.5i
493 .sp
494 (これがデフォルトの値です)
495
496 .Uh "コンテンツをキャッシュする"
497 message/external-body コンテンツで、アクセス・タイプが
498 \*(lqmail-server\*(rq のものに遭遇したら、
499 \fImhn\fR はそのコンテンツが要求するメールサーバーに
500 メッセージを送信してもいいかどうかを尋ねます。
501 .ne 14
502
503 .sp
504 .nf
505 .in +.5i
506 % show 1
507 Retrieve content by asking mail-server@...
508
509 SEND file
510
511 ? yes
512 mhn: request sent
513 .in -.5i
514 .fi
515 .sp
516 あなたの決定がどちらであっても、
517 \fImhn\fR はコンテンツに他の何の処理も出来ません。
518
519 しかし、
520 \fImhn\fR がコンテンツの要求を許された場合(ユーザーが yes と答えた場合)、
521 それが到着した時に、
522 元々の message/external-body コンテンツにあった \*(lqContent-ID:\*(rq 行の値に
523 対応する行が、送られてきたメッセージのトップレベルにあるべきです。
524 この時、`-cache' オプションを使って \fImhn\fR に到着したコンテンツを
525 キャッシュに入れるように指示すべきでしょう。
526 .ne 8
527
528 .sp
529 .nf
530 .in +.5i
531 % mhn -cache 2
532 caching message 2 as file ...
533 .in -.5i
534 .fi
535 .sp
536 そしたら、
537 元々の message/external-body コンテンツを再び処理した時には
538 「正しい事」が起こる事でしょう。
539 .ne 8
540
541 .sp
542 .nf
543 .in +.5i
544 % show 1
545 \0...
546 .in -.5i
547 .fi
548
549 .Uh "コンテンツを作成する"
550 \fImhn\fR プログラムはマルチメディア・メッセージを作成する際に
551 それを手助けする簡単なエディタとしても使えます。
552 \fIwhatnow\fR プログラムから呼ばれた時には、
553 \fImhn\fR はドラフトのボディが
554 \fImhn\fR 作成ファイルとして整形される事を期待します。
555
556 .ne 59
557 この文法は以下の通りです。
558 .sp
559 .nf
560 .in +.5i
561 body ::= 1*(content | EOL)
562
563 content ::= directive | plaintext
564
565 directive ::= "#" type "/" subtype
566 0*(";" attribute "=" value)
567 [ "(" comment ")" ]
568 [ "<" id ">" ]
569 [ "[" description "]" ]
570 [ filename ]
571 EOL
572
573 | "#@" type "/" subtype
574 0*(";" attribute "=" value)
575 [ "(" comment ")" ]
576 [ "<" id ">" ]
577 [ "[" description "]" ]
578 external-parameters
579 EOL
580
581 | "#forw"
582 [ "<" id ">" ]
583 [ "[" description "]" ]
584 [ "+"folder ] [ 0*msg ]
585 EOL
586
587 | "#begin"
588 [ "<" id ">" ]
589 [ "[" description "]" ]
590 [ "alternative"
591 | "parallel"
592 | something-else ]
593 EOL
594 1*body
595 "#end" EOL
596
597 plaintext ::= [ "Content-Description:"
598 description EOL EOL ]
599 1*line
600 [ "#" EOL ]
601
602 | "#<" type "/" subtype
603 0*(";" attribute "=" value)
604 [ "(" comment ")" ]
605 [ "[" description "]" ]
606 EOL
607 1*line
608 [ "#" EOL ]
609
610 line ::= "##" text EOL
611 -- これは "#"text EOL と解釈される
612 | text EOL
613 .in -.5i
614 .fi
615 .sp
616 基本的に、
617 ボディは一つまたはそれ以上のコンテンツを含んでいます。
618 コンテンツは行の最初の文字が \*(lq#\*(rq になっている事で区別される指令文、
619 または
620 プレーン・テキスト領域(一行またはそれ以上のテキスト)から成り立ちます。
621 一つの指令文が複数の行にまたがる場合は、
622 .ne 11
623 継続文字 \*(lq\\\*(lq が使われます。
624
625 .sp
626 .nf
627 .in +.5i
628 #@application/octet-stream; \\
629 type=tar; \\
630 x-conversions=compress
631 .in -.5i
632 .fi
633 .sp
634 指令文には以下の4種類があります。
635 コンテンツのタイプとサブタイプを名付ける「タイプ指令文」、
636 同じく、コンテンツのタイプとサブタイプを名付ける「外部タイプ指令文」、
637 メッセージのダイジェストを転送するために使われる「forw 指令文」、
638 そして、
639 マルチパート・コンテンツを作る
640 「begin 指令文」です。
641
642 タイプ指令文には、
643 タイプとサブタイプの指定が必須です。また文字 \*(lq;\*(rq で区切って、
644 パラメータを書く事も出来ます。これは送られるメッセージの
645 \*(lqContent-Type\*(rq 行のパラメータとなります。
646 また、そのコンテンツが生来の(デコードされた)形式で保存されているファイル名を
647 指定する事も出来ます
648 (もしファイル名が文字 \*(lq|\*(rq で始まっている場合は、
649 コマンドの出力からコンテンツが得られます)。
650 もしファイル名が指定されてなかった場合、
651 \fImhn\fR は異なるコンテンツをどのように作成すべきかを決めるために、
652 ユーザーのプロファイルの中の情報を見ます。
653 そこから作成文字列を引き出し、標準入力をそのコンテンツに設定して、
654 その作成文字列を \fB/bin/sh\fR で実行する事で達成されます。
655 .ne 13
656 作成文字列には以下のエスケープを含む事が出来ます。
657 .sp
658 .nf
659 .in +.5i
660 .ta \w'%P 'u
661 %a 付加的な引数
662 %f コンテンツが含まれているファイル名
663 %F %f 且つ、標準出力はリダイレクトされない
664 %s サブタイプ名
665 .re
666 .in -.5i
667 .fi
668 .sp
669 まず、
670 \fImhn\fR はコンテンツを作成するために使うコマンドを決めるために、
671 次の形式のエントリを探します。
672 .sp
673 .in +.5i
674 mhn-compose-<type>/<subtype>
675 .in -.5i
676 .sp
677 もし見つからなかった場合は、
678 \fImhn\fR は作成コマンドを決めるために、次の形式のエントリを探します。
679 .sp
680 .in +.5i
681 mhn-compose-<type>
682 .in -.5i
683 .sp
684 もし見つからなかった場合は、
685 \fImhn\fR はエラーを出します。
686
687 エントリの例は次のような感じです。
688 .sp
689 .in +.5i
690 mhn-compose-audio/basic: record | raw2audio -F
691 .in -.5i
692 .sp
693 このようなコマンドはユーザーがログインしている表示環境等に依って
694 変わるでしょうから、
695 異なるコンテンツに対する作成文字列の情報は
696 ユーザーのプロファイルに直接書く代わりに
697 環境変数 \fB$MHN\fR で指定されたファイルに書くべきでしょう。
698
699 得られたコンテンツは必要なら base64 形式などでエンコードされ、送り出される
700 メッセージのボディ部分に含められます。
701
702 外部タイプ指令文はそのコンテンツ自身を含めるのではなく、
703 そのコンテンツへの参照を用意します。
704 送り出されるメッセージでは message/external-body 形式になります。
705 つまり、
706 タイプ指令文で使ったようなファイル名を指定するのではなく、
707 外部参照のパラメータを使います。
708 これらは通常のパラメータと区別するために、
709 .ne 15
710 分離して書かれなければなりません。
711
712 .sp
713 .nf
714 .in +.5i
715 #@application/octet-stream; \\
716 type=tar; \\
717 x-conversions=compress [] \\
718 access-type=anon-ftp; \\
719 name="mh-mime.tar.Z"; \\
720 directory="mrose/mh-mime"; \\
721 site="ftp.ics.uci.edu"
722 .in -.5i
723 .fi
724 .sp
725 \*(lq[]\*(rq を指定することで、
726 空の説明文が指定され、
727 外部参照のパラメータの始まりが認識されます。
728 .ne 19
729 これらのパラメータは以下のような形式をしています。
730 .sp
731 .nf
732 .in +.5i
733 .ta \w'access-type= 'u
734 access-type= 通常 \fIanon-ftp\fR または \fImail-server\fR
735 name= ファイル名
736 permission= \fIread\fR または \fIread-write\fR
737 site= ホスト名
738 directory= ディレクトリ名 (無くても良い)
739 mode= 通常 \fIascii\fR または \fIimage\fR (無くても良い)
740 size= バイト数
741 server= メールアドレス
742 subject= 送られる Subject
743 body= メールサーバーに送られるコマンド
744 .re
745 .in -.5i
746 .fi
747 .sp
748
749 forw 指令文には
750 フォルダ名と転送されるメッセージを指定する事も出来ます。
751 もしフォルダが指定されなかった場合の
752 デフォルトはカレント・フォルダです。
753 同様に
754 メッセージが指定されなかった場合の
755 デフォルトはカレント・メッセージです。
756 送り出されるメッセージでは message/rfc822 形式になります。
757 従って、
758 forw 指令文は
759 メッセージの取り込みに RFC\-934 ルールではなく、MIME ルールを使うという
760 点を除けば、\fIforw\fR\0(1) コマンドに似ています。
761 `\-rfc934mode' オプションを使うと、\fImhn\fR は
762 RFC\-934 ルールを使って、メッセージの取り込みをします。
763 このオプションを指定しておくと、
764 RFC\-934 を満たすユーザー・エージェントは受けとったメッセージを
765 分割する事が出来ます。\0--\0取り込まれたメッセージが
766 さらに取り込まれたメッセージを含まないようにします。
767 この方法の欠点は、取り込まれたそれぞれのメッセージ・ボディの最後に
768 余分な改行が追加されてしまう点です。
769
770 begin 指令文には、
771 begin と end の組の間に
772 少なくとも一つのコンテンツが指定されてなければなりません。
773
774 これら全ての指令文には
775 コンテンツの短い説明文を文字 \*(lq[\*(rq と文字 \*(lq]\*(rq の間に含める
776 事が出来ます。
777 これは送り出されるメッセージでは \*(lqContent-Description\*(rq 行に
778 入ります。
779 また、デフォルトでは、
780 \fImhn\fR はそれぞれの指令文に対して、一意的な \*(lqContent-ID:\*(rq 行を
781 生成します。
782 しかし、
783 ユーザーは文字 \*(lq<\*(rq と \*(lq>\*(rq を使って、
784 ID を自ら定義する事が出来ます。
785
786 これらは全て同時に使う事が出来ます。
787 .ne 15
788 以下にユーザーのメッセージ・フォーム・ファイルの簡単な例を挙げます。
789 .sp
790 .nf
791 .in +.5i
792 To:
793 cc:
794 Subject:
795 --------
796 #audio/basic [Flint phone] \\
797 |raw2audio -F < /home/mrose/lib/multi-media/flint.au
798 #image/gif [MTR's photo] \\
799 /home/mrose/lib/multi-media/mrose.gif
800 .in -.5i
801 .fi
802 .sp
803 後の例のために、
804 このメッセージ・フォーム・ファイルを \fImhncomps\fR と呼ぶ事にします。
805
806 既に述べたように、ドラフトには指令文に加えて、
807 プレーン・テキスト領域を置く事が出来ます。
808 プレーン・テキスト領域は次の指令文が現われるまで、
809 またはドラフトの最後までの部分が集められ、テキスト・コンテンツを形成します。
810 プレーン・テキスト領域で行頭に文字 \*(lq#\*(rq を含めたい場合は
811 それを2つ続けます。
812 .ne 6
813
814 .sp
815 .in +.5i
816 ## この行は送出されると、行の最初は一つの # だけになる。
817 .in -.5i
818 .sp
819 もし、プレーン・テキスト領域を指令文より前に終らせたい場合、
820 例えば、
821 二つのプレーン・テキスト・コンテンツを連続させたい場合は、
822 単に一つの \*(lq#\*(rq 文字だけを含む行を挿入します。
823 .ne 10
824
825 .sp
826 .nf
827 .in +.5i
828 これは最初のコンテンツです。
829 #
830 そしてこれは二番目です。
831 .in -.5i
832 .fi
833 .sp
834 最後に、
835 プレーン・テキスト領域が次の形式の行で始まっている場合、
836 .sp
837 .in +.5i
838 Content-Description: text
839 .in -.5i
840 .sp
841 これがそのプレーン・テキスト・コンテンツの説明文として使われます。
842 注意: この行はテキストを始める前に空行と共に使わなければなりません。
843
844 デフォルトでは、
845 プレーン・テキスト領域は text/plain コンテンツとして使われます。
846 これはプレーン・テキスト領域を \*(lq#<\*(rq とタイプ指定で
847 始める事で、変更可能です。
848 .ne 11
849
850 .sp
851 .nf
852 .in +.5i
853 #<text/richtext
854 このコンテンツは text/richtext になります。
855 #
856 このコンテンツは text/plain になります。
857 .in -.5i
858 .fi
859 .sp
860 もし \*(lq#<\*(rq 指定を使う場合は、
861 コンテンツの説明文はこのタイプ指定と同じ行に書かなければならない
862 点に注意して下さい。
863
864 \fImhn\fR はプレーン・テキスト領域については、それがテキスト・コンテンツなら、
865 そこで使われている文字コードを調べます。そして、ASCII 文字のみで構成されて
866 いるなら自動的に \fIcharset=\*(lqus-ascii\*(rq\fR パラメータをつけます。
867 また、8ビット・テキストである場合は、環境変数 $MM_CHARSET が調べられ、
868 そこに設定されている値が charset の値として使われます。
869 またこの時、本文は適切に quoted-printable 形式などでエンコードされます。
870 なお、`\-8bit' オプションが指定されている場合は、このエンコードは行なわず、
871 生の 8bit のまま送り出すようになります。
872 また、ISO-2022-JP コードで書かれている場合も適切に charset の値が設定されます。
873 `\-junet' オプションが指定されている場合は、ドラフト・ファイルをまず、
874 ISO-2022-JP コードに変換した後に、この処理を行なうようになります。
875
876 \fImhn\fR が成功すると、
877 元々のドラフト・ファイルは、
878 文字 \*(lq,\*(rq (またはサイト依存のオプション SBACKUP の値)で
879 始まり、\*(lq.orig\*(rq で終るファイル名にリネームされます。
880 例えば、
881 \*(lqdraft\*(rq というファイルを編集してた場合、
882 \*(lq,draft.orig\*(rq というようなファイル名になります。
883 これを使えば、\fImhn\fR で作成したファイルを簡単に元に戻す事が出来ます。
884
885 `-check' オプションを指定すると、
886 \fImhn\fR はそれぞれのコンテンツの完全性をチェックします。
887 つまり、そのチェック結果を \*(lqContent-MD5\*(rq 行に書き出します。
888
889 .Uh "自動作成"
890 MH では \&.mh\(ruprofile に以下の行を追加しない限り、
891 自動的には \fImhn\fR は呼び出さない事に注意して下さい。
892 .sp
893 .in +.5i
894 automhnproc: mhn
895 .in -.5i
896 .sp
897 これをしない時は、
898 ドラフトを送る前に明示的に以下のコマンドを使わなければなりません。
899 .sp
900 .in +.5i
901 What now? edit mhn
902 .in -.5i
903 .sp
904
905 これをする事を忘れないようにするために、MH を調整する事が出来ます。
906 .ne 10
907 プロファイルに以下の行がある事を想定してみて下さい。
908 .sp
909 .nf
910 .in +.5i
911 mcomp: -editor mprompter -form mhncomps
912 mprompter: -noprepend -norapid
913 mprompter-next: mhn
914 .in -.5i
915 .fi
916 .sp
917 ここで、\fImcomp\fR は \fIcomp\fR\0(1) へのリンクで、
918 \fImprompter\fR は \fIprompter\fR\0(1) へのリンクです。
919 この時、上述のメッセージ・フォーム・ファイル \fImhncomps\fR を使って
920 .ne 26
921 メッセージを送る手順は以下の通りです。
922 .sp
923 .nf
924 .in +.5i
925 % \fBmcomp\fR
926 To: \fBuser@host\fR
927 cc:
928 Subject: \fBmulti-media message\fR
929 --------
930 #audio/basic [Flint phone] \\
931 |raw2audio -F < /home/mrose/lib/multi-media/flint.au
932 #image/gif [MTR's photo] \\
933 /home/mrose/lib/multi-media/mrose.gif
934
935 --------Enter additional text
936
937 \fBこのメッセージは3つのコンテンツを含んでいます。\fR
938 \fB<CTRL-D>\fR
939 --------
940
941 What now? \fBedit\fR (これは \fImhn\fR を呼び出します)
942
943 What now? \fBsend\fR
944 .in -.5i
945 .fi
946 .sp
947 付加的な edit コマンドを打たなければならない事を忘れないようにしなければ
948 なりませんが、それはやりとりから、かなり明らかな事でしょう。
949
950 最後に、
951 プロファイルに以下の行を追加する事を考えるべきでしょう。
952 .sp
953 .in +.5i
954 lproc: show
955 .in -.5i
956 .sp
957 この場合、
958 \fImhn\fR をエディタとして呼び出した後で、\fBlist\fR を打った場合、
959 .sp
960 .in +.5i
961 What now? list
962 .in -.5i
963 .sp
964 あなたの期待するように動くでしょう。
965
966 .Uh "ファイルをメールで送る"
967 あなたがファイルの束を誰かに送ろうと思ったら、
968 シェルスクリプト \fIviamail\fR を走らせる事が出来ます。
969 これは tarmail コマンドに似たものです。
970 .sp
971 .in +.5i
972 /usr/local/mh/lib/viamail mailpath \*(lqsubject\*(rq files\0...
973 .in -.5i
974 .sp
975 \fIviamail\fR は指定されたファイルやディレクトリを \fItar\fR\0(1) で
976 まとめた後、圧縮し、`subject' と共に `mailpath' へと送ります。
977 この圧縮ファイルはその大きさによって、
978 自動的に複数のメッセージへと分割されます。
979
980 \fIviamail\fR がそれぞれの分割メッセージを送った後、しばらく
981 待ってから次を送って欲しいと思うかも知れません。
982 これは通常、\fIsendmail\fR を走らせていて、多数の分割メッセージが作られる
983 ような時でしょう。
984 もし \fIviamail\fR への最初の引数がダッシュ(`\-')で始まっている場合、
985 これはそれぞれの送出の間に待つべき秒数を表わします。
986 .ne 6
987
988 .sp
989 .in +.5i
990 /usr/local/mh/lib/viamail -300 mailpath \*(lqsubject\*(rq files\0...
991 .in -.5i
992 .sp
993 これは各送出の間、5分ずつ待ちます。
994
995 これらのメッセージを受け取ったら、
996 まず \fImhn\fR でメッセージの一覧を見て、
997 その後、`\-store' オプション付きで実行してみましょう。
998 \fImhn\fR プログラムはアーカイヴを含むただ一つのメッセージを格納します。
999 その後、`\-show' するとその中身を見る事が出来ます。
1000 それから、`\-store' でそのアーカイヴをファイルに落す事が出来ます。
1001 .ne 26
1002
1003 .sp
1004 .nf
1005 .in +.5i
1006 % mhn -list all
1007 msg part type/subtype size description
1008 1 message/partial 47K part 1 of 4
1009 2 message/partial 47K part 2 of 4
1010 3 message/partial 47K part 3 of 4
1011 4 message/partial 18K part 4 of 4
1012 % mhn -store all
1013 % mhn -list -verbose last
1014 msg part type/subtype size description
1015 5 application/octet-stream 118K
1016 (extract with uncompress | tar xvpf -)
1017 type=tar
1018 x-conversions=compress
1019 % mhn -show last
1020 msg part type/subtype size description
1021 5 application/octet-stream 118K
1022 -- メッセージのヘッダー部分とそれに続いて \fItar\fR の一覧表示がされる。
1023 % mhn -store last
1024 % uncompress < 5.tar.Z | tar xvpf -
1025 .in -.5i
1026 .fi
1027 .sp
1028 または、
1029 `\-auto' オプションを付けると、
1030 \fImhn\fR は自動的に展開までやってくれます。
1031 .ne 26
1032
1033 .sp
1034 .nf
1035 .in +.5i
1036 % mhn -list all
1037 msg part type/subtype size description
1038 1 message/partial 47K part 1 of 4
1039 2 message/partial 47K part 2 of 4
1040 3 message/partial 47K part 3 of 4
1041 4 message/partial 18K part 4 of 4
1042 % mhn -store all
1043 % mhn -list -verbose last
1044 msg part type/subtype size description
1045 5 application/octet-stream 118K
1046 (extract with uncompress | tar xvpf -)
1047 type=tar
1048 x-conversions=compress
1049 % mhn -show last
1050 msg part type/subtype size description
1051 5 application/octet-stream 118K
1052 -- メッセージのヘッダー部分とそれに続いて \fItar\fR の一覧表示がされる。
1053 % mhn -store -auto last
1054 -- \fItar\fR が自動的にファイルの一覧を表示しながら展開もする。
1055 .in -.5i
1056 .fi
1057 .sp
1058 二番目の例では、自動的に \fItar\fR でファイルが展開されます。
1059 慎重なユーザーは決して `\-auto' を \&.mh\(ruprofile ファイルには
1060 書かないでしょう。
1061 正しい手順はまず `\-show' でどんなファイルが展開されるのかを確かめる事です。
1062 それから \fImhn\fR を `\-store' と `\-auto' を付けて起動し、展開をします。
1063
1064 .Uh "ユーザー環境"
1065 \fImhn\fR がどう処理すべきかは表示環境等に依って
1066 変わるでしょうから、
1067 \fImhn\fR は環境変数 \fB$MHN\fR を見ます。
1068 これが設定されている場合、
1069 これは付加的なユーザー・プロファイルの名前を指定します。
1070 つまり、
1071 ユーザーがある表示装置にログインした時、
1072 この環境変数には、その表示装置に適した設定が書いてあるファイルを参照するような
1073 値を設定すべきでしょう。
1074 通常、
1075 以下の形式のエントリだけが必要だと思われます。
1076 .sp
1077 .in +.5i
1078 mhn-show-<type>/<subtype>
1079 .br
1080 mhn-show-<type>
1081 .in -.5i
1082 .sp
1083 最後に、
1084 \fImhn\fR はもう一つの付加的なユーザー・プロファイルを参照しようとします。
1085 .ne 6
1086 e.g.,
1087 .sp
1088 .in +.5i
1089 /usr/local/mh/lib/mhn_defaults
1090 .in -.5i
1091 .sp
1092 これは MH のインストールの際に自動的に作られます。
1093 .Fi
1094 ^$HOME/\&.mh\(ruprofile~^ユーザーのプロファイル
1095 ^$MHN~^付加的なプロファイル・エントリ
1096 ^/usr/local/mh/lib/mhn_defaults~^システム・デフォルトのプロファイル・エントリ
1097 ^/usr/local/mh/lib/mhl.headers~^ヘッダーのテンプレート
1098 .Pr
1099 ^Path:~^ユーザーの MH ディレクトリを決める
1100 .Ps
1101 ^Current\-Folder:~^デフォルトのカレント・フォルダを示す
1102 .Ps
1103 ^mhlproc:~^メッセージ・ヘッダーを表示するデフォルトのプログラム
1104 .Ps
1105 ^mhn-access-ftp:~^FTP でコンテンツを回収するプログラム
1106 .Ps
1107 ^mhn-cache~^外部コンテンツをキャッシュする共用ディレクトリ
1108 .Ps
1109 ^mhn-charset-<charset>~^文字集合を表示するための環境のテンプレート
1110 .Ps
1111 ^mhn-compose-<type>*~^コンテンツを作成するためのテンプレート
1112 .Ps
1113 ^mhn-private-cache~^外部コンテンツをキャッシュする個人ディレクトリ
1114 .Ps
1115 ^mhn-show-<type>*~^コンテンツを表示するためのテンプレート
1116 .Ps
1117 ^mhn-storage~^コンテンツを格納するディレクトリ
1118 .Ps
1119 ^mhn-store-<type>*~^コンテンツを格納するためのテンプレート
1120 .Ps
1121 ^moreproc:~^text/plain コンテンツを表示するデフォルトのプログラム
1122 .Sa
1123 mhl(1)
1124 .br
1125 \fIMIME: Format of Internet Message Bodies\fR (RFC\-2045),
1126 .br
1127 \fIMIME: Media Types\fR (RFC\-2046),
1128 .br
1129 \fIMIME: Message Header Extensions for Non-ASCII Text\fR (RFC\-2047),
1130 .br
1131 \fIProposed Standard for Message Encapsulation\fR (RFC\-934).
1132 .De
1133 `+folder' デフォルトはカレント・フォルダ
1134 .Ds
1135 `msgs' デフォルトは cur
1136 .Ds
1137 `\-noauto'
1138 .Ds
1139 `\-nocache'
1140 .Ds
1141 `\-nocheck'
1142 .Ds
1143 `\-noebcdicsafe'
1144 .Ds
1145 `\-form\0mhl.headers'
1146 .Ds
1147 `\-headers'
1148 .Ds
1149 `\-pause'
1150 .Ds
1151 `\-rcache\0ask'
1152 .Ds
1153 `\-realsize'
1154 .Ds
1155 `\-rfc934mode'
1156 .Ds
1157 `\-noserialonly'
1158 .Ds
1159 `\-show'
1160 .Ds
1161 `\-noverbose'
1162 .Ds
1163 `\-wcache\0ask'
1164 .Ds
1165 `\-nojunet'
1166 .Ds
1167 `\-no8bit'
1168 .Co
1169 フォルダが指定されると、それがカレント・フォルダになります。
1170 最後に選択されたメッセージがカレント・メッセージになります。
1171 .Bu
1172 マルチパート・コンテンツの中に分割メッセージが含まれている場合は、
1173 `\-store' オプションでうまく集めることが出来ません。
1174 .En