| | |
| | | /****** message sending functions ********/ |
| | | |
| | | |
| | | |
| | | function rcmail_get_identity($id) |
| | | { |
| | | global $DB, $CHARSET, $OUTPUT; |
| | |
| | | { |
| | | $sql_arr = $DB->fetch_assoc($sql_result); |
| | | $out = $sql_arr; |
| | | $name = strpos($sql_arr['name'], ",") ? '"'.$sql_arr['name'].'"' : $sql_arr['name']; |
| | | $out['string'] = sprintf('%s <%s>', |
| | | rcube_charset_convert($sql_arr['name'], $CHARSET, $OUTPUT->get_charset()), |
| | | rcube_charset_convert($name, $CHARSET, $OUTPUT->get_charset()), |
| | | $sql_arr['mailto']); |
| | | return $out; |
| | | } |
| | |
| | | return FALSE; |
| | | } |
| | | |
| | | |
| | | if (strlen($_POST['_draft_saveid']) > 3) |
| | | $olddraftmessageid = get_input_value('_draft_saveid', RCUBE_INPUT_POST); |
| | | |
| | | if (strlen($_POST['_draft_newsaveid']) > 3) |
| | | $newdraftmessageid = get_input_value('_draft_newsaveid', RCUBE_INPUT_POST); |
| | | |
| | | $message_id = sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host'])); |
| | | $savedraft = !empty($_POST['_draft']) ? TRUE : FALSE; |
| | | |
| | | |
| | | // remove all scripts and act as called in frame |
| | | $OUTPUT->reset(); |
| | | $_framed = TRUE; |
| | | |
| | | |
| | | /****** check submission and compose message ********/ |
| | | |
| | | |
| | | if (empty($_POST['_to']) && empty($_POST['_subject']) && $_POST['_message']) |
| | | { |
| | | show_message("sendingfailed", 'error'); |
| | | rcmail_overwrite_action('compose'); |
| | | //rcmail_overwrite_action('compose'); |
| | | rcube_iframe_response(); |
| | | return; |
| | | } |
| | | |
| | |
| | | $mailto_regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m'); |
| | | $mailto_replace = array(', ', ', ', ''); |
| | | |
| | | // repalce new lines and strip ending ', ' |
| | | // replace new lines and strip ending ', ' |
| | | $mailto = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset)); |
| | | |
| | | // decode address strings |
| | | $to_address_arr = $IMAP->decode_address_list($mailto); |
| | | $identity_arr = rcmail_get_identity(get_input_value('_from', RCUBE_INPUT_POST)); |
| | | |
| | | |
| | | $from = $identity_arr['mailto']; |
| | | $first_to = is_array($to_address_arr[0]) ? $to_address_arr[0]['mailto'] : $mailto; |
| | | |
| | | |
| | | // try the message-id submitted by the compose form |
| | | if ($newdraftmessageid) |
| | | $message_id = sprintf('<%s>',$newdraftmessageid); |
| | | else |
| | | $message_id = sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), $_SESSION['imap_host']); |
| | | |
| | | if (empty($identity_arr['string'])) |
| | | $identity_arr['string'] = $from; |
| | | |
| | | |
| | | // compose headers array |
| | | $headers = array('Date' => date('D, j M Y G:i:s O'), |
| | | 'From' => $identity_arr['string'], |
| | | 'To' => $mailto); |
| | | 'To' => rcube_charset_convert($mailto, $input_charset, $message_charset)); |
| | | |
| | | // additional recipients |
| | | if (!empty($_POST['_cc'])) |
| | |
| | | if (!empty($_POST['_priority'])) |
| | | { |
| | | $priority = (int)$_POST['_priority']; |
| | | $a_priorities = array(1=>'lowest', 2=>'low', 4=>'high', 5=>'highest'); |
| | | $a_priorities = array(1=>'highest', 2=>'high', 4=>'low', 5=>'lowest'); |
| | | if ($str_priority = $a_priorities[$priority]) |
| | | $headers['X-Priority'] = sprintf("%d (%s)", $priority, ucfirst($str_priority)); |
| | | } |
| | |
| | | if (!$sent) |
| | | { |
| | | show_message("sendingfailed", 'error'); |
| | | rcmail_overwrite_action('compose'); |
| | | rcube_iframe_response(); |
| | | return; |
| | | } |
| | | |
| | |
| | | $IMAP->set_flag($_SESSION['compose']['reply_uid'], 'ANSWERED'); |
| | | |
| | | } // End of SMTP Delivery Block |
| | | |
| | | |
| | | |
| | | // Determine which folder to save message |
| | | if ($savedraft) |
| | |
| | | |
| | | // raise error if saving failed |
| | | if (!$saved) |
| | | { |
| | | raise_error(array('code' => 800, |
| | | 'type' => 'imap', |
| | | 'file' => __FILE__, |
| | | 'message' => "Could not save message in $CONFIG[$store_target]"), TRUE, FALSE); |
| | | |
| | | show_message('errorsaving', 'error'); |
| | | rcube_iframe_response($errorout); |
| | | } |
| | | |
| | | if ($olddraftmessageid) |
| | | { |
| | |
| | | $a_deleteid = $IMAP->search($CONFIG['drafts_mbox'],'HEADER Message-ID',$olddraftmessageid); |
| | | $deleted = $IMAP->delete_message($IMAP->get_uid($a_deleteid[0],$CONFIG['drafts_mbox']),$CONFIG['drafts_mbox']); |
| | | |
| | | // raise error if deletion of old draft failed |
| | | if (!$deleted) |
| | | raise_error(array('code' => 800, |
| | | 'type' => 'imap', |
| | |
| | | |
| | | if ($savedraft) |
| | | { |
| | | // clear the "saving message" busy status, and display success |
| | | show_message('messagesaved', 'confirmation'); |
| | | rcmail_overwrite_action('compose'); |
| | | |
| | | // update "_draft_saveid" on the page, which is used to delete a previous draft |
| | | $frameout = "var foundid = parent.rcube_find_object('_draft_saveid', parent.document);\n"; |
| | | $frameout .= sprintf("foundid.value = '%s';\n", str_replace(array('<','>'), "", $message_id)); |
| | | |
| | | // update the "cmp_hash" to prevent "Unsaved changes" warning |
| | | $frameout .= sprintf("parent.%s.cmp_hash = parent.%s.compose_field_hash();\n", $JS_OBJECT_NAME, $JS_OBJECT_NAME); |
| | | |
| | | // start the auto-save timer again |
| | | $frameout .= sprintf("parent.%s.auto_save_start();", $JS_OBJECT_NAME); |
| | | |
| | | // send html page with JS calls as response |
| | | rcube_iframe_response($frameout); |
| | | } |
| | | else |
| | | { |
| | |
| | | fclose($fp); |
| | | } |
| | | } |
| | | show_message('messagesent', 'confirmation'); |
| | | |
| | | rcmail_compose_cleanup(); |
| | | rcube_iframe_response(sprintf("parent.$JS_OBJECT_NAME.sent_successfully('%s');", |
| | | rep_specialchars_output(rcube_label('messagesent'), 'js'))); |
| | | } |
| | | |
| | | |