From c7ce77f38bcd4430c11bad43003ddbfca49d5b82 Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@osticket.com>
Date: Fri, 16 Nov 2012 18:27:46 -0500
Subject: [PATCH] Report success on ticket denial (hard reject)

---
 api/pipe.php                | 31 +++++++++++++++----------------
 include/class.mailfetch.php |  4 ++++
 2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/api/pipe.php b/api/pipe.php
index 29dfcff1d..851e18f4a 100644
--- a/api/pipe.php
+++ b/api/pipe.php
@@ -90,31 +90,30 @@ $var['header']=$parser->getHeader();
 $var['priorityId']=$cfg->useEmailPriority()?$parser->getPriority():0;
 
 $ticket=null;
-if(preg_match ("[[#][0-9]{1,10}]",$var['subject'],$regs)) {
+if(preg_match ("[[#][0-9]{1,10}]", $var['subject'], $regs)) {
     $extid=trim(preg_replace("/[^0-9]/", "", $regs[0]));
-    $ticket= new Ticket(Ticket::getIdByExtId($extid));
-    //Allow mismatched emails?? For now hell NO.
-    if(!is_object($ticket) || strcasecmp($ticket->getEmail(),$var['email']))
-        $ticket=null;
+    if(!($ticket=Ticket::lookupByExtId($extid, $var['email'])) || strcasecmp($ticket->getEmail(), $var['email']))
+       $ticket = null;
 }        
+
 $errors=array();
 $msgid=0;
-if(!$ticket) { //New tickets...
-    $ticket=Ticket::create($var,$errors,'email');
-    if(!is_object($ticket) || $errors) {
-        api_exit(EX_DATAERR,'Ticket create Failed '.implode("\n",$errors)."\n\n");
-    }
+if($ticket) {
+    //post message....postMessage does the cleanup.
+    if(!($msgid=$ticket->postMessage($var['message'], 'Email',$var['mid'],$var['header'])))
+        api_exit(EX_DATAERR, 'Unable to post message');
 
+} elseif(($ticket=Ticket::create($var, $errors, 'email'))) { // create new ticket.
     $msgid=$ticket->getLastMsgId();
+} else { // failure....
+    if(isset($errors['errno']) && $errors['errno'] == 403)
+        api_exit(EX_SUCCESS);  //report success on hard rejection
 
-} else {
-    //post message....postMessage does the cleanup.
-    if(!($msgid=$ticket->postMessage($var['message'], 'Email',$var['mid'],$var['header']))) {
-        api_exit(EX_DATAERR, 'Unable to post message');
-    }
+    api_exit(EX_DATAERR,'Ticket create Failed '.implode("\n",$errors)."\n\n");
 }
+
 //Ticket created...save attachments if enabled.
-if($cfg->allowEmailAttachments() && ($attachments=$parser->getAttachments())) {
+if($ticket && $cfg->allowEmailAttachments() && ($attachments=$parser->getAttachments())) {
     foreach($attachments as $attachment) {
         if($attachment['filename'] && $ost->isFileTypeAllowed($attachment['filename']))
             $ticket->saveAttachment(array('name' => $attachment['filename'], 'data' => $attachment['body']), $msgid, 'M');
diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php
index aa43ce89e..dca6ac3df 100644
--- a/include/class.mailfetch.php
+++ b/include/class.mailfetch.php
@@ -417,6 +417,10 @@ class MailFetcher {
         } elseif (($ticket=Ticket::create($var, $errors, 'Email'))) {
             $msgid = $ticket->getLastMsgId();
         } else {
+            //Report success if the email was absolutely rejected.
+            if(isset($errors['errno']) && $errors['errno'] == 403)
+                return true;
+
             //TODO: Log error..
             return null;
         }
-- 
GitLab