function event_finish($postfix_id, $to, $status, $bounce_error, $from = null, $buffer = null) { if ($GLOBALS["EnableArticaSMTPStatistics"] == 0) { return; } $delivery_success = 'yes'; if ($status == 'bounced') { $delivery_success = 'no'; } if ($status == 'deferred') { $delivery_success = 'no'; } if ($status == 'reject') { $delivery_success = 'no'; } if ($status == 'expired') { $delivery_success = 'no'; } if (preg_match("#Queued mail for delivery#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Sender address rejected: need fully-qualified address#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "need fully-qualified address"; } if (preg_match("#no mailbox here#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "Mailbox Unknown"; } if (preg_match("#refused to talk to me.+?RBL rejection#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "RBL"; } if (preg_match("#550.+?Service unavailable.+?blocked using.+?RBL#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "RBL"; } if (preg_match("#554 : Recipient address rejected: Access denied#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "Access denied"; } if (preg_match("#451 4.2.0 Mailbox has an invalid format#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "Mailbox corrupt"; } if (preg_match("#delivered via#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Content scanner malfunction#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Content scanner malfunction"; } if (preg_match("#4\\.5\\.0 Failure#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Error"; } if (preg_match("#250 2\\.0\\.0 Ok#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Host or domain name not found#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Host or domain name not found"; } if (preg_match("#4\\.5\\.0 Error in processing#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Error"; } if (preg_match("#Sender address rejected.+?Domain not found#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Domain not found"; } if (preg_match("#delivered to command: procmail -a#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sent to procmail"; } if (preg_match("#550 must be authenticated#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Authentication error"; } if (preg_match("#250 Message.+?accepted by#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Connection timed out#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "timed out"; } if (preg_match("#connect\\s+to.+?Connection refused#", $bounce_error)) { if (preg_match("#connect to 127\\.0\\.0\\.1\\[127\\.0\\.0\\.1\\]:2003:#", $bounce_error)) { $file = "/etc/artica-postfix/croned.1/postfix.lmtp.127.0.0.1:2003.refused"; if (file_time_min($file) > 5) { if ($GLOBALS["ZARAFA_INSTALLED"]) { email_events("Postfix: Zarafa LMTP Error", "Postfix\n{$buffer}\nArtica will trying to start Zarafa", "postfix"); $cmd = "{$GLOBALS["NOHUP_PATH"]} /etc/init.d/artica-postfix start zarafa >/dev/null 2>&1 &"; shell_exec(trim($cmd)); @unlink($file); file_put_contents($file, "#"); return; } } } $status = "Error"; $delivery_success = "no"; $bounce_error = "Connection refused"; } if (preg_match("#temporary failure.+?artica-msmtp:\\s+recipient address\\s+(.+?)\\s+not accepted by the server artica-msmtp#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "artica-filter error"; } if (preg_match("#host.+?said: 550 No such user#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "No such user"; } if (preg_match("#250 2\\.1\\.5 Ok#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if ($bounce_error == "250 OK: data received") { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if ($bounce_error == "250 Ok: queued as") { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#250\\s+ok#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#504.+?Recipient address rejected#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "recipient address rejected"; } if (preg_match("#Address rejected#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Address rejected"; } if (preg_match("#conversation with .+?timed out#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "timed out"; } if (preg_match("#connect to\\s+(.+?)\\[.+?cyrus.+?lmtp\\]: Connection refused#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "mailbox service error"; cyrus_generic_error($bounce_error, "Cyrus socket error"); } if (preg_match("#host.+?\\[(.+?)\\]\\s+said:.+?<(.+?)>: Recipient address rejected: User unknown in local recipient table#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "User unknown"; $to = $re[2]; } if (preg_match("#host.+?said:\\s+554.+?<(.+?)>:\\s+Recipient address rejected.+?not existing recipient#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "not existing recipient"; $to = $re[2]; } if (preg_match("#said:.+?Authentication required#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Authentication required"; } if (preg_match("#temporary failure.+?[0-9]+\\s+[0-9\\.]+\\s+Bad sender address syntax.+?could not send mail#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Bad sender address syntax"; } if (preg_match("#connect.+?Permission denied#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "service permissions error"; } if (preg_match("#Command died with status 255:.+?exec\\.artica-filter\\.php#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "artica-filter error"; } if (preg_match("#host\\s+(.+?)\\[(.+?)\\]\\s+said:\\s+[0-9]+.+?Recipient address rejected: Access denied#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Access denied"; $smtp_sender = $re[2]; } if (preg_match("#250.+?Ok#i", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Message accepted#i", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#host.+?said:.+?Domain of sender address.+?does not exist#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Your domain does not exist"; } if (preg_match("#connect to .+?No such file or dire#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "socket error"; } if (preg_match("#lost connection with.+?\\[(.+?)\\] while receiving#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "lost connection"; $smtp_sender = $re[1]; } if (preg_match("#host.+?\\[(.+?)\\] said:.+?Recipient address rejected#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Recipient address rejected"; $smtp_sender = $re[1]; } if (preg_match("#loops back to myself#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "loops back to myself"; } if (preg_match("#Sender denied#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Sender denied"; } if (preg_match("#User unknown#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "User unknown"; } if (preg_match("#Bounce attack signature verification failed#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Bounce attack"; } if (preg_match("#mailbox unavailable#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "No mailbox"; } if (preg_match("#Message rejected#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Message rejected"; } if (preg_match("#250 2\\.0\\.0 from MTA#", $bounce_error, $re)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#421-ts03#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Your are blacklisted"; } if (preg_match("#User does not exist#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "No mailbox"; } if (preg_match("#Recipient address rejected#", $bounce_error, $re)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "authentication required"; } if ($bounce_error == "250 OK") { $bounce_error = "Sended"; $delivery_success = "yes"; $status = "Deliver"; } if (preg_match("#lost connection with.+?\\[(.+?)\\]\\s+#", $bounce_error, $re)) { $bounce_error = "lost connection"; $delivery_success = "no"; $smtp_sender = $re[1]; } if (preg_match("#status=bounced \\(message size.+?exceeds size limit.+?of server.+?\\[(.+?)\\]#", $bounce_error, $re)) { $bounce_error = "size exceed limit"; $delivery_success = "no"; $smtp_sender = $re[1]; } if (preg_match("#lost connection with.+?\\[(.+?)\\]\\s+#", $bounce_error, $re)) { $bounce_error = "lost connection"; $delivery_success = "no"; $smtp_sender = $re[1]; } if ($delivery_success == "no") { if ($bounce_error == "User unknown in relay recipient table") { $bounce_error = "User unknown"; } events("event_finish() line " . __LINE__ . " bounce_error={$bounce_error}"); if (preg_match("#connect to.+?\\[(.+?)lmtp\\].+?No such file or directory#", $bounce_error, $ra)) { events("Cyrus error found -> CyrusSocketErrot"); cyrus_socket_error($bounce_error, $ra[1] . '/lmtp'); } if (preg_match("#550\\s+User\\s+unknown\\s+<(.+?)>.+?in reply to RCPT TO command#", $bounce_error, $ra)) { mailbox_unknown($bounce_error, $ra[1]); } } $file = "/var/log/artica-postfix/RTM/{$postfix_id}.msg"; $ini = new Bs_IniHandler($file); if ($smtp_sender == null) { if (preg_match("#from.+?\\[([0-9\\.]+)?\\]#", $buffer, $re)) { $ini->set("TIME", "smtp_sender", $re[1]); } } else { $ini->set("TIME", "smtp_sender", "{$smtp_sender}"); } if ($from != null) { $ini->set("TIME", "mailfrom", $from); } $ini->set("TIME", "mailto", "{$to}"); $ini->set("TIME", "bounce_error", "{$bounce_error}"); $ini->set("TIME", "time_end", date("Y-m-d H:i:s")); $ini->set("TIME", "delivery_success", "{$delivery_success}"); events("event_finish() [{$postfix_id}]: {$from} => {$to} err={$bounce_error} success={$delivery_success}"); $ini->saveFile($file); }
function event_finish($postfix_id, $to, $status, $bounce_error, $from = null, $buffer = null) { $delivery_success = 'yes'; if ($status = 'bounced') { $delivery_success = 'no'; } if ($status = 'deferred') { $delivery_success = 'no'; } if ($status = 'reject') { $delivery_success = 'no'; } if ($status = 'expired') { $delivery_success = 'no'; } if (preg_match("#Queued mail for delivery#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Sender address rejected: need fully-qualified address#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "need fully-qualified address"; } if (preg_match("#no mailbox here#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "Mailbox Unknown"; } if (preg_match("#refused to talk to me.+?RBL rejection#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "RBL"; } if (preg_match("#550.+?Service unavailable.+?blocked using.+?RBL#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "RBL"; } if (preg_match("#554 : Recipient address rejected: Access denied#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "Access denied"; } if (preg_match("#451 4.2.0 Mailbox has an invalid format#", $bounce_error)) { $status = "rejected"; $delivery_success = "no"; $bounce_error = "Mailbox corrupt"; } if (preg_match("#delivered via#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Content scanner malfunction#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Content scanner malfunction"; } if (preg_match("#4\\.5\\.0 Failure#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Error"; } if (preg_match("#250 2\\.0\\.0 Ok#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Host or domain name not found#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Host or domain name not found"; } if (preg_match("#4\\.5\\.0 Error in processing#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Error"; } if (preg_match("#Sender address rejected.+?Domain not found#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Domain not found"; } if (preg_match("#delivered to command: procmail -a#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sent to procmail"; } if (preg_match("#550 must be authenticated#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Authentication error"; } if (preg_match("#250 Message.+?accepted by#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#Connection timed out#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "timed out"; } if (preg_match("#connect\\s+to.+?Connection refused#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Connection refused"; } if (preg_match("#temporary failure.+?artica-msmtp:\\s+recipient address\\s+(.+?)\\s+not accepted by the server artica-msmtp#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "artica-filter error"; } if (preg_match("#250 2\\.1\\.5 Ok#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if ($bounce_error == "250 OK: data received") { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if ($bounce_error == "250 Ok: queued as") { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if (preg_match("#504.+?Recipient address rejected#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "recipient address rejected"; } if (preg_match("#Address rejected#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Address rejected"; } if (preg_match("#conversation with .+?timed out#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "timed out"; } if (preg_match("#connect to\\s+(.+?)\\[.+?cyrus.+?lmtp\\]: Connection refused#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "mailbox service error"; cyrus_generic_error($bounce_error, "Cyrus socket error"); } if (preg_match("#host.+?\\[(.+?)\\]\\s+said:.+?<(.+?)>: Recipient address rejected: User unknown in local recipient table#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "User unknown"; $to = $re[2]; } if (preg_match("#said:.+?Authentication required#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Authentication required"; } if (preg_match("#temporary failure.+?[0-9]+\\s+[0-9\\.]+\\s+Bad sender address syntax.+?could not send mail#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "Bad sender address syntax"; } if (preg_match("#connect.+?Permission denied#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "service permissions error"; } if (preg_match("#Command died with status 255:.+?exec\\.artica-filter\\.php#", $bounce_error)) { $status = "Error"; $delivery_success = "no"; $bounce_error = "artica-filter error"; } if (preg_match("#250 2\\.5\\.0\\s+Ok#", $bounce_error)) { $status = "Deliver"; $delivery_success = "yes"; $bounce_error = "Sended"; } if ($delivery_success == "no") { if ($bounce_error == "User unknown in relay recipient table") { $bounce_error = "User unknown"; } events("event_finish() line " . __LINE__ . " bounce_error={$bounce_error}"); if (preg_match("#connect to.+?\\[(.+?)lmtp\\].+?No such file or directory#", $bounce_error, $ra)) { events("Cyrus error found -> CyrusSocketErrot"); cyrus_socket_error($bounce_error, $ra[1] . '/lmtp'); } if (preg_match("#550\\s+User\\s+unknown\\s+<(.+?)>.+?in reply to RCPT TO command#", $bounce_error, $ra)) { mailbox_unknown($bounce_error, $ra[1]); } } $file = "/var/log/artica-postfix/RTM/{$postfix_id}.msg"; $ini = new Bs_IniHandler($file); if (preg_match("#from.+?\\[([0-9\\.]+)?\\]#", $buffer, $re)) { $ini->set("TIME", "smtp_sender", $re[1]); } if ($from != null) { $ini->set("TIME", "mailfrom", $from); } $ini->set("TIME", "mailto", "{$to}"); $ini->set("TIME", "bounce_error", "{$bounce_error}"); $ini->set("TIME", "time_end", date("Y-m-d H:i:s")); $ini->set("TIME", "delivery_success", "{$delivery_success}"); events("event_finish() [{$postfix_id}]: {$from} => {$to} err={$bounce_error} success={$delivery_success}"); $ini->saveFile($file); }