Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}