X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fcompose.php;h=6737f21e85fa7836493d46a3acef0da15dc891a3;hb=de14d8f3f4aadf9899329a3bfbab3bd3a74b24b9;hp=d9308aac31076d993000b7dcef7ef19a6f795448;hpb=953fa71871d73c48c5efdb4d120602ee956df193;p=squirrelmail.git diff --git a/src/compose.php b/src/compose.php index d9308aac..6737f21e 100644 --- a/src/compose.php +++ b/src/compose.php @@ -79,6 +79,7 @@ sqgetGlobalVar('addr_search_done', $html_addr_search_done, SQ_POST); sqgetGlobalVar('send_to_search', $send_to_search, SQ_POST); sqgetGlobalVar('do_delete', $do_delete, SQ_POST); sqgetGlobalVar('delete', $delete, SQ_POST); +sqgetGlobalVar('restoremessages', $restoremessages, SQ_POST); if ( sqgetGlobalVar('return', $temp, SQ_POST) ) { $html_addr_search_done = 'Use Addresses'; } @@ -86,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) { @@ -128,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; } @@ -194,7 +199,7 @@ function getforwardHeader($orig_header) { $subject = decodeHeader($orig_header->subject,false,false); $subject = str_replace(' ',' ',$subject); $bodyTop = str_pad(' '._("Original Message").' ',$editor_size -2,'-',STR_PAD_BOTH) . - "\n\n". $display[_("Subject")] . $subject . "\n" . + "\n". $display[_("Subject")] . $subject . "\n" . $display[_("From")] . $from . "\n" . $display[_("Date")] . getLongDateString( $orig_header->date ). "\n" . $display[_("To")] . $to . "\n"; @@ -298,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(); } @@ -359,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); @@ -372,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 { @@ -535,6 +542,9 @@ elseif (isset($sigappend)) { if (isset($send_to_bcc)) { $values['send_to_bcc'] = $send_to_bcc; } + if (isset($subject)) { + $values['subject'] = $subject; + } showInputForm($session, $values); } @@ -549,6 +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; $send_to = $send_to_cc = $send_to_bcc = $subject = $identity = ''; $mailprio = 3; @@ -599,6 +610,12 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $bodypart = str_replace(array(' ','>','<'),array(' ','<','>'),$bodypart); $bodypart = strip_tags($bodypart); } + if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && + function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { + if (mb_detect_encoding($bodypart) != 'ASCII') { + $bodypart = $languages[$squirrelmail_language]['XTRA_CODE']('decode', $bodypart); + } + } $body .= $bodypart; } if ($default_use_priority) { @@ -643,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 = ''; @@ -673,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 . ']'; @@ -814,7 +835,7 @@ function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, TRUE, $response, $readmessage, $uid_support); $message = $message->parent; } - if ($response = 'OK') { + if ($response == 'OK') { $subject = encodeHeader($message->rfc822_header->subject); array_shift($body_a); $body = implode('', $body_a) . "\r\n"; @@ -852,6 +873,10 @@ function showInputForm ($session, $values=false) { $mailprio = $values['mailprio']; $body = $values['body']; $identity = (int) $values['identity']; + } else { + $send_to = decodeHeader($send_to); + $send_to_cc = decodeHeader($send_to_cc); + $send_to_bcc = decodeHeader($send_to_bcc); } if ($use_javascript_addr_book) { @@ -900,73 +925,86 @@ function showInputForm ($session, $values=false) { showComposeButtonRow(); } + /* display select list for identities */ $idents = getPref($data_dir, $username, 'identities', 0); if ($idents > 1) { - echo ' ' . "\n" . - html_tag( 'td', '', 'right', $color[4], 'WIDTH="10%"' ) . - _("From:") . '' . "\n" . - html_tag( 'td', '', 'left', $color[4], 'WIDTH="90%"' ) . - ' ' . "\n" . + ' '; for ($i = 1; $i < $idents; $i ++) { + $fn = getPref($data_dir, $username, 'full_name' . $i); + $em = getPref($data_dir, $username, 'email_address' . $i); + echo ''; } echo '' . "\n" . - ' ' . "\n" . - ' ' . "\n"; + ' ' . "\n" . + ' ' . "\n"; } - echo ' ' . "\n" . - html_tag( 'td', '', 'right', $color[4], 'WIDTH="10%"' ) . + echo ' ' . "\n" . + html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) . _("To:") . '' . "\n" . - html_tag( 'td', '', 'left', $color[4], 'WIDTH="90%"' ) . - '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . + html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) . + '
' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . html_tag( 'td', '', 'right', $color[4] ) . - _("CC:") . '' . "\n" . + _("CC:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4] ) . - '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . + '
' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . html_tag( 'td', '', 'right', $color[4] ) . - _("BCC:") . '' . "\n" . + _("BCC:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4] ) . - '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . + '
' . "\n" . + ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n" . html_tag( 'td', '', 'right', $color[4] ) . - _("Subject:") . '' . "\n" . + _("Subject:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4] ) . "\n"; - echo ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n\n"; + echo ' ' . "\n" . + ' ' . "\n" . + ' ' . "\n\n"; if ($location_of_buttons == 'between') { showComposeButtonRow(); } + /* why this distinction? */ if ($compose_new_win == '1') { echo ' ' . "\n" . ' ' . "\n" . @@ -979,6 +1017,7 @@ function showInputForm ($session, $values=false) { '   
' . "\n" . - ' ' . "\n" . - ' ' . "\n"; + echo '
' . "\n" . + ' ' . "\n" . + ' ' . "\n"; if ($location_of_buttons == 'bottom') { showComposeButtonRow(); } else { - echo ' ' . "\n" . - html_tag( 'td', '', 'right', '', 'COLSPAN=2' ) . "\n" . - ' ' . "\n" . - '     

' . "\n" . - ' ' . "\n" . - ' ' . "\n"; + echo ' ' . "\n" . + html_tag( 'td', '', 'right', '', 'colspan="2"' ) . "\n" . + ' ' . "\n" . + '     

' . "\n" . + ' ' . "\n" . + ' ' . "\n"; } /* This code is for attachments */ if ((bool) ini_get('file_uploads')) { - echo ' ' . "\n" . - ' ' . "\n" . + + /* Calculate the max size for an uploaded file. + * This is advisory for the user because we can't actually prevent + * people to upload too large files. */ + $sizes = array(); + /* php.ini vars which influence the max for uploads */ + $configvars = array('post_max_size', 'memory_limit', 'upload_max_filesize'); + foreach($configvars as $var) { + /* skip 0 or empty values */ + if( $size = getByteSize(ini_get($var)) ) { + $sizes[] = $size; + } + } + + if(count($sizes) > 0) { + $maxsize = '(max. ' . show_readable_size( min( $sizes ) ) . ')'; + } else { + $maxsize = ''; + } + + echo ' ' . "\n" . + ' ' . "\n" . ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . + '
' . "\n" . + '
' . "\n" . ' ' . "\n" . - ' ' . "\n" . - html_tag( 'td', '', 'right', '', 'VALIGN=MIDDLE' ) . - _("Attach:") . '' . "\n" . - html_tag( 'td', '', 'left', '', 'VALIGN=MIDDLE' ) . - ' ' . "\n" . + ' ' . "\n" . + html_tag( 'td', '', 'right', '', 'valign="middle"' ) . + _("Attach:") . '' . "\n" . + html_tag( 'td', '', 'left', '', 'valign="middle"' ) . + ' ' . "\n" . '   ' . "\n" . - ' ' . "\n" . - ' ' . "\n"; + $maxsize . + ' ' . "\n" . + ' ' . "\n"; $s_a = array(); @@ -1218,6 +1278,7 @@ function saveAttachedFiles($session) { $name = $_FILES['attachfile']['name']; $message->initAttachment($type, $name, $full_localfilename); $compose_messages[$session] = $message; + sqsession_register($compose_messages , 'compose_messages'); } function ClearAttachments($composeMessage) { @@ -1232,7 +1293,35 @@ function ClearAttachments($composeMessage) { } } +/* parse values like 8M and 2k into bytes */ +function getByteSize($ini_size) { + + if(!$ini_size) { + return FALSE; + } + + $ini_size = trim($ini_size); + + // if there's some kind of letter at the end of the string we need to multiply. + if(!is_numeric(substr($ini_size, -1))) { + + switch(strtoupper(substr($ini_size, -1))) { + case 'G': + $bytesize = 1073741824; + break; + case 'M': + $bytesize = 1048576; + break; + case 'K': + $bytesize = 1024; + break; + } + return ($bytesize * (int)substr($ini_size, 0, -1)); + } + + return $ini_size; +} /* temporary function to make use of the deliver class. @@ -1245,9 +1334,18 @@ function deliverMessage($composeMessage, $draft=false) { global $send_to, $send_to_cc, $send_to_bcc, $mailprio, $subject, $body, $username, $popuser, $usernamedata, $identity, $data_dir, $request_mdn, $request_dr, $default_charset, $color, $useSendmail, - $domain, $action; + $domain, $action, $default_move_to_sent, $move_to_sent; global $imapServerAddress, $imapPort, $sent_folder, $key; + /* some browsers replace 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); @@ -1286,7 +1384,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) { @@ -1331,14 +1428,22 @@ 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'); @@ -1395,9 +1500,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();