Restore outgoing reply headers
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 24 Oct 2007 09:34:21 +0000 (09:34 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 24 Oct 2007 09:34:21 +0000 (09:34 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@12737 7612ce4b-ef26-0410-bec9-ea0150e637f0

class/deliver/Deliver.class.php
src/compose.php

index 0d79771..45ed6ab 100644 (file)
@@ -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);
index 2bca8e6..9acb916 100644 (file)
@@ -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);
         }