This consists of 3 parts;
The config change is as follows;
/etc/exim4/virtualDomains/<domain> (or however you've setup your virtual domains) ^bounce.*:|/var/bounce_processing.php
I also needed to change my Exim config to allow regexp in an alias, as per http://www.acmelabs.co.uk/?p=4
/etc/exim4/conf.d/router/400_exim4-config_system_aliases: data = ${lookup{$local_part}lsearch{/etc/aliases}}
becomes
data = ${lookup{$local_part}wildlsearch{/etc/aliases}}
The PHP script is as follows;
#!/usr/bin/php <?php /* *** Script to process bounces Mike Bordignon 16 Jan 2009 */ require('bounce_dbconn.php'); # Get stdin $fp = fopen('php://stdin', 'r'); while ( !feof($fp) ) { $buff .= fread($fp, 4096); } fclose($fp); unset($fp); $email_data = $buff; unset($buff); $email_data2 = explode(chr(10), $email_data); foreach ($email_data2 as $v) { // Find to address if ( substr($v, 0, 10) == 'To: bounce' ) { list(, $email) = explode(':', $v); list($mailbox, $domain) = explode('@', $email); list(, $bounce_id_sha) = explode('+', $mailbox); $q = "SELECT id FROM addresses WHERE sha1Hash = '$bounce_id_sha'"; $r = mysql_query($q) or die(mysql_error()); if ( !mysql_num_rows($r) ) { break; } else { $data = mysql_fetch_array($r); $bounce_id = $data['id']; } mysql_select_db('database'); $q = "UPDATE addresses SET active = 0 WHERE id = $bounce_id"; mysql_query($q); break; } }
You'll obviously need to send your emails from a different From: address to identify them in the event they bounce. I use bounce+<sha1 or similar hash>@domain.co.nz. To create the hash I've used the database id concatenated with a secret.
No page links to EximBounceProcessing.