diff --git a/include/class.mailer.php b/include/class.mailer.php index adb0fd0d1188a30ed64e09226fd1c919b90c7662..44e7565b6438631dfe79be65b3f5d5a941745a08 100644 --- a/include/class.mailer.php +++ b/include/class.mailer.php @@ -124,9 +124,9 @@ class Mailer { } if ($options) { - if (isset($options['replyto'])) + if (isset($options['replyto']) && $options['replyto']) $headers += array('In-Reply-To' => $options['replyto']); - if (isset($options['references'])) { + if (isset($options['references']) && $options['references']) { if (is_array($options['references'])) $headers += array('References' => implode(' ', $options['references'])); diff --git a/include/class.mailparse.php b/include/class.mailparse.php index 22f2bf9e296d25fac3c36e687b711d3c3b6287cc..fbe8da41f91ef2dc7216ceb9c6bffacfa596a28f 100644 --- a/include/class.mailparse.php +++ b/include/class.mailparse.php @@ -86,7 +86,7 @@ class Mail_Parse { if (substr($headers[$i], 0, 1) == " ") { # Continuation from previous header (runon to next line) $j=$i-1; while (!isset($headers[$j]) && $j>0) $j--; - $headers[$j] .= "\n".ltrim($headers[$i]); + $headers[$j] .= " ".ltrim($headers[$i]); unset($headers[$i]); } elseif (strlen($headers[$i]) == 0) { unset($headers[$i]); diff --git a/include/class.thread.php b/include/class.thread.php index a1a79e3916ccdea3a16c51adc9ed4b1afdd92a77..e0edf1408a1e3933978a8cc0caff21380c70ea1f 100644 --- a/include/class.thread.php +++ b/include/class.thread.php @@ -334,6 +334,25 @@ Class ThreadEntry { return $this->ht['email_mid']; } + function getEmailHeaders() { + require_once(INCLUDE_DIR.'class.mailparse.php'); + + $sql = 'SELECT headers FROM '.TICKET_EMAIL_INFO_TABLE + .' WHERE message_id='.$this->getId(); + $headers = db_result(db_query($sql)); + return Mail_Parse::splitHeaders($headers); + } + + function getEmailReferences() { + if (!isset($this->_references)) { + $this->_references = $this->getEmailMessageId(); + $headers = self::getEmailHeaders(); + if (isset($headers['References'])) + $this->_references .= " ".$headers['References']; + } + return $this->_references; + } + function getTicket() { if(!$this->ticket && $this->getTicketId()) diff --git a/include/class.ticket.php b/include/class.ticket.php index c3eb29d8db0708ab626b225a3d75318a6f33fe72..7f0c73109f2d1451203cf870c9028fc04367116f 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -737,7 +737,9 @@ class Ticket { if(!$dept || !($email=$dept->getAutoRespEmail())) $email =$cfg->getDefaultEmail(); - $options = array('references'=>$message->getEmailMessageId()); + $options = array( + 'replyto'=>$message->getEmailMessageId(), + 'references'=>$message->getEmailReferences()); //Send auto response - if enabled. if($autorespond && $email && $cfg->autoRespONNewTicket() @@ -886,7 +888,9 @@ class Ticket { if (!$message) $message = $this->getLastMessage(); - $options = array('references' => $message->getEmailMessageId()); + $options = array( + 'replyto'=>$message->getEmailMessageId(), + 'references'=>$message->getEmailReferences()); $email->sendAutoReply($this->getEmail(), $msg['subj'], $msg['body'], null, $options); } @@ -945,7 +949,9 @@ class Ticket { //Send the alerts. $sentlist=array(); - $options = array('references' => $note->getEmailMessageId()); + $options = array( + 'replyto'=>$note->getEmailMessageId(), + 'references'=>$note->getEmailReferences()); foreach( $recipients as $k=>$staff) { if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue; $alert = str_replace('%{recipient}', $staff->getFirstName(), $msg['body']); @@ -1196,7 +1202,9 @@ class Ticket { $recipients[]= $manager; $sentlist=array(); - $options = array('references' => $note->getEmailMessageId()); + $options = array( + 'replyto'=>$note->getEmailMessageId(), + 'references'=>$note->getEmailReferences()); foreach( $recipients as $k=>$staff) { if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue; $alert = str_replace('%{recipient}', $staff->getFirstName(), $msg['body']); @@ -1346,7 +1354,9 @@ class Ticket { $recipients[]=$manager; $sentlist=array(); //I know it sucks...but..it works. - $options = array('references'=>$message->getEmailMessageId()); + $options = array( + 'replyto'=>$message->getEmailMessageId(), + 'references'=>$message->getEmailReferences()); foreach( $recipients as $k=>$staff) { if(!$staff || !$staff->getEmail() || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue; $alert = str_replace('%{recipient}', $staff->getFirstName(), $msg['body']); @@ -1404,7 +1414,9 @@ class Ticket { $msg['body'] ="\n$tag\n\n".$msg['body']; $attachments =($cfg->emailAttachments() && $files)?$response->getAttachments():array(); - $options = array('references' => $response->getEmailMessageId()); + $options = array( + 'replyto'=>$response->getEmailMessageId(), + 'references'=>$response->getEmailReferences()); $email->sendAutoReply($this->getEmail(), $msg['subj'], $msg['body'], $attachments, $options); } @@ -1461,7 +1473,9 @@ class Ticket { //Set attachments if emailing. $attachments = $cfg->emailAttachments()?$response->getAttachments():array(); - $options = array('references' => $response->getEmailMessageId()); + $options = array( + 'replyto' => $response->getEmailMessageId(), + 'references' => $response->getEmailReferences()); //TODO: setup 5 param (options... e.g mid trackable on replies) $email->send($this->getEmail(), $msg['subj'], $msg['body'], $attachments, $options); @@ -1573,7 +1587,9 @@ class Ticket { $recipients[]=$dept->getManager(); $attachments = $note->getAttachments(); - $options = array('references' => $note->getEmailMessageId()); + $options = array( + 'replyto'=>$note->getEmailMessageId(), + 'references'=>$note->getEmailReferences()); $sentlist=array(); foreach( $recipients as $k=>$staff) { if(!is_object($staff)