Skip to content
Snippets Groups Projects
Commit 0a9fe20d authored by Jared Hancock's avatar Jared Hancock
Browse files

Merge pull request #377 from protich/issue/366

Issue/366
parents e581eaff c7ce77f3
No related branches found
No related tags found
No related merge requests found
...@@ -90,31 +90,30 @@ $var['header']=$parser->getHeader(); ...@@ -90,31 +90,30 @@ $var['header']=$parser->getHeader();
$var['priorityId']=$cfg->useEmailPriority()?$parser->getPriority():0; $var['priorityId']=$cfg->useEmailPriority()?$parser->getPriority():0;
$ticket=null; $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])); $extid=trim(preg_replace("/[^0-9]/", "", $regs[0]));
$ticket= new Ticket(Ticket::getIdByExtId($extid)); if(!($ticket=Ticket::lookupByExtId($extid, $var['email'])) || strcasecmp($ticket->getEmail(), $var['email']))
//Allow mismatched emails?? For now hell NO. $ticket = null;
if(!is_object($ticket) || strcasecmp($ticket->getEmail(),$var['email']))
$ticket=null;
} }
$errors=array(); $errors=array();
$msgid=0; $msgid=0;
if(!$ticket) { //New tickets... if($ticket) {
$ticket=Ticket::create($var,$errors,'email'); //post message....postMessage does the cleanup.
if(!is_object($ticket) || $errors) { if(!($msgid=$ticket->postMessage($var['message'], 'Email',$var['mid'],$var['header'])))
api_exit(EX_DATAERR,'Ticket create Failed '.implode("\n",$errors)."\n\n"); api_exit(EX_DATAERR, 'Unable to post message');
}
} elseif(($ticket=Ticket::create($var, $errors, 'email'))) { // create new ticket.
$msgid=$ticket->getLastMsgId(); $msgid=$ticket->getLastMsgId();
} else { // failure....
if(isset($errors['errno']) && $errors['errno'] == 403)
api_exit(EX_SUCCESS); //report success on hard rejection
} else { api_exit(EX_DATAERR,'Ticket create Failed '.implode("\n",$errors)."\n\n");
//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');
}
} }
//Ticket created...save attachments if enabled. //Ticket created...save attachments if enabled.
if($cfg->allowEmailAttachments() && ($attachments=$parser->getAttachments())) { if($ticket && $cfg->allowEmailAttachments() && ($attachments=$parser->getAttachments())) {
foreach($attachments as $attachment) { foreach($attachments as $attachment) {
if($attachment['filename'] && $ost->isFileTypeAllowed($attachment['filename'])) if($attachment['filename'] && $ost->isFileTypeAllowed($attachment['filename']))
$ticket->saveAttachment(array('name' => $attachment['filename'], 'data' => $attachment['body']), $msgid, 'M'); $ticket->saveAttachment(array('name' => $attachment['filename'], 'data' => $attachment['body']), $msgid, 'M');
......
...@@ -417,6 +417,10 @@ class MailFetcher { ...@@ -417,6 +417,10 @@ class MailFetcher {
} elseif (($ticket=Ticket::create($var, $errors, 'Email'))) { } elseif (($ticket=Ticket::create($var, $errors, 'Email'))) {
$msgid = $ticket->getLastMsgId(); $msgid = $ticket->getLastMsgId();
} else { } else {
//Report success if the email was absolutely rejected.
if(isset($errors['errno']) && $errors['errno'] == 403)
return true;
//TODO: Log error.. //TODO: Log error..
return null; return null;
} }
......
...@@ -2019,6 +2019,7 @@ class Ticket { ...@@ -2019,6 +2019,7 @@ class Ticket {
//Make sure the email address is not banned //Make sure the email address is not banned
if(TicketFilter::isBanned($vars['email'])) { if(TicketFilter::isBanned($vars['email'])) {
$errors['err']='Ticket denied. Error #403'; $errors['err']='Ticket denied. Error #403';
$errors['errno'] = 403;
$ost->logWarning('Ticket denied', 'Banned email - '.$vars['email']); $ost->logWarning('Ticket denied', 'Banned email - '.$vars['email']);
return 0; return 0;
} }
...@@ -2044,6 +2045,7 @@ class Ticket { ...@@ -2044,6 +2045,7 @@ class Ticket {
if($ticket_filter if($ticket_filter
&& ($filter=$ticket_filter->shouldReject())) { && ($filter=$ticket_filter->shouldReject())) {
$errors['err']='Ticket denied. Error #403'; $errors['err']='Ticket denied. Error #403';
$errors['errno'] = 403;
$ost->logWarning('Ticket denied', $ost->logWarning('Ticket denied',
sprintf('Ticket rejected ( %s) by filter "%s"', sprintf('Ticket rejected ( %s) by filter "%s"',
$vars['email'], $filter->getName())); $vars['email'], $filter->getName()));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment