diff --git a/include/class.mailparse.php b/include/class.mailparse.php index 2aaff18b2e41bf255f19ee1b716c56e7fa8b776b..5cc22c97c0b14b1f948ed37dd3bcc2734d8635ff 100644 --- a/include/class.mailparse.php +++ b/include/class.mailparse.php @@ -171,16 +171,19 @@ class Mail_Parse { return Mail_Parse::parseAddressList($header); } + function getDeliveredTOAddressList() { + if (!($header = $this->struct->headers['delivered-to'])) + return null; + + return Mail_Parse::parseAddressList($header); + } + function getToAddressList(){ // Delivered-to incase it was a BBC mail. $tolist = array(); if ($header = $this->struct->headers['to']) $tolist = array_merge($tolist, Mail_Parse::parseAddressList($header)); - if ($header = $this->struct->headers['delivered-to']) - $tolist = array_merge($tolist, - Mail_Parse::parseAddressList($header)); - return $tolist ? $tolist : null; } @@ -464,15 +467,21 @@ class EmailDataParser { $data['emailId'] = 0; $data['recipients'] = array(); $tolist = array(); - if(($to = $parser->getToAddressList())) + if (($to = $parser->getToAddressList())) $tolist['to'] = $to; - if(($cc = $parser->getCcAddressList())) + if (($cc = $parser->getCcAddressList())) $tolist['cc'] = $cc; + if (($dt = $parser->getDeliveredToAddressList())) + $tolist['dt'] = $dt; + 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 == 'dt') continue; + $data['recipients'][] = array( 'source' => "Email ($source)", 'name' => trim(@$addr->personal, '"'),