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; }