配送プロセス( libexec/distribute )を改造して /some/where/help ファイルを送り返すことを考えます。 例えば help@fml.org MLを作り、このアドレスにメールを送ると (うむをいわさず:-)ヘルプファイルを送り返すというものです。
この場合の config.cf の例はこのようになります。
article_post_restrictions = permit_anyoneconfig.cf ファイルの =cut 行以降に hook を書きます。
$distribute_run_start_hook = q{ $curproc->reply_message( { type => "text/plain; charset=iso-2022-jp", path => "/some/where/help", filename => "help", disposition => "help example", }); $curproc->stop_this_process(); };最後の
$curproc->stop_this_process();が fml4 の $DO_NOTHING 変数にあたりますが、fml8 ではメソッドです。 これで、この HOOK 以降、正常の処理が無視されるようになります。 つまり、なにも実行されなくなるというわけです。
ガイドを送り返す仕組みを利用すると良いでしょう。デフォルトではテンプレー トのガイド案内が使われますが、各MLのホームディレクトリに guide ファ イルをおけばそれを送り返してくれます。
「メールの内容にかかわらず常にガイドを送り返す」には、もうひと捻り必要 です。
このためには次のように HOOK で常に guide コマンドを実行するようにする とよいでしょう。なお通常の処理は行なわないようにしています。
$distribute_run_start_hook = q{ # guide コマンドを呼び出します。 # guide コマンドの内容は汎用のメールキューシステムに渡されます。 use FML::Command; my $dispatch = new FML::Command; my $context = $curproc->command_context_init("guide"); $dispatch->guide($curproc, $context); # 通常の処理を行ないません。 $curproc->stop_this_process(); }; # コマンドメールでも同じくガイドを送り返すように $command_mail_run_start_hook = $distribute_run_start_hook;fml4 と異なり、配送用とコマンドメール用それぞれのプロセスごとにHOOK が分かれていることに注意して下さい。このため最後に同じ内容のコマンドメー ル用の HOOK も定義しています(コピーしています)。
$command_mail_run_start_hook = $distribute_run_start_hook;
前レシピに似ていますが、少し違います。
たとえば意見受付用のMLを考えてみましょう。 このMLに意見を送ってくれた人には、 とりあえずお礼の返事 「ご意見ありがとうございました。返事はしばらく待ってね。」を出し、 メールは関係者に配送します。 よって、 (1) だれでも投稿できて、 (2) お礼を常に出し、 (3) さらに普通のMLとして動作する、 ように設定します。
[config.cf] article_post_restrictions = permit_anyone =cut $distribute_run_start_hook = q{ my $cred = $curproc->credential(); my $sender = $cred->sender(); # MLのメンバーでないならガイドを送り返します。 # MLのメンバーに対しては普通のMLとなります。 unless ($cred->is_member($sender)) { # guide コマンドを呼び出します。 use FML::Command; my $dispatch = new FML::Command; my $context = $curproc->command_context_init("guide"); $dispatch->guide($curproc, $context); } };
author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.
For questions about FML, e-mail <fml-bugs@fml.org>.