summaryrefslogtreecommitdiff
path: root/sapi/milter/milter.php
blob: 0878f2a4d955859efbc5d23d41c52d4af07d9e3a (plain)
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()");
}
?>