diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php index c4ecd0e7bf07d988d77f57d9eff2e1826e797af0..2950e7d14124f61461be2d9709b05a8c56246ed0 100644 --- a/include/class.mailfetch.php +++ b/include/class.mailfetch.php @@ -346,10 +346,15 @@ class MailFetcher { // Ensure we have a message-id. If unable to read it out of the // email, use the hash of the entire email headers - if (!$header['mid'] && $header['header']) - if (!($header['mid'] = Mail_Parse::findHeaderEntry($header['header'], - 'message-id'))) + if (!$header['mid'] && $header['header']) { + $header['mid'] = Mail_Parse::findHeaderEntry($header['header'], + 'message-id'); + + if (is_array($header['mid'])) + $header['mid'] = array_pop(array_filter($header['mid'])); + if (!$header['mid']) $header['mid'] = '<' . md5($header['header']) . '@local>'; + } return $header; } diff --git a/include/class.mailparse.php b/include/class.mailparse.php index 969cc56e425771702fd404a679d2d4c337468507..f8209f39589024cb72315552f971b94c07c55358 100644 --- a/include/class.mailparse.php +++ b/include/class.mailparse.php @@ -242,8 +242,11 @@ class Mail_Parse { } function getMessageId(){ - if (!($mid = $this->struct->headers['message-id'])) + if (($mid = $this->struct->headers['message-id']) && is_array($mid)) + $mid = array_pop(array_filter($mid)); + if (!$mid) $mid = sprintf('<%s@local>', md5($this->getHeader())); + return $mid; } diff --git a/include/class.thread.php b/include/class.thread.php index 019cd8b65df15eafea32e5db56799698f83fc482..d56b16a9fb01f7ff10a130cb79c80eb675fba8fa 100644 --- a/include/class.thread.php +++ b/include/class.thread.php @@ -803,7 +803,8 @@ Class ThreadEntry { function saveEmailInfo($vars) { - if(!$vars || !$vars['mid']) + // Don't save empty message ID + if (!$vars || !$vars['mid']) return 0; $this->ht['email_mid'] = $vars['mid'];