Some user interface changes.
[squirrelmail.git] / src / draft_actions.php
index a8d145e71aae8c8fea113a10cb0ea078619e6970..dff29f790c9727e6d13739475b1fc6a512864a70 100644 (file)
@@ -13,9 +13,6 @@ require_once ('../src/validate.php');
       static $header, $headerlength;
 
       if ($header == '') {
-         $to = parseAddrs($t);
-         $cc = parseAddrs($c);
-         $bcc = parseAddrs($b);
          if (isset($identity) && ($identity != 'default')) {
             $reply_to = getPref($data_dir, $username, 'reply_to' . $identity);
             $from = getPref($data_dir, $username, 'full_name' . $identity);
@@ -30,10 +27,6 @@ require_once ('../src/validate.php');
             $from_addr = $popuser.'@'.$domain;
          }
 
-         $to_list = getLineOfAddrs($to);
-         $cc_list = getLineOfAddrs($cc);
-         $bcc_list = getLineOfAddrs($bcc);
-
          /* Encoding 8-bit characters and making from line */
          $subject = encodeHeader($subject);
          if ($from == '') {
@@ -49,30 +42,12 @@ require_once ('../src/validate.php');
          $message_id = '<' . $REMOTE_PORT . '.' . $REMOTE_ADDR . '.';
          $message_id .= time() . '.squirrel@' . $SERVER_NAME .'>';
 
-         /* Make an RFC822 Received: line */
-         if (isset($REMOTE_HOST)) {
-            $received_from = "$REMOTE_HOST ([$REMOTE_ADDR])";
-         } else {
-            $received_from = $REMOTE_ADDR;
-         }
-
-         if (isset($HTTP_VIA) || isset ($HTTP_X_FORWARDED_FOR)) {
-            if ($HTTP_X_FORWARDED_FOR == '')
-               $HTTP_X_FORWARDED_FOR = 'unknown';
-            $received_from .= " (proxying for $HTTP_X_FORWARDED_FOR)";
-         }
-
-         $header  = "Received: from $received_from\r\n";
-         $header .= "        (SquirrelMail authenticated user $username)\r\n";
-         $header .= "        by $SERVER_NAME with HTTP;\r\n";
-         $header .= "        $date\r\n";
-
-         /* Insert the rest of the header fields */
-         $header .= "Message-ID: $message_id\r\n";
+         /* Insert header fields */
+         $header = "Message-ID: $message_id\r\n";
          $header .= "Date: $date\r\n";
          $header .= "Subject: $subject\r\n";
          $header .= "From: $from\r\n";
-         $header .= "To: $to_list\r\n";    // Who it's TO
+         $header .= "To: $t\r\n";    // Who it's TO
 
          /* Insert headers from the $more_headers array */
          if(is_array($more_headers)) {
@@ -82,24 +57,17 @@ require_once ('../src/validate.php');
             }
          }
 
-         if ($cc_list) {
-            $header .= "Cc: $cc_list\r\n"; // Who the CCs are
+         if ($c) {
+            $header .= "Cc: $c\r\n"; // Who the CCs are
          }
 
-         if ($bcc_list) {
-            $header .= "Bcc: $bcc_list\r\n"; // Who the BCCs are
+         if ($b) {
+            $header .= "Bcc: $b\r\n"; // Who the BCCs are
          }
 
          if ($reply_to != '')
             $header .= "Reply-To: $reply_to\r\n";
 
-         if ($useSendmail) {
-            if ($bcc_list) {
-               // BCCs is removed from header by sendmail
-               $header .= "Bcc: $bcc_list\r\n";
-            }
-         }
-
          $header .= "X-Mailer: SquirrelMail (version $version)\r\n"; // Identify SquirrelMail
 
          /* Do the MIME-stuff */
@@ -127,34 +95,70 @@ require_once ('../src/validate.php');
       return $headerlength;
    }
 
+   // Send the body
+   function writeBodyForDraft ($fp, $passedBody) {
+      global $default_charset;
+
+      $attachmentlength = 0;
+
+      if (isMultipart()) {
+         $body = '--'.mimeBoundary()."\r\n";
+
+         if ($default_charset != "")
+            $body .= "Content-Type: text/plain; charset=$default_charset\r\n";
+         else
+            $body .= "Content-Type: text/plain\r\n";
+
+         $body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
+         $body .= $passedBody . "\r\n\r\n";
+         fputs ($fp, $body);
+
+         $attachmentlength = attachFiles($fp);
+
+         if (!isset($postbody)) $postbody = "";
+         $postbody .= "\r\n--".mimeBoundary()."--\r\n\r\n";
+         fputs ($fp, $postbody);
+      } else {
+         $body = $passedBody . "\r\n";
+         fputs ($fp, $body);
+         $postbody = "\r\n";
+         fputs ($fp, $postbody);
+      }
+
+      return (strlen($body) + strlen($postbody) + $attachmentlength);
+   }
+
+
    function saveMessageAsDraft($t, $c, $b, $subject, $body, $reply_id) {
       global $useSendmail, $msg_id, $is_reply, $mailbox, $onetimepad;
       global $data_dir, $username, $domain, $key, $version, $sent_folder, $imapServerAddress, $imapPort;
-      global $draft_folder;
+      global $draft_folder, $attachment_dir;
       $more_headers = Array();
 
       $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 1);
 
-      $body = ereg_replace("\n\\.", "\n..", $body);
-      $body = ereg_replace("^\\.", "..", $body);
-      $body = ereg_replace("\n", "\r\n", $body);
+      $tmpDraftFile = "draft-" . GenerateRandomString(32, '', 7);
+      while ( file_exists($attachment_dir .$tmpDraftFile) )
+         $tmpDraftFile = "draft-" . GenerateRandomString(32, '', 7);
+      $fp = fopen($attachment_dir . $tmpDraftFile, 'w');
 
-      $fp = fopen("/dev/null", a);
-      $headerlength = write822HeaderForDraft ($fp, $t, $c, $b, $subject, $more_headers);
-      $bodylength = writeBody ($fp, $body);
-      fclose ($fp);
+      $headerlength = write822HeaderForDraft ($fp, $t, $c, $b, $subject, $more_headers, FALSE);
+      $bodylength = writeBodyForDraft ($fp, $body, FALSE);
+      fclose($fp);
 
       $length = ($headerlength + $bodylength);
 
       if (sqimap_mailbox_exists ($imap_stream, $draft_folder)) {
          sqimap_append ($imap_stream, $draft_folder, $length);
-         write822HeaderForDraft ($imap_stream, $t, $c, $b, $subject, $more_headers);
-         writeBody ($imap_stream, $body);
+         write822HeaderForDraft ($imap_stream, $t, $c, $b, $subject, $more_headers, TRUE);
+         writeBodyForDraft ($imap_stream, $body, TRUE);
          sqimap_append_done ($imap_stream);
       }
       sqimap_logout($imap_stream);
       if ($length)
          ClearAttachments();
+         if (file_exists($attachment_dir . $tmpDraftFile) )
+            unlink ($attachment_dir . $tmpDraftFile);
       return $length;
 }
 ?>