diff --git a/api/pipe.php b/api/pipe.php
index 29dfcff1d1aa10a20386589927830ffed8211911..851e18f4a6951dab6b3d1c210a73aa038d4d825c 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 aa43ce89e960231bdf2e25bf0f622a24d2b44741..dca6ac3dfbae94edd33bfb04332d004ecde616d4 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;
         }