X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_messages.php;h=c10439c834a59643f59bc13a1d7006f4a663a03e;hb=aa84daced451fe171b6b606939dba8df6bcab26c;hp=c0732acae4a7c01f61b3f04e0d9223fd5962730c;hpb=a895042ae9f0ef058c395b756bfc0ba3c4a537c0;p=squirrelmail.git diff --git a/functions/imap_messages.php b/functions/imap_messages.php index c0732aca..c10439c8 100755 --- a/functions/imap_messages.php +++ b/functions/imap_messages.php @@ -335,6 +335,7 @@ function get_thread_sort($imap_stream, $search='ALL') { } elseif ($response == 'BAD') { sqm_trigger_imap_error('SQM_IMAP_NO_THREAD',$query, $response, $message); } + $sThreadResponse = ''; if (isset($sRead[0])) { for ($i=0,$iCnt=count($sRead);$i<$iCnt;++$i) { if (preg_match("/^\* THREAD (.+)$/", $sRead[$i], $aMatch)) { @@ -342,8 +343,6 @@ function get_thread_sort($imap_stream, $search='ALL') { break; } } - } else { - $sThreadResponse = ""; } unset($sRead); @@ -906,7 +905,7 @@ function sqimap_get_message($imap_stream, $id, $mailbox, $hide=0) { if ($hide == 2) return FALSE; /* the message was not found, maybe the mailbox was modified? */ - global $sort, $startMessage, $color; + global $sort, $startMessage; $errmessage = _("The server couldn't find the message you requested."); @@ -915,7 +914,7 @@ function sqimap_get_message($imap_stream, $id, $mailbox, $hide=0) { $errmessage .= '

'._("Most probably your message list was out of date and the message has been moved away or deleted (perhaps by another program accessing the same mailbox)."); /* this will include a link back to the message list */ - error_message($errmessage, $mailbox, $sort, (int) $startMessage, $color); + error_message($errmessage, $mailbox, $sort, (int) $startMessage); exit; } $bodystructure = implode('',$read); @@ -924,5 +923,40 @@ function sqimap_get_message($imap_stream, $id, $mailbox, $hide=0) { $rfc822_header = new Rfc822Header(); $rfc822_header->parseHeader($read); $msg->rfc822_header = $rfc822_header; + + parse_message_entities($msg, $id, $imap_stream); return $msg; + } + + +/** + * Recursively parse embedded messages (if any) in the given + * message, building correct rfc822 headers for each one + * + * @param object $msg The message object to scan for attached messages + * NOTE: this is passed by reference! Changes made + * within will affect the caller's copy of $msg! + * @param int $id The top-level message UID on the IMAP server, even + * if the $msg being passed in is only an attached entity + * thereof. + * @param resource $imap_stream A live connection to the IMAP server. + * + * @return void + * + * @since 1.5.2 + * + */ +function parse_message_entities(&$msg, $id, $imap_stream) { + global $uid_support; + if (!empty($msg->entities)) foreach ($msg->entities as $i => $entity) { + if (is_object($entity) && get_class($entity) == 'Message') { + if (!empty($entity->rfc822_header)) { + $read = sqimap_run_command($imap_stream, "FETCH $id BODY[". $entity->entity_id .".HEADER]", true, $response, $message, $uid_support); + $rfc822_header = new Rfc822Header(); + $rfc822_header->parseHeader($read); + $msg->entities[$i]->rfc822_header = $rfc822_header; + } + parse_message_entities($msg->entities[$i], $id, $imap_stream); + } + } }