		fmlの返すメッセージについて

------------------------------------------------------------
1	概要
1.1	fml の返すメッセージ
1.2	長めの返事のテンプレート

2	エラーメッセージなどのカスタマイズ
2.1	キーワードのサーチ
2.2	messages.conf の例
2.3	サーチ順の例
2.4	容量オーバーのメールを投稿した場合のエラーメッセージを変更する

3	事例集
3.1	ヘルプメッセージを消す
3.2	例: fmlでの confirm のメールの本文をハックする (ひとつのＭＬだけ)
3.3	例: fmlでのwelcomeメールの本文をハックする (全ＭＬ共通)
3.4	welcomeというファイルの内容の前についてしまう部分を削除/編集
3.5	メールの最後に付加情報をつける設定
3.6	command status report をしなくさせる
3.7	welcomeというファイルの内容の前についてしまう部分を削除/編集
3.8	本文へ注意をつけたす (2000/06/05 以降の fml-current の場合)
3.9	本文へ注意をつけたす (2000/06/05 以前の場合)
------------------------------------------------------------


1	概要

1.1	fml の返すメッセージ

fml の返すメッセージとはエラーやコマンドの結果として返す応答のことです。
大雑把にいって長いものと短いものがあります。長いものは各ＭＬのホームに
ファイルとして容易されています。例えば

	登録された時に返すメッセージ (/var/spool/ml/elena/welcome)

です。一方短いものは

	コマンドのシンタックスが間違っていた時に返るエラーメッセージ

などです。エラーメッセージはソースに(英語で)埋め込まれていますが、現在
徐々に /usr/local/fml/messages/Japanese/ の下のファイルへの移行が進ん
でいます。これは

	エラーメッセージの日本語化
	エラーメッセージをユーザがカスタマイズ可能なようにする

という作業です。どのようなものがあるのかについては完全なリストはありま
せんが、Japanese/ 以下のファイルがそれぞれ何に対応しているのかは
	/usr/local/fml/messages/Japanese/MANIFEST.Japanese

を見て下さい。また最新版は以下のURLをみてください。

	http://www.fml.org/fml/messages-list.ja.txt

1.2	長めの返事のテンプレート

makefml newml を実行した際に各ＭＬのHOMEに用意されるテンプレートのファ
イルは

     confirm             confirm モードの登録用
     confirmd.ackreq     confirm モードの登録継続確認用
     deny                メンバ外
     guide               ML の guide
     help                ML の使い方の help
     help-admin          admin メンバ用 help
     objective           ML の objective (目的)
     welcome             入会メッセージ

です。これらはメッセージとしてはかなり長いものです。短いものは全部

	/usr/local/fml/messages/言語/ 下で定義されているか
	埋め込まれているか

のいづれかです。埋め込まれているものを messages/ 以下にひっぺがす作業
は少しずつ進んでいます。

See also: 3.2 

2	エラーメッセージなどのカスタマイズ

エラーメッセージなどの返事には元になるテンプレートがあります。
fml のソースにはメッセージを返す必要がある場所に no_such_file や 
auth.fail といったキーワードが埋め込まれています。
このキーワードの時に使うテンプレートの文章を

	/var/spool/ml/elena/messages.Japanese.conf
	/var/spool/ml/elena/messages.conf
	/var/spool/ml/elena/messages/Japanese/ファイル
	/var/spool/ml/etc/fml/messages/Japanese/ファイル
	/usr/local/fml/messages/Japanese/ファイル

の順で探します。でふぉーるとでは

	/usr/local/fml/messages/Japanese/ファイル

しかないので、ここにあるファイル群のどれかです。
後のファイルは適当につくってください。

2.1	キーワードのサーチ

キーワードは	ファイル名.いろ.いろ のような形式です。

例: auth.ok というキーワードのサーチは次の順です。
    最初にそのキーワードが見つかったファイルの文章を使います。

	/var/spool/ml/elena/messages.Japanese.conf
	/var/spool/ml/elena/messages.conf
	/var/spool/ml/elena/messages/Japanese/auth
	/var/spool/ml/etc/fml/messages/Japanese/auth
	/usr/local/fml/messages/Japanese/auth

一方 no_such_file といった . を含まないキーワードは kern というファイ
ルに含まれるお約束です。
最初にそのキーワードが見つかったファイルの文章を使います。

	/var/spool/ml/elena/messages.Japanese.conf
	/var/spool/ml/elena/messages.conf
	/var/spool/ml/elena/messages/Japanese/kern
	/var/spool/ml/etc/fml/messages/Japanese/kern
	/usr/local/fml/messages/Japanese/kern

2.2	messages.conf の例

いじりたいキーワードを

	/usr/local/fml/messages/Japanese/

ディレクトリの下から探して cut & paste してください。

    messages.conf の例
    
    unlink:
    	_ARG0_ ファイルを消去しました
    
    auth.ok:
    	認証されました。
    
    auth.fail:
    	認証に失敗しました。
    ~.q
    
2.3	サーチ順の例

ケース1: /var/spool/ml/elena/messages.conf に auth.ok だけ書いたとしま
す。この時は次のようになります。auth.ok をサーチする時は messages.conf 
を使う。auth.fail は /usr/local/fml/messages/Japanese/auth を使います。

2.4	容量オーバーのメールを投稿した場合のエラーメッセージを変更する

/usr/local/fml/messages/Japanese/resource が定義ファイルでその中の

resource.too_big:
	あなたのメールはこのメーリングリストが許すメールのサイズを越えています。

の定義部分を使って

  あなたのメールはこのメーリングリストが許すメールのサイズを越えています。

という本文のメールが返るはずです。この部分を編集すれば変わります。
＃そのあとによけいな英語がついてるかもしれませんが…

ただ /usr/local/fml/messages/ はインストール時に上書きされるので
編集する場合は copy を /var/spool/ml/etc/fml/messages/ にコピーして
/var/spool/ml/etc/fml/messages/resouce を編集しておくのがよいです。

3	事例集

3.1	ヘルプメッセージを消す

    sub DUMMY {};
    $PROC_GEN_INFO = 'DUMMY';

これは、以下のメッセージを消す呪文です。
fml-current (2000/07/26 以降)には DUMMY という関数があるので
    $PROC_GEN_INFO = 'DUMMY';
だけで十分です。

    --elena@fml.org, Be Seeing You!    
    
    ************************************************************
    
           Help: <mailto:elena-ctl@fml.org?body=help>
    Unsubscribe: <mailto:elena-ctl@fml.org?body=unsubscribe>
    
    If you have any questions or problems,
       please contact elena-admin@fml.org
           or 
       send e-mail with the body "help"(without quotes) to
          elena-ctl@fml.org
          (here is the automatic reply, so more preferable)
    
    e.g. on a Unix Machine
    (shell prompt)% echo "help" |Mail elena-ctl@fml.org
    
    ************************************************************

3.2	例: fmlでの confirm のメールの本文をハックする (ひとつのＭＬだけ)

fml-support: 07974, 07975
「FMLから確認のメールの内容を、一つのメーリングリストだけ変えたい」

日本語で返事を返すテンプレートが /usr/local/fml/messages/ にあります。

	% cp -pr /usr/local/fml/messages /var/spool/ml/elena 

してください。confirmation 関係は

	/var/spool/ml/elena/messages/Japanese/confirm 

というテンプレートがあります。
このファイルの一番上のテンプレートを変更してみて下さい。

confirm.auto_regist.preamble:
	こちらは<_ARG0_>メーリングリスト(ＭＬ)のfmlです。
	これはＭＬに登録する意志の確認をするメールです。
	このＭＬに登録していいなら
	...

という部分があります、そこを編集してみてください。
/var/spool/ml/elena/messages が /usr/local/fml/messages に優先されます。

NOTE: 現在の実装(2000/05: 3.0-current も 3.0-stable も)ではこのように
して下さい。しかし、これでは upgrade した時にそのＭＬだけ upgrade され
なくなってしまいます。もうちょっと検索の仕方を工夫する余地があります。
将来の version ではもうちょっと賢くならないかと検討しています。

3.3	例: fmlでのwelcomeメールの本文をハックする (全ＭＬ共通)

◯ $DIR/welcome ファイルをいじる

◯ 一番先頭の

   メーリングリストへの投稿は	<foo@bar.jp>
   コマンドは			<foo-ctl@bar.jp>
   管理者宛のメールは		<foo-admin@bar.jp>

のような部分をいじりたい場合は

/usr/local/fml/messages/Japanese/amctl というファイルの

amctl.added.caution:
	注意: このメールにリプライするとメーリングリスト宛になります。
	メーリングリストへの投稿は	<_ARG1_>
	コマンドは			<_ARG2_>
	管理者宛のメールは		<_ARG0_>
	へ送って下さい。

という部分をいじってください。

[KNOWN_BUGS]

XXX ただこのファイルはインストール時に上書きされてしまうので
XXX /var/spool/ml/etc/fml/messages/Japanese/amctl などという場所へコピー
XXX してそのファイルを好きなようにいじるべきです。しかし今度は fml を
XXX updateしたときに新しい /usr/local/fml/messages/Japanese/amctl の内
XXX 容が最新版を反映してくれません。現在のコードを修正してだめなら 
XXX /usr/local/fml のほうもさがすように修正するべきでしょう。

3.4	welcomeというファイルの内容の前についてしまう部分を削除/編集

[3.0pl113 以降]

この部分はあるテンプレートファイルを変換して生成しています。

/usr/local/fml/messages/Japanese/amctl というファイルに

amctl.added.caution:
        注意: このメールにリプライするとメーリングリスト宛になります。
        メーリングリストへの投稿は      <_ARG1_>
        コマンドは                      <_ARG2_>
        管理者宛のメールは              <_ARG0_>
        へ送って下さい。

という定義があります。この文章の部分を編集/消してみることでカスタマイ
ズできます。

[3.0pl112 まで]

それでも英語のwarningがでてしまいます。

A2: 注意書きを後ろに持っていくのはwelcome というファイルを編集しましょう

3.5	メールの最後に付加情報をつける設定

注意: 基本的にコマンドの話です。

	$PREAMBLE_MAILBODY	（前）
	$TRAILER_MAILBODY	（後）
	を本文の前後に必ず付けます。

つまり、
	e.g. HELP コマンドにたいして、

	$PREAMBLE_MAILBODY	（前）
	HELPファイル本文
	$TRAILER_MAILBODY	（後）

のようになります。昔のやり方は

   $SMTP_OPEN_HOOK = q# $e{'Body'} .= $PREAMBLE_BODY.$e{'Body'}; #;
   ＃注：普通のＭＬのメールに $PREAMBLE_BODY がついて配送

ですが今は汎用性のためSMTPライブラリ中で処理されます。

これと同様にすれば、本文にメールカウントを埋め込むことも可能になります。
注意： 配送されるメール本体につける方法。これは倫理的な問題があるので
変数などで容易にできるように実装されていません。
If you rewrite the distribution mail, please use a hook BY YOUR OWN
RESPONSIBILITY AND RISK.

Example: 注意:このHOOKが走る関数中では %e == %Envelope 

   $SMTP_OPEN_HOOK = q# $e{'Body'} .= "Mail Count: $ID\n\n".$e{'Body'}; #;

例： メール本文にヘルプを常につけたす

   $SMTP_OPEN_HOOK = q% 

	$e{'Body'} .= 
       "\nTo need help, please send 'help' to elena-ctl\@fml.org."; 

   %;

3.6	command status report をしなくさせる

command status をおくりかえしている部分を disable するには
＃コマンドの普通の受け答え（？）の類をやみにほうむるには

    &DEFINE_MODE('disablenotify'); 

と config.ph に書くとこの関数がダミーの状態で呼ばれるけど何もしないよ
うになります。ただし新規登録の時の welcome 部分は例外処理してるからこ
れじゃだめなんですけどね

3.7	welcomeというファイルの内容の前についてしまう部分を削除/編集

[3.0pl113 以降]

この部分はあるテンプレートファイルを変換して生成しています。

/usr/local/fml/messages/Japanese/amctl というファイルに

amctl.added.caution:
        注意: このメールにリプライするとメーリングリスト宛になります。
        メーリングリストへの投稿は      <_ARG1_>
        コマンドは                      <_ARG2_>
        管理者宛のメールは              <_ARG0_>
        へ送って下さい。

という定義があります。この文章の部分を編集/消してみることでカスタマイ
ズできます。

[3.0pl112 まで]

それでも英語のwarningがでてしまいます。

A2: 注意書きを後ろに持っていくのはwelcome というファイルを編集しましょう

3.8	本文へ注意をつけたす (2000/06/05 以降の fml-current の場合)

$START_HOOK = q#
	my ($s) = &GET_BUFFER_FROM_FILE("$DIR/info");
	&ENVELOPE_APPEND('Body', &STR2JIS($s));
#;

ここで $DIR/info は /var/spool/ml/elena/info に展開される。

/var/spool/ml/elena/info というファイルを作りこの中に
    ◯◯◯ ＭＬの抜け方は ……… です。
などと書いておきます。

過去のリリース、fml-stable および 2000/06 以前の current では
%Envelope を直接いじってください。

CAUTION: メール本文をいじることと慣習法と倫理(私見)
    常識的にはメールも郵政省の郵便も本質的に同じはずです、輸送形態が非常に
    異なるのは事実ですが。なんらかの理由で普通の配送時のメール本文になにか
    付けて配送したい時、つまりールの中を勝手にいじって配送するとする場合、
    それは「人の郵便を勝手に開けて、人の手紙に手を加えるようなもので、倫理
    的に許されるのか？」疑問です。いってみればヘッダ情報は封筒の表のような
    ものです。付加情報をつけたり、転送先を書いたり情報の削除・追加をします。
    でも封筒の中身を開けて「この封筒の中身は13000番めの文通封書です」と本
    文に付けたしてからまた封を閉じることを郵便局の人間がやったら人々はその
    行為を許すでしょうか?

その他の問題: 

1. degital signature 

	メールの degital signature があったら、勝手に文章を付け足すこ
	とはそれを無意味にしてしまいます。いったいどこにつけるのが正し
	いのか？

2. MIME

	MIME blocks の終った後につけても、多くのメールソフトでは
	それは見えないでしょう。
	もっともＭＬのメールが全部 MIME multipart ということは
	ないでしょうから、それなりに付け足すヘルプは見てもらえるだろう
	ということでOKなのかもしれません。

3.9	本文へ注意をつけたす (2000/06/05 以前の場合)

これと同様にすれば、本文にメールカウントを埋め込むことも可能になります。
注意： 配送されるメール本体につける方法。これは倫理的な問題があるので
変数などで容易にできるように実装されていません。

注意: このHOOKが走る関数中では %e == %Envelope 

例： メール本文にヘルプを常につけたす

    $SMTP_OPEN_HOOK = q% 
       my($help_message) = "\n---\nHELP: please send 'help' to $CONTROL_ADDRESS";
       $e{'Body'} .= $help_message;
    %;


		INDEX

