From: pdontthink Date: Fri, 28 Sep 2007 17:22:42 +0000 (+0000) Subject: Make sqimap_get_message return fully parsed message representations X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=a4f7d0271027e7013703edefa437150c8217fbe2;p=squirrelmail.git Make sqimap_get_message return fully parsed message representations git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@12700 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- diff --git a/functions/imap_messages.php b/functions/imap_messages.php index 911b06f3..c10439c8 100755 --- a/functions/imap_messages.php +++ b/functions/imap_messages.php @@ -923,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); + } + } }