[PREVIOUS CHAPTER]
3 Hooks
Perl is an interpreter language. FML evaluates several hooks in a lot
of places. In this chapter we describe hooks. You can use complicated
control of FML and dynamic configuration changes by using hooks.
3.1 $START_HOOK
FML evaluates $START_HOOK, after header parsing and fundamental checks
but before main distribution and command functions
3.2 $HEADER_ADD_HOOK
Evaluated before header generation of distribution articles. $body
variable is used.
Example: add the field "X-Baycity-Weather: Mizumaki" (riddle:-).
$HEADER_ADD_HOOK = q#
$body .= "X-Baycity-Weather: Mizumaki\n";
#;
is the same as
&DEFINE_FIELD_FORCED("X-Baycity-Weather","Mizumaki");
Example 2: append the original Message-Id.
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
evaluated in the begging of &Distribute which is the main function of
distribution.
3.4 $SMTP_OPEN_HOOK
The variable name is historical, so ambiguous. Today this hook is
evaluated after $DISTRIBUTE_START_HOOK but before $HEADER_ADD_HOOK.
You can understand faster to see libdist.pl.
Example: Overwrite Reply-To: field of distribution mail. Today we
recommend to use $DEFINE_FIELD_FORCED.
$SMTP_OPEN_HOOK = q#
$Envelope{'fh:reply-to:'} = $MAIL_LIST;
#;
Example 2: overwrite Precedence: to set "bulk".
$SMTP_OPEN_HOOK = q#
$Envelope{'h:Precedence:'} = 'bulk';
#;
3.5 $DISTRIBUTE_CLOSE_HOOK (SMTP_CLOSE_HOOK)
$DISTRIBUTE_CLOSE_HOOK is evaluated in the last of &Distribute, which
is the main function of distribution. $SMTP_CLOSE_HOOK is an old
obsolete name, so both are same.
3.6 $FML_EXIT_HOOK
fml.pl evaluates this hook in the last. This evaluation is after
unlock! This hook is the last hook but $FML_EXIT_PROG is executed
after this since $FML_EXIT_PROG is to start a new process.
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.
In default, digest delivery's subject is
Subject: Matomete Send [PLAINTEXT(UNIX FROM)] (1/1) (Elena Lolobrigita ML)
To overwrite this, you can set the following ...
$MSEND_OPT_HOOK = q%
$MSendOpt{'#uf'} = "#Overwritten... $MSendOpt{'#uf'}";
%;
$MSEND_OPT_HOOK
3.11 $REPORT_HEADER_CONFIG_HOOK
In SMTP library, this hook is evaluated just before the mail is passed
to &Smtp; This routine is used in a reply mail of command results.
3.12 $COMMAND_HOOK (obsolete on to add new commands technique)
3.13 $MODE_BIFURCATE_HOOK
Called in the first stage of &ModeBifurcate where fml.pl running mode
changes.
3.14 $COMMAND_FILTER_HOOK
3.15 $REJECT_COMMAND_FILTER_HOOK
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);
#;
$s is the subject when this hook is evaluated.