From 0fdb0aa1fadc8a897622a53ca3338a704cb66588 Mon Sep 17 00:00:00 2001 From: pdontthink Date: Wed, 24 Oct 2007 09:34:21 +0000 Subject: [PATCH] Restore outgoing reply headers git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@12737 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- class/deliver/Deliver.class.php | 46 ++++++++++++++++++++++++++++++--- src/compose.php | 16 +++++++++--- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/class/deliver/Deliver.class.php b/class/deliver/Deliver.class.php index 0d797710..45ed6ab8 100644 --- a/class/deliver/Deliver.class.php +++ b/class/deliver/Deliver.class.php @@ -31,12 +31,21 @@ class Deliver { /** * function mail - send the message parts to the SMTP stream * - * @param Message $message Message class to send - * @param resource $stream file handle to the SMTP stream + * @param Message $message Message object to send + * @param resource $stream Handle to the SMTP stream + * @param string $reply_id Identifies message being replied to + * (OPTIONAL; caller should ONLY specify + * a value for this when the message + * being sent is a reply) + * @param string $reply_ent_id Identifies message being replied to + * in the case it was an embedded/attached + * message inside another (OPTIONAL; caller + * should ONLY specify a value for this + * when the message being sent is a reply) * * @return integer $raw_length */ - function mail($message, $stream=false) { + function mail($message, $stream=false, $reply_id=0, $reply_ent_id=0) { $rfc822_header = $message->rfc822_header; if (count($message->entities)) { $boundary = $this->mimeBoundary(); @@ -45,6 +54,37 @@ class Deliver { $boundary=''; } $raw_length = 0; + + + // calculate reply header if needed + // + if ($reply_id) { + global $imapConnection, $username, $imapServerAddress, + $imapPort, $mailbox; + if (!$imapConnection) + $imapConnection = sqimap_login($username, FALSE, + $imapServerAddress, $imapPort, 0); + + sqimap_mailbox_select($imapConnection, $mailbox); + $reply_message = sqimap_get_message($imapConnection, $reply_id, $mailbox); + + if ($reply_ent_id) { + /* redefine the messsage in case of message/rfc822 */ + $reply_message = $message->getEntity($reply_ent_id); + /* message is an entity which contains the envelope and type0=message + * and type1=rfc822. The actual entities are childs from + * $reply_message->entities[0]. That's where the encoding and is located + */ + + $orig_header = $reply_message->rfc822_header; /* here is the envelope located */ + + } else { + $orig_header = $reply_message->rfc822_header; + } + } + $message->reply_rfc822_header = $orig_header; + + $reply_rfc822_header = (isset($message->reply_rfc822_header) ? $message->reply_rfc822_header : ''); $header = $this->prepareRFC822_Header($rfc822_header, $reply_rfc822_header, $raw_length); diff --git a/src/compose.php b/src/compose.php index 2bca8e63..9acb9163 100644 --- a/src/compose.php +++ b/src/compose.php @@ -1550,6 +1550,14 @@ function deliverMessage($composeMessage, $draft=false) { $rfc822_header->content_type = $content_type; $composeMessage->rfc822_header = $rfc822_header; + if ($action == 'reply' || $action == 'reply_all') { + global $passed_id, $passed_ent_id; + $reply_id = $passed_id; + $reply_ent_id = $passed_ent_id; + } else { + $reply_id = ''; + $reply_ent_id = ''; + } /* Here you can modify the message structure just before we hand it over to deliver; plugin authors note that $composeMessage @@ -1586,9 +1594,9 @@ function deliverMessage($composeMessage, $draft=false) { if (sqimap_mailbox_exists ($imap_stream, $draft_folder)) { require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); $imap_deliver = new Deliver_IMAP(); - $length = $imap_deliver->mail($composeMessage); + $length = $imap_deliver->mail($composeMessage, 0, $reply_id, $reply_ent_id); sqimap_append ($imap_stream, $draft_folder, $length); - $imap_deliver->mail($composeMessage, $imap_stream); + $imap_deliver->mail($composeMessage, $imap_stream, $reply_id, $reply_ent_id); sqimap_append_done ($imap_stream, $draft_folder); sqimap_logout($imap_stream); unset ($imap_deliver); @@ -1602,7 +1610,7 @@ function deliverMessage($composeMessage, $draft=false) { } $success = false; if ($stream) { - $length = $deliver->mail($composeMessage, $stream); + $length = $deliver->mail($composeMessage, $stream, $reply_id, $reply_ent_id); $success = $deliver->finalizeStream($stream); } if (!$success) { @@ -1653,7 +1661,7 @@ function deliverMessage($composeMessage, $draft=false) { sqimap_append ($imap_stream, $sent_folder, $length); require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); $imap_deliver = new Deliver_IMAP(); - $imap_deliver->mail($composeMessage, $imap_stream); + $imap_deliver->mail($composeMessage, $imap_stream, $reply_id, $reply_ent_id); sqimap_append_done ($imap_stream, $sent_folder); unset ($imap_deliver); } -- 2.25.1