[PREVIOUS CHAPTER] [______TOC_______]
Appendix A 事例

Appendix A.1	改造事例: Reply-To == MLで必要な時にはReply-Toを設定するコマンド

fml 2.x ではこのままではうごきません。参考までに収録しています。

From:    Yuao Tanigawa <yuao@infonia.or.jp>
X-ML-Name: fml-support
X-Mail-Count: 01249

メール本文の最初に、
	# replyto myaddr@mydomain 

と書いて、次の行から通常の文章を書いて投稿すれば、
Reply-To にそのアドレスをセットして記事を配送します。

  うちのMLでは、今まで、Reply-Toのアドレスを強制的にはMLの
アドレスに書き換えないようにしていたのですが、最近、いつも
Reply-Toに自分のアドレスを書いて投稿する人とかいて、Reply-To
にはアドレスを書かないようにと言うと、メールソフトの使い方
とかよく知らなくて、Reply-Toのアドレスの設定方法とかも知ら
ない人とかいたりして(学校とかでも周りの人とかも知らないら
しい)、どうしようもなくなったので、Reply-Toには、強制的に
MLのアドレスを書くようにしました。
  でも、必要なときにはReply-Toにアドレスが設定できると便利
なので、以下のようにして、# replyto コマンドを使えるように
してみました。

  config.phで、$SMTP_OPEN_HOOK には、

    $Envelope{'h:reply-to:'} = $Reply_to
            = $Envelope{'command:reply-to:'} || $MAIL_LIST;

として、$COMMAND_HOOK には、

    if(/replyto/io) {
        &Log("Set Reply-To: $Fld[2]");
        $e{'command:reply-to:'} = $Fld[2];
        $e{'Body'} =~ s/#\s*replyto\s+\S+\n//io;
        &Distribute;
        last GivenCommands;
    }

としました。ただし、この場合、$COMMAND_HOOK のクォートに、
`#'記号が使えないです。


でもコマンドで実装しなくてもええやんか?メール本文の先頭に
Reply-To: address があったらそれを設定する。

$START_HOOK = q!
    local($pat) = '.*\s*reply-to:\s*';
    local($s);
    if ($Envelope{'Body'} =~ /^$pat(\S+)/i) {
	&DEFINE_FIELD_FORCED('reply-to', $s=$1);
        &Log("reply-to: <$s>");
	$Envelope{'Body'} =~ s/^$pat\S+\n//io;
    }
!;