diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php index 0c24fa72cfa1ee11b27a16c25f908692b2b8d2b8..82991a012b6cd4ff3a010b56e3cf9e8970a367bf 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) {