Email Bounce Handling

0
350

Here’s some PHP code developed to handle bounced email responses. This will give each response a code to $resno and a category to $rescat. There are 4 categories:

  • Unknown – Hard bounce user or email address isn’t valid
  • Spam – Soft bounce, blocked by spam filters
  • Full – Soft bounce, user is out of resources or inbox is full
  • Block – Soft bounce, IP/Domain is being blocked for SMTP connections

if (false) {
} elseif (preg_match (“/user doesn’t have/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ‘2’;
} elseif (preg_match (“/reach does not exist/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ‘3’;
} elseif (preg_match (“/account has been disabled/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ‘4’;
} elseif (preg_match (“/likely unsolicited mail/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ‘5’;
} elseif (preg_match (“/mailbox unavailable/i”,$body)) {
$rescat    = ‘full’;
$resno     = ‘6’;
} elseif (preg_match (“/Blocked for abuse/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ‘7’;
} elseif (preg_match (“/5.2.1/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ‘8’;
} elseif (preg_match (“/5.7.1/i”,$body)) {
$rescat    = ‘block’;
$resno     = ‘9’;
} elseif (preg_match (“/due to spam content/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’10’;
} elseif (preg_match (“/Host or domain name not found/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’11’;
} elseif (preg_match (“/550 Blocked/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’12’;
} elseif (preg_match (“/554 Denied/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’13’;
} elseif (preg_match (“/mailbox is full/i”,$body)) {
$rescat    = ‘full’;
$resno     = ’14’;
} elseif (preg_match (“/temporarily over quota/i”,$body)) {
$rescat    = ‘full’;
$resno     = ’15’;
} elseif (preg_match (“/unexpected name server reply/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’16’;
} elseif (preg_match (“/Recipient does not exist/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’17’;
} elseif (preg_match (“/not a valid user/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’18’;
} elseif (preg_match (“/5.1.0 Address rejected/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’19’;
} elseif (preg_match (“/550 Mailbox not found/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’20’;
} elseif (preg_match (“/disabled or discontinued/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’21’;
} elseif (preg_match (“/No such user/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’22’;
} elseif (preg_match (“/No account by that name/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’23’;
} elseif (preg_match (“/550 permanent failure/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’24’;
} elseif (preg_match (“/Account Inactive/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’25’;
} elseif (preg_match (“/5.2.2 Over quota/i”,$body)) {
$rescat    = ‘full’;
$resno     = ’26’;
} elseif (preg_match (“/quota exceeded/i”,$body)) {
$rescat    = ‘full’;
$resno     = ’27’;
} elseif (preg_match (“/User unknown/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’28’;
} elseif (preg_match (“/loops back to myself/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’29’;
} elseif (preg_match (“/Mail delivery limit exceeded/i”,$body)) {
$rescat    = ‘full’;
$resno     = ’30’;
} elseif (preg_match (“/att.net/blocks/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’31’;
} elseif (preg_match (“/Relaying denied/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’32’;
} elseif (preg_match (“/this server doesn’t handle mail/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’33’;
} elseif (preg_match (“/Unknown user/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’34’;
} elseif (preg_match (“/rejected as spam/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’35’;
} elseif (preg_match (“/550 Unrouteable/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’36’;
} elseif (preg_match (“/probability of spam/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’37’;
} elseif (preg_match (“/Recipient address rejected/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’38’;
} elseif (preg_match (“/Invalid recipient address/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’39’;
} elseif (preg_match (“/554 No relaying allowed/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’40’;
} elseif (preg_match (“/mailbox temporarily disabled/i”,$body)) {
$rescat    = ‘full’;
$resno     = ’41’;
} elseif (preg_match (“/550 no mailbox by that name/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’42’;
} elseif (preg_match (“/Spam-score too high/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’43’;
} elseif (preg_match (“/Invalid recipient/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’44’;
} elseif (preg_match (“/address does not exist/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’45’;
} elseif (preg_match (“/is over quota/i”,$body)) {
$rescat    = ‘full’;
$resno     = ’46’;
} elseif (preg_match (“/Recipient unknown/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’47’;
} elseif (preg_match (“/554 rejecting banned content/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’48’;
} elseif (preg_match (“/Bad destination host/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’49’;
} elseif (preg_match (“/account is unavailable/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’50’;
} elseif (preg_match (“/longer accepts mail/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’51’;
} elseif (preg_match (“/does not exist/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’52’;
} elseif (preg_match (“/is suspended/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’53’;
} elseif (preg_match (“/not currently being accepted for this mailbox/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’54’;
} elseif (preg_match (“/User address required/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’55’;
} elseif (preg_match (“/Relay access denied/i”,$body)) {
$rescat    = ‘unkown’;
$resno     = ’56’;
} elseif (preg_match (“/relay not permitted/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’57’;
} elseif (preg_match (“/mailbox is inactive/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’58’;
} elseif (preg_match (“/User not known/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’59’;
} elseif (preg_match (“/inactive user/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’60’;
} elseif (preg_match (“/501 Bad address/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’61’;
} elseif (preg_match (“/invalid mailbox/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’62’;
} elseif (preg_match (“/I couldn’t find any host named/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’63’;
} elseif (preg_match (“/User not found/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’64’;
} elseif (preg_match (“/find a mail exchanger or IP address/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’65’;
} elseif (preg_match (“/Not our Customer/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’66’;
} elseif (preg_match (“/recipient rejected/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’67’;
} elseif (preg_match (“/sender was rejected/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’68’;
} elseif (preg_match (“/this message has been in the queue too long/i”,$body)) {
$rescat    = ‘block’;
$resno     = ’69’;
} elseif (preg_match (“/blocked/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’94’;
} elseif (preg_match (“/rejected/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’95’;
} elseif (preg_match (“/spam/i”,$body)) {
$rescat    = ‘spam’;
$resno     = ’96’;
} elseif (preg_match (“/unknown/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’97’;
} elseif (preg_match (“/relay/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’98’;
} elseif (preg_match (“/exist/i”,$body)) {
$rescat    = ‘unknown’;
$resno     = ’99’;
}

From here you can handle each category in any way you see fit, i.e. removing all hard bounces from the email list.
i.e. if ($rescat == ‘unknown’) { dowhatever(); }

LEAVE A REPLY

Please enter your comment!
Please enter your name here