From 53475dd14dade5bd14371fbe94694fb26f5575ab Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@osticket.com>
Date: Mon, 17 Feb 2014 14:47:29 +0000
Subject: [PATCH] Add delivered-to detection to mail fetcher

Duplicate delivered-to handling from mail parse as temp. solution.
---
 include/class.mailfetch.php | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php
index 0c24fa72c..82991a012 100644
--- a/include/class.mailfetch.php
+++ b/include/class.mailfetch.php
@@ -290,10 +290,20 @@ class MailFetcher {
         if($headerinfo->cc)
             $tolist['cc'] = $headerinfo->cc;
 
+        //Add delivered-to address to list.
+        if (stripos($header['header'], 'delivered-to:') !==false
+                && ($dt = Mail_Parse::findHeaderEntry($header['header'], 'delivered-to'))) {
+            if (($delivered_to = Mail_Parse::parseAddressList($dt)))
+                $tolist['delivered-to'] = $delivered_to;
+        }
+
         $header['recipients'] = array();
         foreach($tolist as $source => $list) {
             foreach($list as $addr) {
-                if(!($emailId=Email::getIdByEmail(strtolower($addr->mailbox).'@'.$addr->host))) {
+                if (!($emailId=Email::getIdByEmail(strtolower($addr->mailbox).'@'.$addr->host))) {
+                    //Skip virtual Delivered-To addresses
+                    if ($source == 'delivered-to') continue;
+
                     $header['recipients'][] = array(
                             'source' => "Email ($source)",
                             'name' => $this->mime_decode(@$addr->personal),
@@ -304,6 +314,16 @@ class MailFetcher {
             }
         }
 
+        //See if any of the recipients is a delivered to address
+        if ($tolist['delivered-to']) {
+            foreach ($tolist['delivered-to'] as $addr) {
+                foreach ($header['recipients'] as $i => $r) {
+                    if (strcasecmp($r['email'], $addr->mailbox.'@'.$addr->host) === 0)
+                        $header['recipients'][$i]['source'] = 'delivered-to';
+                }
+            }
+        }
+
         //BCCed?
         if(!$header['emailId']) {
             if ($headerinfo->bcc) {
-- 
GitLab