	HOOK Ȥäޥ(ޥ)

------------------------------------------------------------
1	HOOKγ

2	桼HOOKʤɤǰ˻Ȥؿ 
2.1	إåط
2.2	%Envelope 
2.3	եɤ
2.4	δؿȤ (ʸդĤ)

3	եåΰ
3.1	$START_HOOK
3.2	$HEADER_ADD_HOOK
3.3	$DISTRIBUTE_START_HOOK
3.4	$SMTP_OPEN_HOOK
3.5	$DISTRIBUTE_CLOSE_HOOK (SMTP_CLOSE_HOOK)
3.6	$FML_EXIT_HOOK
3.7	$FML_EXIT_PROG
3.8	$MSEND_START_HOOK
3.9	$MSEND_HEADER_HOOK
3.10	$MSEND_OPT_HOOK
3.11	$REPORT_HEADER_CONFIG_HOOK
3.12	$COMMAND_HOOK (obsolete on to add new commands technique)
3.13	$MODE_BIFURCATE_HOOK
3.14	$COMMAND_FILTER_HOOK
3.15	$REJECT_COMMAND_FILTER_HOOK
3.16	$DISTRIBUTE_SUMMARY_HOOK
------------------------------------------------------------


1	HOOKγ

HOOK (Ĥꤢ) fml νΤ˻ŹޤƤ뤷
ǤȤȤǡñʤѿǡ֢򤹤롿ʤפۤ
üʽ򤹤뤳ȤǤޤ
ȳˤäƤϥޥȤȤ狼롩

褦ˡֳפȤԵΰȤ򤹤櫓Ǥ
㳰ŪʤȤ򤹤뤿

	perl ľܥץ񤭤ޤ
	fml ¤ˤ٤ĤƤʤȤޤ

ȤɬפǤ

HOOK  3

HOOK ǻȤȤ褤ؿ 		2
	(fml ؿ) 	internals 10

Ǥϼ HOOK ȤϲˤĤƤΥե󥹤Ǥ
ޤΥ塼ȥꥢϳƥơޤȤʬƤΤǡǤ
ƥơޤHOOKλϸ椹뤳Ȥˤޤ

2	桼HOOKʤɤǰ˻Ȥؿ 

2.1	إåط

GET_HEADER_FIELD_VALUE( header_field )

	ߤͤФ

GET_ORIGINAL_HEADER_FIELD_VALUE( header_field )

	fml ǽ˥᡼ȤäθͤФ

SET_HEADER_FIELD_VALUE( header_field , value )

	Ҥ GET_HEADER_FILED_VALUE() оΤ˺äؿ
	إåեɤͤˤΤˤ롣

	褦 DEFINE_FIELD_FORCED() Ȱ
	⤦äŪ

2.2	%Envelope 

GET_ENVELOPE_VALUE( hash_key )

	%Envelope ϥåΤ륭ͤФ

SET_ENVELOPE_VALUE( hash_key, value )

	%Envelope ϥåΤ륭ͤꤹ or 񤭤롣

ENVELOPE_APPEND( hash_key, value )

	%Envelope ϥåΤ륭ͤĤ
	Ĥޤ긽ߤƤθˤ롣

ENVELOPE_PREPEND( hash_key, value )

	%Envelope ϥåΤ륭ͤĤߤƤ
	ľ롣

2.3	եɤ

GET_BUFFER_FROM_FILE( file )

	եɤƤ֤ͤ
	礭ʥեɤޤʤȤ⤦

	$s = &GET_BUFFER_FROM_FILE( "$DIR/xxx" );

2.4	δؿȤ (ʸդĤ)

(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 ľܤäƤ
3	եåΰ

󥿥ץ꥿ʤΤ(㤨 config.ph )եåŬʾ
HOOKɾ¹Ԥޤ

ΥեåǤäʣʥߥåʥФεưѹ򤷤
Ǥޤconfig.ph ΤMLʣäƤMLȤѹǤ
櫓Ǥ sitedef.ph ǹԤʤML̤HOOKųݤ뤳ȤǤ


3.1	$START_HOOK

ɾ륿ߥ󥰤ϡ
	إåγƥեɤڤФϽäƤ롣
	orޥΤԤʤ
Ǥ롣

: ˤ⤷ #ǤϤޤʤԤ԰ʾ夢СȤ#ǤϤޤ
ԤäƤ̤Υ᡼Ȥ⤦褦ˤ롣

$START_HOOK =q%
    if ($Envelope{'nlines'} - $Envelope{'nclines'} >= 8) {
	undef $Envelope{'mode:uip'};
    }
%;

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");

Τ褦ʴؿǤǤ롣

㣲:

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ѤǤϤޤŪ̾Ǥ
See also: 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'; ǣϣˤ


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  Ȥؿ򸫤Ȥ狼Ȥ⤤ޤ
See also: 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
See also: filter 4.1 

3.15	$REJECT_COMMAND_FILTER_HOOK
See also: 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 ˤʤäƤޤ


		INDEX

$COMMAND_FILTER_HOOK                       ...   3.14 
$COMMAND_HOOK                              ...   3.12 
$DISTRIBUTE_CLOSE_HOOK                     ...   3.5 
$DISTRIBUTE_START_HOOK                     ...   3.3 
$DISTRIBUTE_SUMMARY_HOOK                   ...   3.16 
$FML_EXIT_HOOK                             ...   3.6 
$FML_EXIT_PROG                             ...   3.7 
$HEADER_ADD_HOOK                           ...   3.2 
$MODE_BIFURCATE_HOOK                       ...   3.13 
$MSEND_HEADER_HOOK                         ...   3.9 
$MSEND_OPT_HOOK                            ...   3.10 
$MSEND_START_HOOK                          ...   3.8 
$REJECT_COMMAND_FILTER_HOOK                ...   3.15 
$REPORT_HEADER_CONFIG_HOOK                 ...   3.11 
$SMTP_CLOSE_HOOK                           ...   3.5 
$SMTP_OPEN_HOOK                            ...   3.4 
$START_HOOK                                ...   3.1 
ޥɤΥޥ                     ...   3.12 
