[PREVIOUS CHAPTER] [______TOC_______]
3 フックの一覧


インタプリタなので(例えば config.ph に)フックを定義すれば適当な場所で
そのHOOKは評価され実行されます。

そのフックでちょっと複雑な設定やダイナミックなサーバの挙動の変更をした
りできます。config.ph で定義するのでMLが複数あってもMLごとに変更できる
わけです。一方 sitedef.ph で行なえばML共通のHOOKを仕掛けることができま
す。

3.1	$START_HOOK

評価されるタイミングは、
	ヘッダの各フィールドの切り出しは終っている。
	が、配送orコマンド本体を行なう前
である。


3.2	$HEADER_ADD_HOOK

ヘッダに”新たに”つけくわえるフィールドをかいてカスタマイズするための
フック。

現在では $body という変数はこのためだけに使われる。
#注意:昔は違った

例(昔のやり方):

    $HEADER_ADD_HOOK = q#
	$body .= "X-Baycity-Weather: Mizumaki\n";
    #;

ヘッダに X-Baycity-Weather: Mizumaki とつけくわえる(意味不明(笑))
現在では同じことは例えば 

	&DEFINE_FIELD_FORCED("X-Baycity-Weather","Mizumaki");

のような関数でできる。

例2:

Message-ID: <19950518.01905.Elena.Lolobrigita@Baycity.asia>

$HEADER_ADD_HOOK = q#
   $body .= "Message-ID: ".
	sprintf("<%4d%02d%02d.%05d.%s>\n", 1900 + $year, $mon + 1, $mday, $ID, 
	"Elena.Lolobrigita@Baycity.asia");
#;

3.3	$DISTRIBUTE_START_HOOK

配送を始める関数に入った時に最初に評価されるHOOK

3.4	$SMTP_OPEN_HOOK

配送時にはこのフックの後 Sendmail へ渡すヘッダの処理が始まります。ここ
で強制的かつダイナミックにヘッダの内容を変えたりすると効果的です。単に
ヘッダの各フィールドを書き換えるのなら &DEFINE_FIELDうじゃうじゃ 関数
シリーズが用意されています。そちらを使うのがよいでしょう。
SMTPという名前がついていますがSMTP汎用ではありません。歴史的な名前です。
../header_rewrite 5.1../header_rewrite 5.2

例:	Reply-To: フィールドをML自体へ強制書き換え
	&DEFINE_FIELD_うじゃうじゃ以外にも別解はいくつかあるが解1

$SMTP_OPEN_HOOK = q#
	$Envelope{'fh:reply-to:'} = $MAIL_LIST; 	
#;

例2:	Precedence: を bulk へ

$SMTP_OPEN_HOOK = q#
	$Envelope{'h:Precedence:'} = 'bulk';
#;

Precedence: に関しては実は config.ph で $PRECEDENCE = 'bulk'; でOKで
す。

3.5	$DISTRIBUTE_CLOSE_HOOK (SMTP_CLOSE_HOOK)

$DISTRIBUTE_CLOSE_HOOK は配送が終った後でかつまだロックされている状態
で実行されます。具体的には &Distribute; を離れる直前に実行されます。
$SMTP_CLOSE_HOOK は昔の名前です。

3.6	$FML_EXIT_HOOK

fml.pl が最後に実行する フック。このときすでに 『排他制御の lock が解
除されている』いることに注意して下さい。

3.7	$FML_EXIT_PROG

In the last of fml.pl, FML starts $FML_EXIT_PROG as a new process by
exec(2) system call (precisely speaking via exec(3)).

3.8	$MSEND_START_HOOK

After msend.pl is initialized, msend.pl evaluates this hook in the
begging of the main function. See msend.pl internal.

3.9	$MSEND_HEADER_HOOK

In the header generation when sending digest mail creation time.

3.10	$MSEND_OPT_HOOK

msend.pl evaluates $MSEND_OPT_HOOK in the &MSendInit.

例:
デフォールトでは、まとめおくり や mget の時の Subject は

Subject: Matomete Send [PLAINTEXT(UNIX FROM)] (1/1) (Elena Lolobrigita ML)

のようになります。が    ↑↑↑↑ここのところの文章がきにいらないので
OVERWRITE したいときは、

$MSEND_OPT_HOOK = q%
    $MSendOpt{'#uf'} = "#Overwritten... $MSendOpt{'#uf'}";
%;

このように、
		$MSEND_OPT_HOOK 
に 連想配列の 

	#モード の値が #説明の文章

のようにかいてください。なにをやってるのかは、libutils.pl の中の
sub MSendModeSet  という関数を見るとわかるとおもいます。
../digest 2.6

3.11	$REPORT_HEADER_CONFIG_HOOK

SMTP 配送ライブラリへ渡す直前に評価されるフック。

3.12	$COMMAND_HOOK (obsolete on to add new commands technique)

現在のfmlでは %Procedure に登録していない関数を実行しようとするとエラー
になります。そのため $COMMAND_HOOK によるコマンドの実行はできません。


3.13	$MODE_BIFURCATE_HOOK

モードが分岐する関数の中で呼ばれるHOOK。ほとんど先頭で呼ばれる。実際に
は sub ModeBifurcate を見ないと何だか分からないだろう。

3.14	$COMMAND_FILTER_HOOK
../filter 4.1

3.15	$REJECT_COMMAND_FILTER_HOOK
../filter 4.1

3.16	$DISTRIBUTE_SUMMARY_HOOK

$DISTRIBUTE_SUMMARY_HOOK = q#
	&Append2(sprintf("%s [%d:%s] %s", 
			 $Now, $ID, substr($From_address, 0, 15), $s),
		 $SUMMARY_FILE);
#;

このHOOKが評価される時 $s は subject になっています。


3.17	%COMMAND_START_HOOK  %COMMAND_END_HOOK

2001/09/11 以降の 4.0 stable/current で使用可能です。
4.0.3 リリースには入っています。

	eval $COMMAND_START_HOOK{ コマンド }
	コマンドを実行
	eval $COMMAND_START_HOOK{ コマンド }

  例:

	$COMMAND_END_HOOK{ 'chaddr' } = q{
	    chaddr コマンド特有のなにかをする。
	    例えばメッセージの送り返す先を変更するなど
	};


3.18	%ADMIN_COMMAND_START_HOOK  %ADMIN_COMMAND_END_HOOK

2001/12/27 以降の 4.0 stable/current で使用可能です。

	eval $ADMIN_COMMAND_START_HOOK{ コマンド }
	admin コマンドを実行
	eval $ADMIN_COMMAND_START_HOOK{ コマンド }