X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fcompose.php;h=9f99f9855554d5adf0045bb29d70255a44905ca9;hp=a76e7e65abdc9ac9ad2650bd07880fcbc8bbeba6;hb=c90271cb5202fc5f59e0c253df4f2e7a3fb5f337;hpb=74f66d27976844a6b3cd4a6b7be37f16ee0ba318
diff --git a/src/compose.php b/src/compose.php
index a76e7e65..9f99f985 100644
--- a/src/compose.php
+++ b/src/compose.php
@@ -10,7 +10,7 @@
* - Send mail
* - Save As Draft
*
- * @copyright © 1999-2006 The SquirrelMail Project Team
+ * @copyright © 1999-2007 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
@@ -21,11 +21,19 @@
*/
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');
require_once(SM_PATH . 'functions/date.php');
require_once(SM_PATH . 'functions/mime.php');
+require_once(SM_PATH . 'functions/compose.php');
require_once(SM_PATH . 'class/deliver/Deliver.class.php');
require_once(SM_PATH . 'functions/addressbook.php');
require_once(SM_PATH . 'functions/forms.php');
@@ -44,32 +52,42 @@ 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('delete_draft',$delete_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;
+}
+
if ( sqgetGlobalVar('startMessage',$startMessage) ) {
$startMessage = (int)$startMessage;
} else {
@@ -110,6 +128,25 @@ if ( !sqgetGlobalVar('smaction',$action) )
if ( sqgetGlobalVar('smaction_edit_new',$tmp) ) $action = 'edit_as_new';
}
+/**
+ * Here we decode the data passed in from mailto.php.
+ */
+if ( sqgetGlobalVar('mailtodata', $mailtodata, SQ_GET) ) {
+ $trtable = array('to' => 'send_to',
+ 'cc' => 'send_to_cc',
+ 'bcc' => 'send_to_bcc',
+ 'body' => 'body',
+ 'subject' => 'subject');
+ $mtdata = unserialize($mailtodata);
+
+ foreach ($trtable as $f => $t) {
+ if ( !empty($mtdata[$f]) ) {
+ $$t = $mtdata[$f];
+ }
+ }
+ unset($mailtodata,$mtdata, $trtable);
+}
+
/* Location (For HTTP 1.1 Header("Location: ...") redirects) */
$location = get_location();
/* Identities (fetch only once) */
@@ -123,8 +160,8 @@ function replyAllString($header) {
/**
* 1) Remove the addresses we'll be sending the message 'to'
*/
- if (isset($header->replyto)) {
- $excl_ar = $header->getAddr_a('replyto');
+ if (isset($header->reply_to)) {
+ $excl_ar = $header->getAddr_a('reply_to');
}
/**
* 2) Remove our identities from the CC list (they still can be in the
@@ -261,7 +298,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);
@@ -289,7 +326,7 @@ if (sqsession_is_registered('session_expired_post')) {
sqsession_unregister('session_expired_post');
session_write_close();
} else {
- // these are the vars that we can set from the expired composed session
+ // these are the vars that we can set from the expired composed session
$compo_var_list = array ( 'send_to', 'send_to_cc','body','startMessage',
'passed_body','use_signature','signature','attachments','subject','newmail',
'send_to_bcc', 'passed_id', 'mailbox', 'from_htmladdr_search', 'identity',
@@ -298,11 +335,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)) {
@@ -333,6 +370,8 @@ if (sqsession_is_registered('session_expired_post')) {
if (!isset($composesession)) {
$composesession = 0;
sqsession_register(0,'composesession');
+} else {
+ $composesession = (int)$composesession;
}
if (!isset($session) || (isset($newmessage) && $newmessage)) {
@@ -357,7 +396,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';
}
@@ -387,7 +426,7 @@ if ($draft) {
}
sqimap_logout($imap_stream);
}
-
+
$oErrorHandler->saveDelayedErrors();
session_write_close();
@@ -426,7 +465,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;
}
@@ -451,10 +490,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";
}
@@ -466,7 +505,15 @@ if ($send) {
$Result = deliverMessage($composeMessage);
- do_hook('compose_send_after', $Result, $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, &$mail_sent));
if (! $Result) {
showInputForm($session);
exit();
@@ -494,21 +541,21 @@ 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 {
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'); - if ($compose_new_win=='1') { $oTemplate->display('compose_newwin_close.tpl'); } - + + do_hook('compose_bottom', $null); + $oErrorHandler->setDelayedErrors(false); $oTemplate->display('footer.tpl'); } @@ -1293,38 +1328,31 @@ function showComposeButtonRow() { $data_dir, $username; global $oTemplate, $buffer_hook; - - if ($default_use_priority) { + + if ($default_use_priority) { $priorities = array('1'=>_("High"), '3'=>_("Normal"), '5'=>_("Low")); $priority = isset($mailprio) ? $mailprio : 3; } else { $priorities = array(); $priority = NULL; } - + $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); $oTemplate->assign('priority_list', $priorities); $oTemplate->assign('current_priority', $priority); - + $oTemplate->assign('notifications_enabled', $mdn_user_support==1); $oTemplate->assign('read_receipt', $request_mdn=='1'); $oTemplate->assign('delivery_receipt', $request_dr=='1'); - + $oTemplate->assign('drafts_enabled', $save_as_draft); $oTemplate->assign('address_book_button', $addr_book); @@ -1352,33 +1380,26 @@ function checkInput ($show) { /* True if FAILURE */ function saveAttachedFiles($session) { - global $_FILES, $attachment_dir, $username, - $data_dir, $compose_messages; + global $compose_messages; /* get out of here if no file was attached at all */ if (! is_uploaded_file($_FILES['attachfile']['tmp_name']) ) { return true; } - $hashed_attachment_dir = getHashedDir($username, $attachment_dir); - $localfilename = GenerateRandomString(32, '', 7); - $full_localfilename = "$hashed_attachment_dir/$localfilename"; - while (file_exists($full_localfilename)) { - $localfilename = GenerateRandomString(32, '', 7); - $full_localfilename = "$hashed_attachment_dir/$localfilename"; - } + $localfilename = sq_get_attach_tempfile(); // m_u_f works better with restricted PHP installs (safe_mode, open_basedir), // if that doesn't work, try a simple rename. - if (!@move_uploaded_file($_FILES['attachfile']['tmp_name'],$full_localfilename)) { - if (!@rename($_FILES['attachfile']['tmp_name'], $full_localfilename)) { + if (!@move_uploaded_file($_FILES['attachfile']['tmp_name'],$localfilename)) { + if (!@rename($_FILES['attachfile']['tmp_name'], $localfilename)) { return true; } } $message = $compose_messages[$session]; $type = strtolower($_FILES['attachfile']['type']); $name = $_FILES['attachfile']['name']; - $message->initAttachment($type, $name, $full_localfilename); + $message->initAttachment($type, $name, $localfilename); $compose_messages[$session] = $message; sqsession_register($compose_messages , 'compose_messages'); } @@ -1422,10 +1443,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; @@ -1447,45 +1468,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']); } @@ -1523,14 +1523,11 @@ function deliverMessage($composeMessage, $draft=false) { $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 */ - $hookReturn = do_hook('compose_send', $composeMessage); - /* Get any changes made by plugins to $composeMessage. */ - if ( is_object($hookReturn[1]) ) { - $composeMessage = $hookReturn[1]; - } + it over to deliver; plugin authors note that $composeMessage + is sent and modified by reference since 1.5.2 */ + do_hook('compose_send', $composeMessage); if (!$useSendmail && !$draft) { require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php'); @@ -1583,7 +1580,8 @@ function deliverMessage($composeMessage, $draft=false) { } if (!$success) { // $deliver->dlv_server_msg is not always server's reply - $msg = $deliver->dlv_msg; + $msg = _("Message not sent.") . "