X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fcompose.php;h=1cd22ce72d46f3aaf5c939e437a8c0294014d4eb;hb=c3ccfa1912b4ca47279d259bb587ceb293ce5d83;hp=c066add1984d37f1d5fba748f6ba36531c39bfae;hpb=e842b215cc74203501fe50e52497f9f0329e721b;p=squirrelmail.git diff --git a/src/compose.php b/src/compose.php index c066add1..1cd22ce7 100644 --- a/src/compose.php +++ b/src/compose.php @@ -87,6 +87,9 @@ if ( sqgetGlobalVar('return', $temp, SQ_POST) ) { /** GET VARS */ sqgetGlobalVar('attachedmessages', $attachedmessages, SQ_GET); +/* Location (For HTTP 1.1 Header("Location: ...") redirects) */ +$location = get_location(); + /* --------------------- Specific Functions ------------------------------ */ function replyAllString($header) { @@ -129,12 +132,13 @@ function replyAllString($header) { $url_replytoallcc = ''; foreach( $url_replytoall_ar as $email => $personal) { if ($personal) { - $url_replytoallcc .= ", \"$personal\" <$email>"; + $url_replytoallcc .= ", $personal <$email>"; } else { $url_replytoallcc .= ', '. $email; } } $url_replytoallcc = substr($url_replytoallcc,2); + return $url_replytoallcc; } @@ -299,17 +303,17 @@ if ($draft) { $draft_message = _("Draft Email Saved"); /* If this is a resumed draft, then delete the original */ if(isset($delete_draft)) { - Header("Location: delete_message.php?mailbox=" . urlencode($draft_folder) . + Header("Location: $location/delete_message.php?mailbox=" . urlencode($draft_folder) . "&message=$delete_draft&sort=$sort&startMessage=1&saved_draft=yes"); exit(); } else { if ($compose_new_win == '1') { - Header("Location: compose.php?saved_draft=yes&session=$composesession"); + Header("Location: $location/compose.php?saved_draft=yes&session=$composesession"); exit(); } else { - Header("Location: right_main.php?mailbox=$draft_folder&sort=$sort". + Header("Location: $location/right_main.php?mailbox=$draft_folder&sort=$sort". "&startMessage=1¬e=".urlencode($draft_message)); exit(); } @@ -360,10 +364,12 @@ if ($send) { } else { sqWordWrap($line, $editor_size); $newBody .= $line . "\n"; + } + } $body = $newBody; - do_hook('compose_send'); + $composeMessage=$compose_messages[$session]; $Result = deliverMessage($composeMessage); @@ -373,16 +379,16 @@ if ($send) { } unset($compose_messages[$session]); if ( isset($delete_draft)) { - Header("Location: delete_message.php?mailbox=" . urlencode( $draft_folder ). + Header("Location: $location/delete_message.php?mailbox=" . urlencode( $draft_folder ). "&message=$delete_draft&sort=$sort&startMessage=1&mail_sent=yes"); exit(); } if ($compose_new_win == '1') { - Header("Location: compose.php?mail_sent=yes"); + Header("Location: $location/compose.php?mail_sent=yes"); } else { - Header("Location: right_main.php?mailbox=$urlMailbox&sort=$sort". + Header("Location: $location/right_main.php?mailbox=$urlMailbox&sort=$sort". "&startMessage=1"); } } else { @@ -553,7 +559,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $use_signature, $composesession, $data_dir, $username, $username, $key, $imapServerAddress, $imapPort, $compose_messages, $composeMessage; - global $languages, $squirrelmail_language; + global $languages, $squirrelmail_language; $send_to = $send_to_cc = $send_to_bcc = $subject = $identity = ''; $mailprio = 3; @@ -654,10 +660,14 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se switch ($action) { case ('draft'): $use_signature = FALSE; + $composeMessage->rfc822_header = $orig_header; $send_to = decodeHeader($orig_header->getAddr_s('to'),false,true); $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,true); $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,true); $subject = decodeHeader($orig_header->subject,false,true); +// /* remember the references and in-reply-to headers in case of an reply */ + $composeMessage->rfc822_header->more_headers['References'] = $orig_header->references; + $composeMessage->rfc822_header->more_headers['In-Reply-To'] = $orig_header->in_reply_to; $body_ary = explode("\n", $body); $cnt = count($body_ary) ; $body = ''; @@ -684,7 +694,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se case ('forward'): $send_to = ''; $subject = decodeHeader($orig_header->subject,false,true); - if ((substr(strtolower($subject), 0, 4) != 'fwd:') && + if ((substr(strtolower($subject), 0, 4) != 'fwd:') && (substr(strtolower($subject), 0, 5) != '[fwd:') && (substr(strtolower($subject), 0, 6) != '[ fwd:')) { $subject = '[Fwd: ' . $subject . ']'; @@ -764,16 +774,19 @@ function getAttachments($message, &$composeMessage, $passed_id, $entities, $imap if ( !in_array($message->entity_id, $entities) && $message->entity_id) { switch ($message->type0) { case 'message': - if ($message->type1 == 'rfc822') { - $filename = $message->rfc822_header->subject.'.eml'; - if ($filename == "") { - $filename = "untitled-".$message->entity_id.'.eml'; - } - } else { - $filename = $message->getFilename(); - } + if ($message->type1 == 'rfc822') { + $filename = $message->rfc822_header->subject.'.eml'; + if ($filename == "") { + $filename = "untitled-".$message->entity_id.'.eml'; + } + } else { + $filename = $message->getFilename(); + } break; default: + if (!$message->mime_header) { /* temporary hack */ + $message->mime_header = $message->header; + } $filename = $message->getFilename(); break; } @@ -789,12 +802,10 @@ function getAttachments($message, &$composeMessage, $passed_id, $entities, $imap $full_localfilename = "$hashed_attachment_dir/$localfilename"; } $message->att_local_name = $full_localfilename; - if (!$message->mime_header) { /* temporary hack */ - $message->mime_header = $message->header; - } + + $composeMessage->initAttachment($message->type0.'/'.$message->type1,$filename, + $full_localfilename); - $composeMessage->addEntity($message); - /* Write Attachment to file */ $fp = fopen ("$hashed_attachment_dir/$localfilename", 'wb'); fputs($fp, decodeBody(mime_fetch_body($imapConnection, @@ -870,14 +881,14 @@ function showInputForm ($session, $values=false) { } if ($use_javascript_addr_book) { - echo "\n". '' . "\n\n"; + "// -->\n\n\n"; } echo "\n" . '
'; for ($i = 1; $i < $idents; $i ++) { $fn = getPref($data_dir, $username, 'full_name' . $i); $em = getPref($data_dir, $username, 'email_address' . $i); @@ -1021,21 +1033,21 @@ function showInputForm ($session, $values=false) { if ($default_charset == 'iso-2022-jp') { echo "\n\n".($prefix_sig==true? "-- \n":'').mb_convert_encoding($signature, 'EUC-JP'); } else { - echo "\n\n".($prefix_sig==true? "-- \n":'').decodeHeader($signature,false); + echo "\n\n".($prefix_sig==true? "-- \n":'').decodeHeader($signature,false,false); } - echo "\n\n".decodeHeader($body,false,true); + echo "\n\n".decodeHeader($body,false,false); } else { - echo "\n\n".decodeHeader($body,false,true); + echo "\n\n".decodeHeader($body,false,false); if ($default_charset == 'iso-2022-jp') { echo "\n\n".($prefix_sig==true? "-- \n":'').mb_convert_encoding($signature, 'EUC-JP'); }else{ - echo "\n\n".($prefix_sig==true? "-- \n":'').decodeHeader($signature,false,true); + echo "\n\n".($prefix_sig==true? "-- \n":'').decodeHeader($signature,false,false); } } } else { - echo decodeHeader($body,false,true); + echo decodeHeader($body,false,false); } echo '
' . "\n" . ' ' . "\n" . @@ -1074,7 +1086,7 @@ function showInputForm ($session, $values=false) { } else { $maxsize = ''; } - + echo ''; echo ' ' . "\n" . ' ' . "\n" . ' by nonbreaking spaces   + by replacing them back to spaces addressparsing works */ + /* FIXME: How to handle in case of other charsets where "\240" + is not a non breaking space ??? */ + + $send_to = str_replace("\240",' ',$send_to); + $send_to_cc = str_replace("\240",' ',$send_to_cc); + $send_to_bcc = str_replace("\240",' ',$send_to_bcc); + $rfc822_header = $composeMessage->rfc822_header; $abook = addressbook_init(false, true); @@ -1360,7 +1385,6 @@ function deliverMessage($composeMessage, $draft=false) { } if (!$from_mail) { $from_mail = "$popuser@$domain"; - $full_name = ''; } $rfc822_header->from = $rfc822_header->parseAddress($from_mail,true); if ($full_name) { @@ -1405,15 +1429,24 @@ function deliverMessage($composeMessage, $draft=false) { array_unshift($composeMessage->entities, $message_body); $content_type = new ContentType('multipart/mixed'); } else { - $content_type = new ContentType('text/plain'); - } - if ($default_charset) { - $content_type->properties['charset']=$default_charset; + $content_type = new ContentType('text/plain'); + if ($special_encoding) { + $rfc822_header->encoding = $special_encoding; + } else { + $rfc822_header->encoding = '8bit'; + } + if ($default_charset) { + $content_type->properties['charset']=$default_charset; + } } $rfc822_header->content_type = $content_type; $composeMessage->rfc822_header = $rfc822_header; + /* Here you can modify the message structure just before we hand + it over to deliver */ + do_hook('compose_send'); + if (!$useSendmail && !$draft) { require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php'); $deliver = new Deliver_SMTP(); @@ -1469,9 +1502,10 @@ function deliverMessage($composeMessage, $draft=false) { plain_error_message($msg, $color); } else { unset ($deliver); - $imap_stream = sqimap_login($username, $key, $imapServerAddress, - $imapPort, 0); - if (sqimap_mailbox_exists ($imap_stream, $sent_folder)) { + $move_to_sent = getPref($data_dir,$username,'move_to_sent'); + $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); + if (sqimap_mailbox_exists ($imap_stream, $sent_folder) && ((isset($move_to_sent) && $move_to_sent) || + (isset($default_move_to_sent) && $default_move_to_sent))) { sqimap_append ($imap_stream, $sent_folder, $length); require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); $imap_deliver = new Deliver_IMAP();