X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fcompose.php;h=4bc00a2fa49e009e8ac8abf00085ebe84ed7d0e9;hp=bc4d56672c0278c2a40ea39bdc15a3040b08d263;hb=c8dc86c977350cb16f70399c55615e6b13c7c182;hpb=af084f6ee1c0b532143f616f2b4fc490a4cb3cae diff --git a/src/compose.php b/src/compose.php index bc4d5667..4bc00a2f 100644 --- a/src/compose.php +++ b/src/compose.php @@ -21,6 +21,13 @@ */ require('../include/init.php'); +/* If email_address not set and admin wants us to ask user for it, + * redirect to options page. */ +if ( $ask_user_info && getPref($data_dir, $username,'email_address') == "" ) { + header("Location: " . get_location() . "/options.php?optpage=personal"); + exit; +} + /* SquirrelMail required files. */ require_once(SM_PATH . 'functions/imap_general.php'); require_once(SM_PATH . 'functions/imap_messages.php'); @@ -45,31 +52,37 @@ sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION); $oErrorHandler->setDelayedErrors(true); /** SESSION/POST/GET VARS */ -sqgetGlobalVar('session',$session); -sqgetGlobalVar('mailbox',$mailbox); -if(!sqgetGlobalVar('identity',$identity)) { +sqgetGlobalVar('send', $send, SQ_POST); +// Send can only be achieved by setting $_POST var. If Send = true then +// retrieve other form fields from $_POST +if (isset($send) && $send) { + $SQ_GLOBAL = SQ_POST; +} else { + $SQ_GLOBAL = SQ_FORM; +} +sqgetGlobalVar('session',$session, $SQ_GLOBAL); +sqgetGlobalVar('mailbox',$mailbox, $SQ_GLOBAL); +if(!sqgetGlobalVar('identity',$identity, $SQ_GLOBAL)) { $identity=0; } -sqgetGlobalVar('send_to',$send_to); -sqgetGlobalVar('send_to_cc',$send_to_cc); -sqgetGlobalVar('send_to_bcc',$send_to_bcc); -sqgetGlobalVar('subject',$subject); -sqgetGlobalVar('body',$body); -sqgetGlobalVar('mailprio',$mailprio); -sqgetGlobalVar('request_mdn',$request_mdn); -sqgetGlobalVar('request_dr',$request_dr); -sqgetGlobalVar('html_addr_search',$html_addr_search); -sqgetGlobalVar('mail_sent',$mail_sent); -sqgetGlobalVar('passed_id',$passed_id); -sqgetGlobalVar('passed_ent_id',$passed_ent_id); -sqgetGlobalVar('send',$send); - -sqgetGlobalVar('attach',$attach); - -sqgetGlobalVar('draft',$draft); -sqgetGlobalVar('draft_id',$draft_id); -sqgetGlobalVar('ent_num',$ent_num); -sqgetGlobalVar('saved_draft',$saved_draft); +sqgetGlobalVar('send_to',$send_to, $SQ_GLOBAL); +sqgetGlobalVar('send_to_cc',$send_to_cc, $SQ_GLOBAL); +sqgetGlobalVar('send_to_bcc',$send_to_bcc, $SQ_GLOBAL); +sqgetGlobalVar('subject',$subject, $SQ_GLOBAL); +sqgetGlobalVar('body',$body, $SQ_GLOBAL); +sqgetGlobalVar('mailprio',$mailprio, $SQ_GLOBAL); +sqgetGlobalVar('request_mdn',$request_mdn, $SQ_GLOBAL); +sqgetGlobalVar('request_dr',$request_dr, $SQ_GLOBAL); +sqgetGlobalVar('html_addr_search',$html_addr_search, $SQ_GLOBAL); +sqgetGlobalVar('mail_sent',$mail_sent, $SQ_GLOBAL); +sqgetGlobalVar('passed_id',$passed_id, $SQ_GLOBAL); +sqgetGlobalVar('passed_ent_id',$passed_ent_id, $SQ_GLOBAL); + +sqgetGlobalVar('attach',$attach, SQ_POST); +sqgetGlobalVar('draft',$draft, SQ_POST); +sqgetGlobalVar('draft_id',$draft_id, $SQ_GLOBAL); +sqgetGlobalVar('ent_num',$ent_num, $SQ_GLOBAL); +sqgetGlobalVar('saved_draft',$saved_draft, SQ_FORM); if ( sqgetGlobalVar('delete_draft',$delete_draft) ) { $delete_draft = (int)$delete_draft; @@ -96,7 +109,6 @@ if ( sqgetGlobalVar('return', $temp, SQ_POST) ) { } /** GET VARS */ -sqgetGlobalVar('attachedmessages', $attachedmessages, SQ_GET); if ( sqgetGlobalVar('account', $temp, SQ_GET) ) { $iAccount = (int) $temp; } else { @@ -285,7 +297,7 @@ function getforwardHeader($orig_header) { $bodyTop = sq_str_pad(' '._("Original Message").' ',$editor_size -2,'-',STR_PAD_BOTH,$default_charset) . "\n". $display[_("Subject")] . $subject . "\n" . $display[_("From")] . $from . "\n" . - $display[_("Date")] . getLongDateString( $orig_header->date ). "\n" . + $display[_("Date")] . getLongDateString( $orig_header->date, $orig_header->date_unparsed ). "\n" . $display[_("To")] . $to . "\n"; if ($orig_header->cc != array() && $orig_header->cc !='') { $cc = decodeHeader($orig_header->getAddr_s('cc',"\n$indent"),false,false,true); @@ -322,11 +334,11 @@ if (sqsession_is_registered('session_expired_post')) { foreach ($compo_var_list as $var) { if ( isset($session_expired_post[$var]) && !isset($$var) ) { - $$var = $session_expired_post[$var]; + $$var = $session_expired_post[$var]; } } - $compose_messages = unserialize(urldecode($restoremessages)); + $compose_messages = unserialize($restoremessages); sqsession_register($compose_messages,'compose_messages'); sqsession_register($composesession,'composesession'); if (isset($send)) { @@ -383,7 +395,7 @@ if (!isset($compose_messages[$session]) || ($compose_messages[$session] == NULL) $composeMessage=$compose_messages[$session]; } -if (!isset($mailbox) || $mailbox == '' || ($mailbox == 'None')) { +if (empty($mailbox)) { $mailbox = 'INBOX'; } @@ -399,6 +411,7 @@ if ($draft) { exit(); } else { unset($compose_messages[$session]); + sqsession_register($compose_messages,'compose_messages'); $draft_message = _("Draft Email Saved"); /* If this is a resumed draft, then delete the original */ if(isset($delete_draft)) { @@ -421,6 +434,7 @@ if ($draft) { if ( !isset($pageheader_sent) || !$pageheader_sent ) { Header("Location: $location/compose.php?saved_draft=yes&session=$composesession"); } else { +//FIXME: DON'T ECHO HTML FROM CORE! echo '

' . _("Return") . '
'; @@ -431,6 +445,7 @@ if ($draft) { Header("Location: $location/right_main.php?mailbox=" . urlencode($draft_folder) . "&startMessage=1¬e=".urlencode($draft_message)); } else { +//FIXME: DON'T ECHO HTML FROM CORE! echo '

' @@ -452,7 +467,7 @@ if ($send) { /* We entered compose via the search results page */ $mailbox = 'INBOX'; /* Send 'em to INBOX, that's safe enough */ } - $urlMailbox = urlencode (trim($mailbox)); + $urlMailbox = urlencode($mailbox); if (! isset($passed_id)) { $passed_id = 0; } @@ -477,10 +492,10 @@ if ($send) { if( $line <> '-- ' ) { $line = rtrim($line); } - if (sq_strlen($line,$default_charset) <= $editor_size + 1) { + if (sq_strlen($line, $default_charset) <= $editor_size + 1) { $newBody .= $line . "\n"; } else { - sqWordWrap($line, $editor_size,$default_charset); + sqWordWrap($line, $editor_size, $default_charset); $newBody .= $line . "\n"; } @@ -492,15 +507,21 @@ if ($send) { $Result = deliverMessage($composeMessage); + if ($Result) + $mail_sent = 'yes'; + else + $mail_sent = 'no'; + // NOTE: this hook changed in 1.5.2 from sending $Result and // $composeMessage as args #2 and #3 to being in an array // under arg #2 - do_hook('compose_send_after', $temp=array(&$Result, &$composeMessage)); + do_hook('compose_send_after', $temp=array(&$Result, &$composeMessage, &$mail_sent)); if (! $Result) { showInputForm($session); exit(); } unset($compose_messages[$session]); + sqsession_register($compose_messages,'compose_messages'); /* if it is resumed draft, delete draft message */ if ( isset($delete_draft)) { @@ -523,21 +544,23 @@ if ($send) { if ($compose_new_win == '1') { if ( !isset($pageheader_sent) || !$pageheader_sent ) { - Header("Location: $location/compose.php?mail_sent=yes"); + Header("Location: $location/compose.php?mail_sent=$mail_sent"); } else { +//FIXME: DON'T ECHO HTML FROM CORE! echo '

' + . '/compose.php?mail_sent=$mail_sent">' . _("Return") . '
'; } exit(); } else { if ( !isset($pageheader_sent) || !$pageheader_sent ) { Header("Location: $location/right_main.php?mailbox=$urlMailbox". - "&startMessage=$startMessage&mail_sent=yes"); + "&startMessage=$startMessage&mail_sent=$mail_sent"); } else { +//FIXME: DON'T ECHO HTML FROM CORE! echo '

" + . "&startMessage=$startMessage&mail_sent=$mail_sent\">" . _("Return") . '
'; } exit(); @@ -711,8 +734,8 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $use_signature, $data_dir, $username, $key, $imapServerAddress, $imapPort, $compose_messages, $composeMessage, $body_quote, $request_mdn, $request_dr, - $default_use_mdn, $mdn_user_support; - global $languages, $squirrelmail_language, $default_charset; + $mdn_user_support, $languages, $squirrelmail_language, + $default_charset; /* * Set $default_charset to correspond with the user's selection @@ -744,7 +767,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se (array(), $alt_order = array('text/plain')); if (!count($entities)) { $entities = $message->entities[0]->findDisplayEntity - (array(), $alt_order = array('text/plain','html/plain')); + (array(), $alt_order = array('text/plain','text/html')); } $orig_header = $message->rfc822_header; /* here is the envelope located */ /* redefine the message for picking up the attachments */ @@ -753,7 +776,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se } else { $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain')); if (!count($entities)) { - $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain','html/plain')); + $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain','text/html')); } $orig_header = $message->rfc822_header; } @@ -804,7 +827,6 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $mailprio = ''; } - $identity = ''; $from_o = $orig_header->from; if (is_array($from_o)) { if (isset($from_o[0])) { @@ -845,15 +867,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $send_from_parts = new AddressStructure(); $send_from_parts = $orig_header->parseAddress($send_from); $send_from_add = $send_from_parts->mailbox . '@' . $send_from_parts->host; - $identities = get_identities(); - if (count($identities) > 0) { - foreach($identities as $iddata) { - if ($send_from_add == $iddata['email_address']) { - $identity = $iddata['index']; - break; - } - } - } + $identity = find_identity(array($send_from_add)); $subject = decodeHeader($orig_header->subject,false,false,true); // Remember the receipt settings @@ -923,7 +937,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se } /* this corrects some wrapping/quoting problems on replies */ $rewrap_body = explode("\n", $body); - $from = (is_array($orig_header->from)) ? $orig_header->from[0] : $orig_header->from; + $from = (is_array($orig_header->from) && !empty($orig_header->from)) ? $orig_header->from[0] : $orig_header->from; $body = ''; $strip_sigs = getPref($data_dir, $username, 'strip_sigs'); foreach ($rewrap_body as $line) { @@ -1053,10 +1067,11 @@ function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, } function showInputForm ($session, $values=false) { - global $send_to, $send_to_cc, $body, $startMessage, $action, - $color, $use_signature, $signature, $prefix_sig, + global $send_to, $send_to_cc, $send_to_bcc, + $body, $startMessage, $action, + $use_signature, $signature, $prefix_sig, $editor_size, $editor_height, $subject, $newmail, - $use_javascript_addr_book, $send_to_bcc, $passed_id, $mailbox, + $use_javascript_addr_book, $passed_id, $mailbox, $from_htmladdr_search, $location_of_buttons, $attachment_dir, $username, $data_dir, $identity, $idents, $delete_draft, $mailprio, $compose_new_win, $saved_draft, $mail_sent, $sig_first, @@ -1088,6 +1103,7 @@ function showInputForm ($session, $values=false) { } if ($use_javascript_addr_book) { +//FIXME: NO HTML IN CORE! echo "\n". '\n\n"; } +//FIXME: NO HTML IN CORE! echo "\n" . '
\n"; +//FIXME: DON'T ECHO HTML FROM CORE! echo addHidden('startMessage', $startMessage); if ($action == 'draft') { +//FIXME: DON'T ECHO HTML FROM CORE! echo addHidden('delete_draft', $passed_id); } if (isset($delete_draft)) { +//FIXME: DON'T ECHO HTML FROM CORE! echo addHidden('delete_draft', $delete_draft); } if (isset($session)) { +//FIXME: DON'T ECHO HTML FROM CORE! echo addHidden('session', $session); } if (isset($passed_id)) { +//FIXME: DON'T ECHO HTML FROM CORE! echo addHidden('passed_id', $passed_id); } if ($saved_draft == 'yes') { - $oTemplate->assign('note', _("Draft Saved")); + $oTemplate->assign('note', _("Your draft has been saved.")); $oTemplate->display('note.tpl'); } if ($mail_sent == 'yes') { - $oTemplate->assign('note', _("Your message has been sent.")); + $oTemplate->assign('note', _("Your mail has been sent.")); $oTemplate->display('note.tpl'); } if ($compose_new_win == '1') { @@ -1163,6 +1187,7 @@ function showInputForm ($session, $values=false) { } if ($location_of_buttons == 'top') { +//FIXME: DON'T ECHO HTML FROM CORE! showComposeButtonRow(); } @@ -1186,6 +1211,7 @@ function showInputForm ($session, $values=false) { $oTemplate->display('compose_header.tpl'); if ($location_of_buttons == 'between') { +//FIXME: DON'T ECHO HTML FROM CORE! showComposeButtonRow(); } @@ -1228,6 +1254,7 @@ function showInputForm ($session, $values=false) { $oTemplate->display ('compose_body.tpl'); if ($location_of_buttons == 'bottom') { +//FIXME: DON'T ECHO HTML FROM CORE! showComposeButtonRow(); } @@ -1250,7 +1277,8 @@ function showInputForm ($session, $values=false) { } $attach = array(); - if ($composeMessage->entities) { + // composeMessage can be empty when coming from a restored session + if (is_object($composeMessage) && $composeMessage->entities) { foreach ($composeMessage->entities as $key => $attachment) { $attached_file = $attachment->att_local_name; if ($attachment->att_local_name || $attachment->body_part) { @@ -1276,6 +1304,7 @@ function showInputForm ($session, $values=false) { } // End of file_uploads if-block /* End of attachment code */ +//FIXME: no direct echoing to browser, no HTML output in core! echo addHidden('username', $username). addHidden('smaction', $action). addHidden('mailbox', $mailbox); @@ -1284,6 +1313,7 @@ function showInputForm ($session, $values=false) { so we can restore them in case of a session timeout. */ sqgetGlobalVar('QUERY_STRING', $queryString, SQ_SERVER); +//FIXME: no direct echoing to browser, no HTML output in core! echo addHidden('restoremessages', urlencode(serialize($compose_messages))). addHidden('composesession', $composesession). addHidden('querystring', $queryString). @@ -1291,17 +1321,18 @@ function showInputForm ($session, $values=false) { if (!(bool) ini_get('file_uploads')) { /* File uploads are off, so we didn't show that part of the form. To avoid bogus bug reports, tell the user why. */ +//FIXME: no direct echoing to browser, no HTML output in core! echo '

' . _("Because PHP file uploads are turned off, you can not attach files to this message. Please see your system administrator for details.") . "

\r\n"; } - do_hook('compose_bottom', $null); - if ($compose_new_win=='1') { $oTemplate->display('compose_newwin_close.tpl'); } + do_hook('compose_bottom', $null); + $oErrorHandler->setDelayedErrors(false); $oTemplate->display('footer.tpl'); } @@ -1325,17 +1356,10 @@ function showComposeButtonRow() { $mdn_user_support=getPref($data_dir, $username, 'mdn_user_support',$default_use_mdn); - if ($use_javascript_addr_book) { - $addr_book = " \n"; + if ($use_javascript_addr_book && checkForJavascript()) { + $addr_book = addButton(_("Addresses"), null, array('onclick' => 'javascript:open_abook();')); } else { - $addr_book = ' ' . "\n"; + $addr_book = addSubmit(_("Addresses"), 'html_addr_search'); } $oTemplate->assign('allow_priority', $default_use_priority==1); @@ -1359,9 +1383,12 @@ function checkInput ($show) { * using $show=false, and then when i'm ready to display the error * message, show=true */ - global $send_to, $send_to_bcc; + global $send_to, $send_to_cc, $send_to_bcc; - if ($send_to == '' && $send_to_bcc == '') { + $send_to = trim($send_to); + $send_to_cc = trim($send_to_cc); + $send_to_bcc = trim($send_to_bcc); + if (empty($send_to) && empty($send_to_cc) && empty($send_to_bcc)) { if ($show) { plain_error_message(_("You have not filled in the \"To:\" field.")); } @@ -1436,10 +1463,10 @@ function getByteSize($ini_size) { */ function deliverMessage($composeMessage, $draft=false) { global $send_to, $send_to_cc, $send_to_bcc, $mailprio, $subject, $body, - $username, $popuser, $usernamedata, $identity, $idents, $data_dir, - $request_mdn, $request_dr, $default_charset, $color, $useSendmail, - $domain, $action, $default_move_to_sent, $move_to_sent; - global $imapServerAddress, $imapPort, $sent_folder, $key; + $username, $identity, $idents, $data_dir, + $request_mdn, $request_dr, $default_charset, $useSendmail, + $domain, $action, $default_move_to_sent, $move_to_sent, + $imapServerAddress, $imapPort, $sent_folder, $key; $rfc822_header = $composeMessage->rfc822_header; @@ -1461,45 +1488,24 @@ function deliverMessage($composeMessage, $draft=false) { } $composeMessage->setBody($body); - if (ereg("^([^@%/]+)[@%/](.+)$", $username, $usernamedata)) { - $popuser = $usernamedata[1]; - $domain = $usernamedata[2]; - unset($usernamedata); - } else { - $popuser = $username; - } $reply_to = ''; - $from_mail = $idents[$identity]['email_address']; - $full_name = $idents[$identity]['full_name']; $reply_to = $idents[$identity]['reply_to']; - if (!$from_mail) { - $from_mail = "$popuser@$domain"; - } - $rfc822_header->from = $rfc822_header->parseAddress($from_mail,true); - if ($full_name) { - $from = $rfc822_header->from[0]; - if (!$from->host) $from->host = $domain; - $full_name_encoded = encodeHeader($full_name); - if ($full_name_encoded != $full_name) { - $from_addr = $full_name_encoded .' <'.$from->mailbox.'@'.$from->host.'>'; - } else { - $from_addr = '"'.$full_name .'" <'.$from->mailbox.'@'.$from->host.'>'; - } - $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true); - } + + $from_addr = build_from_header($identity); + $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true); if ($reply_to) { $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true); } /* Receipt: On Read */ if (isset($request_mdn) && $request_mdn) { - $rfc822_header->dnt = $rfc822_header->parseAddress($from_mail,true); + $rfc822_header->dnt = $rfc822_header->parseAddress($from_addr,true); } elseif (isset($rfc822_header->dnt)) { unset($rfc822_header->dnt); } /* Receipt: On Delivery */ if (isset($request_dr) && $request_dr) { - $rfc822_header->more_headers['Return-Receipt-To'] = $from_mail; + $rfc822_header->more_headers['Return-Receipt-To'] = $from->mailbox.'@'.$from->domain; } elseif (isset($rfc822_header->more_headers['Return-Receipt-To'])) { unset($rfc822_header->more_headers['Return-Receipt-To']); } @@ -1629,8 +1635,8 @@ function deliverMessage($composeMessage, $draft=false) { $lcl_allow_sent = false; } + global $passed_id, $mailbox; if (($fld_sent && $svr_allow_sent && !$lcl_allow_sent) || ($fld_sent && $lcl_allow_sent)) { - global $passed_id, $mailbox, $action; if ($action == 'reply' || $action == 'reply_all') { $save_reply_with_orig=getPref($data_dir,$username,'save_reply_with_orig'); if ($save_reply_with_orig) { @@ -1645,7 +1651,7 @@ function deliverMessage($composeMessage, $draft=false) { unset ($imap_deliver); } - global $passed_id, $mailbox, $action, $what, $iAccount,$startMessage; + global $what, $iAccount, $startMessage; $composeMessage->purgeAttachments(); if ($action=='reply' || $action=='reply_all' || $action=='forward' || $action=='forward_as_attachment') { @@ -1697,4 +1703,3 @@ function deliverMessage($composeMessage, $draft=false) { } return $success; } -?>