#!/usr/local/php5/bin/php
<?php
/* @package Sendmail Wrapper
@version 0.1
@author MiRacLe <miracle@rpz.name>
@since 13.03.2006
@description For php, it means changing sendmail_path to point at this file.
*/
// unique message id to use for this message
$messageid = uniqid('php');
// log file to write to (should use $messageid)
$logfile = '/var/log/sendmail/'.$messageid;
// path to sendmail
$sendmail = '/usr/sbin/sendmail.real -t -i';
// additional headers
$add_headers = array();
$add_headers['X-MsgID'] = $messageid;
if (preg_match('~/home/([a-zA-Z0-9\._-]*)(/.*)?~', $_SERVER['PWD'], $matches)) {
$add_headers['X-Generating-Domain'] = $matches[1];
$logfile = '/var/log/sendmail/'.$matches[1].'_'.$messageid;
}
/*****************************************************************************
Workhourse here ;o)
*****************************************************************************/
// read STDIN (mail message)
while (!feof(STDIN)) {
$data .= fread(STDIN, 1024);
}
// split out headers
list ($headers, $message) = explode("\n\n", $data, 2);
// add additional headers
if ($add_headers) {
foreach ($add_headers as $field=>$contents) {
$headers .= "\n".$field.": ".$contents;
}
}
// reassemble the message
$data = $headers."\n\n".$message;
$processUser = posix_getpwuid(posix_geteuid());
// write to our log file
$_message = 'Date:'."\t".date('r')."\n";
$_message .= 'PWD:'."\t".$_SERVER['PWD']."\n";
$_message .= 'UID:'."\t".$processUser['name']."\n";
$_message .= 'Msg ID'."\t".$messageid."\n\nMessage:\n----------\n";
$_message .= stripslashes($data);
file_put_contents($logfile,$_message);
$isSpam = false;
/*
check spam signatures here
*/
// write to the real sendmail
if (! $isSpam) {
$h = popen($sendmail, "w");
fwrite($h, $data);
pclose($h);
}
?>