1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
<?php
/**
* example milter script
*
* run: php-milter -D -p /path/to/sock milter.php
*
* for details on how to set up sendmail and configure the milter see
* http://www.sendmail.com/partner/resources/development/milter_api/
*
* for api details see
* http://www.sendmail.com/partner/resources/development/milter_api/api.html
*
* below is a list of all callbacks, that are available through the milter sapi,
* if you leave one or more out they simply won't get called (e.g. if you secify an
* empty php file, the milter would do nothing :)
*/
/**
* this function is called once on sapi startup,
* here you can specify the actions the filter may take
*
* see http://www.sendmail.com/partner/resources/development/milter_api/smfi_register.html#flags
*/
function milter_log($msg)
{
$GLOBALS['log'] = fopen("/tmp/milter.log", "a");
fwrite($GLOBALS['log'], date("[H:i:s d.m.Y]") . "\t{$msg}\n");
fclose($GLOBALS['log']);
}
function milter_init() {
milter_log("-- startup --");
milter_log("milter_init()");
smfi_setflags(SMFIF_ADDHDRS);
}
/**
* is called once, at the start of each SMTP connection
*/
function milter_connect($connect)
{
milter_log("milter_connect('$connect')");
}
/**
* is called whenever the client sends a HELO/EHLO command.
* It may therefore be called between zero and three times.
*/
function milter_helo($helo)
{
milter_log("milter_helo('$helo')");
}
/**
* is called once at the beginning of each message,
* before milter_envrcpt.
*/
function milter_envfrom($args)
{
milter_log("milter_envfrom(args[])");
foreach ($args as $ix => $arg) {
milter_log("\targs[$ix] = $arg");
}
}
/**
* is called once per recipient, hence one or more times per message,
* immediately after milter_envfrom
*/
function milter_envrcpt($args)
{
milter_log("milter_envrcpt(args[])");
foreach ($args as $ix => $arg) {
milter_log("\targs[$ix] = $arg");
}
}
/**
* is called zero or more times between milter_envrcpt and milter_eoh,
* once per message header
*/
function milter_header($header, $value)
{
milter_log("milter_header('$header', '$value')");
}
/**
* is called once after all headers have been sent and processed.
*/
function milter_eoh()
{
milter_log("milter_eoh()");
}
/**
* is called zero or more times between milter_eoh and milter_eom.
*/
function milter_body($bodypart)
{
milter_log("milter_body('$bodypart')");
}
/**
* is called once after all calls to milter_body for a given message.
* most of the api functions, that alter the message can only be called
* within this callback.
*/
function milter_eom()
{
milter_log("milter_eom()");
/* add PHP header to the message */
smfi_addheader("X-PHP", phpversion());
}
/**
* may be called at any time during message processing
* (i.e. between some message-oriented routine and milter_eom).
*/
function milter_abort()
{
milter_log("milter_abort()");
}
/**
* is always called once at the end of each connection.
*/
function milter_close()
{
milter_log("milter_close()");
}
?>
|