diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php index efbe8f2f0511bf1467f547e89bd36a5545bbefd1..73d07a6f90114829a96f8951120d0af11712c026 100644 --- a/include/class.mailfetch.php +++ b/include/class.mailfetch.php @@ -584,8 +584,10 @@ class MailFetcher { // Fetch deliver status report $vars['message'] = $this->getDeliveryStatusMessage($mid); $vars['thread-type'] = 'N'; + $vars['flags']['bounce'] = true; } else { + $vars['flags']['bounce'] = TicketFilter::isBounce($info); $vars['message']=Format::stripEmptyLines($this->getBody($mid)); } diff --git a/include/class.mailparse.php b/include/class.mailparse.php index 37f9b3bf2779869d565d6bccd946eb8fb9e685cc..c240d4efb06ad8a7cd7aed7ce1859696012216b8 100644 --- a/include/class.mailparse.php +++ b/include/class.mailparse.php @@ -532,12 +532,14 @@ class EmailDataParser { // Fetch deliver status report $data['message'] = $parser->getDeliveryStatusMessage(); $data['thread-type'] = 'N'; + $data['flags']['bounce'] = true; } else { // Typical email $data['message'] = Format::stripEmptyLines($parser->getBody()); $data['in-reply-to'] = $parser->struct->headers['in-reply-to']; $data['references'] = $parser->struct->headers['references']; + $data['flags']['bounce'] = TicketFilter::isBounce($data['header']); } $data['subject'] = $parser->getSubject(); diff --git a/include/class.ticket.php b/include/class.ticket.php index 8894b817fb6ffe3bae3a067b3d2c00722237c3d3..3a6b7586c55368600a5e2448aa8fe46b657917dd 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -1375,9 +1375,10 @@ class Ticket { if(!$alerts) return $message; //Our work is done... - $autorespond = true; - if ($autorespond && $message->isBounceOrAutoReply()) - $autorespond=false; + // Do not auto-respond to bounces and other auto-replies + $autorespond = isset($vars['flags']) ? !$vars['flags']['bounce'] : true; + if ($autorespond && $message->isAutoReply()) + $autorespond = false; $this->onMessage($autorespond, $message); //must be called b4 sending alerts to staff. @@ -1605,6 +1606,10 @@ class Ticket { if(!($note=$this->getThread()->addNote($vars, $errors))) return null; + if (isset($vars['flags']) && $vars['flags']['bounce']) + // No alerts for bounce emails + $alert = false; + //Set state: Error on state change not critical! if(isset($vars['state']) && $vars['state']) { if($this->setState($vars['state'])) @@ -2174,6 +2179,8 @@ class Ticket { # Messages that are clearly auto-responses from email systems should # not have a return 'ping' message + if (isset($vars['flags']) && $vars['flags']['bounce']) + $autorespond = false; if ($autorespond && $message->isAutoReply()) $autorespond = false;