'-- ' ) { $line = rtrim($line); } if (strlen($line) <= $editor_size + 1) { $newBody .= $line . "\n"; } else { sqWordWrap($line, $editor_size) . "\n"; $newBody .= $line; } } $body = $newBody; do_hook('compose_send'); $MDN = False; // we are not sending a mdn response if (! isset($mailprio)) { $Result = sendMessage($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id, $MDN); } else { $Result = sendMessage($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id, $MDN, $mailprio); } if (! $Result) { showInputForm(); exit(); } if ( isset($delete_draft)) { Header("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"); } else { Header("Location: right_main.php?mailbox=$urlMailbox&sort=$sort". "&startMessage=1"); } } else { /* *$imapConnection = sqimap_login($username, $key, $imapServerAddress, * $imapPort, 0); */ if ($compose_new_win == '1') { compose_Header($color, $mailbox); } else { displayPageHeader($color, $mailbox); } if (isset($AttachFailure)) { plain_error_message(_("Could not move/copy file. File not attached"), $color); } checkInput(true); showInputForm(); /* sqimap_logout($imapConnection); */ } } elseif (isset($html_addr_search_done)) { if ($compose_new_win == '1') { compose_Header($color, $mailbox); } else { displayPageHeader($color, $mailbox); } if (isset($send_to_search) && is_array($send_to_search)) { foreach ($send_to_search as $k => $v) { if (substr($k, 0, 1) == 'T') { if ($send_to) { $send_to .= ', '; } $send_to .= $v; } elseif (substr($k, 0, 1) == 'C') { if ($send_to_cc) { $send_to_cc .= ', '; } $send_to_cc .= $v; } elseif (substr($k, 0, 1) == 'B') { if ($send_to_bcc) { $send_to_bcc .= ', '; } $send_to_bcc .= $v; } } } showInputForm(); } elseif (isset($html_addr_search)) { if (isset($HTTP_POST_FILES['attachfile']) && $HTTP_POST_FILES['attachfile']['tmp_name'] && $HTTP_POST_FILES['attachfile']['tmp_name'] != 'none') { if (saveAttachedFiles()) { plain_error_message(_("Could not move/copy file. File not attached"), $color); } } /* * I am using an include so as to elminiate an extra unnecessary * click. If you can think of a better way, please implement it. */ include_once('./addrbook_search_html.php'); } elseif (isset($attach)) { if (saveAttachedFiles()) { plain_error_message(_("Could not move/copy file. File not attached"), $color); } if ($compose_new_win == '1') { compose_Header($color, $mailbox); } else { displayPageHeader($color, $mailbox); } showInputForm(); } elseif (isset($sigappend)) { $idents = getPref($data_dir, $username, 'identities', 0); if ($idents > 1) { if ($identity == 'default') { $no = 'g'; } else { $no = $identity; } $signature = getSig($data_dir, $username, $no); } $body .= "\n\n".($prefix_sig==true? "-- \n":'').$signature; if ($compose_new_win == '1') { compose_Header($color, $mailbox); } else { displayPageHeader($color, $mailbox); } showInputForm(); } elseif (isset($do_delete)) { if ($compose_new_win == '1') { compose_Header($color, $mailbox); } else { displayPageHeader($color, $mailbox); } $hashed_attachment_dir = getHashedDir($username, $attachment_dir); if (isset($delete) && is_array($delete)) { foreach($delete as $index) { $attached_file = $hashed_attachment_dir . '/' . $attachments[$index]['localfilename']; unlink ($attached_file); unset ($attachments[$index]); } } showInputForm(); } else { /* * This handles the default case as well as the error case * (they had the same code) --> if (isset($smtpErrors)) */ $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); if ($compose_new_win == '1') { compose_Header($color, $mailbox); } else { displayPageHeader($color, $mailbox); } $newmail = true; ClearAttachments(); if (isset($forward_id) && $forward_id && isset($ent_num) && $ent_num) { getAttachments(0); } if (isset($draft_id) && $draft_id && isset($ent_num) && $ent_num) { getAttachments(0); } newMail(); showInputForm(); sqimap_logout($imapConnection); } exit(); /**************** Only function definitions go below *************/ /* This function is used when not sending or adding attachments */ function newMail () { global $forward_id, $imapConnection, $msg, $ent_num, $body_ary, $body, $reply_id, $send_to, $send_to_cc, $mailbox, $send_to_bcc, $editor_size, $draft_id, $use_signature; $send_to = decodeHeader($send_to, false); $send_to_cc = decodeHeader($send_to_cc, false); $send_to_bcc = decodeHeader($send_to_bcc, false); if ($forward_id) { $id = $forward_id; } elseif ($reply_id) { $id = $reply_id; } if ($draft_id){ $id = $draft_id; $use_signature = FALSE; } if (isset($id)) { sqimap_mailbox_select($imapConnection, $mailbox); $message = sqimap_get_message($imapConnection, $id, $mailbox); $orig_header = $message->header; if ($ent_num) { $message = getEntity($message, $ent_num); } if ($message->header->type0 == 'text' || $message->header->type1 == 'message') { if ($ent_num) { $body = decodeBody( mime_fetch_body($imapConnection, $id, $ent_num), $message->header->encoding); } else { $body = decodeBody( mime_fetch_body($imapConnection, $id, 1), $message->header->encoding); } } else { $body = ''; } if ($message->header->type1 == 'html') { $body = strip_tags($body); } sqUnWordWrap($body); $body_ary = explode("\n", $body); $i = count($body_ary) - 1; while ($i >= 0 && ereg("^[>\\s]*$", $body_ary[$i])) { unset($body_ary[$i]); $i --; } $body = ''; for ($i=0; isset($body_ary[$i]); $i++) { if ($reply_id) { if (ereg('^[ >]+', $body_ary[$i])) { $body_ary[$i] = '>' . $body_ary[$i]; } else { $body_ary[$i] = '> ' . $body_ary[$i]; } } if (!$draft_id) { sqWordWrap($body_ary[$i], $editor_size - 1); } $body .= $body_ary[$i] . "\n"; unset($body_ary[$i]); } if ($forward_id) { $bodyTop = '-------- ' . _("Original Message") . " --------\n" . _("Subject") . ': ' . $orig_header->subject . "\n" . _("From") . ': ' . $orig_header->from . "\n" . _("Date") . ': ' . getLongDateString( $orig_header->date ). "\n" . _("To") . ': ' . $orig_header->to[0] . "\n"; if (count($orig_header->to) > 1) { for ($x=1; $x < count($orig_header->to); $x++) { $bodyTop .= ' ' . $orig_header->to[$x] . "\n"; } } $bodyTop .= "\n"; $body = $bodyTop . $body; } elseif ($reply_id) { $orig_from = decodeHeader($orig_header->from, false); $body = getReplyCitation($orig_from) . $body; } return; } if (!$send_to) { $send_to = sqimap_find_email($send_to); } /* This formats a CC string if they hit "reply all" */ if ($send_to_cc != '') { $send_to_cc = ereg_replace('"[^"]*"', '', $send_to_cc); $send_to_cc = str_replace(';', ',', $send_to_cc); $sendcc = explode(',', $send_to_cc); $send_to_cc = ''; for ($i = 0; $i < count($sendcc); $i++) { $sendcc[$i] = trim($sendcc[$i]); if ($sendcc[$i] == '') { continue; } $sendcc[$i] = sqimap_find_email($sendcc[$i]); $whofrom = sqimap_find_displayable_name($msg['HEADER']['FROM']); $whoreplyto = sqimap_find_email($msg['HEADER']['REPLYTO']); if ((strtolower(trim($sendcc[$i])) != strtolower(trim($whofrom))) && (strtolower(trim($sendcc[$i])) != strtolower(trim($whoreplyto))) && (trim($sendcc[$i]) != '')) { $send_to_cc .= trim($sendcc[$i]) . ', '; } } $send_to_cc = trim($send_to_cc); if (substr($send_to_cc, -1) == ',') { $send_to_cc = substr($send_to_cc, 0, strlen($send_to_cc) - 1); } } } /* function newMail() */ function getAttachments($message) { global $mailbox, $attachments, $attachment_dir, $imapConnection, $ent_num, $forward_id, $draft_id, $username; if (isset($draft_id)) { $id = $draft_id; } else { $id = $forward_id; } if (!$message) { sqimap_mailbox_select($imapConnection, $mailbox); $message = sqimap_get_message($imapConnection, $id, $mailbox); } $hashed_attachment_dir = getHashedDir($username, $attachment_dir); if (count($message->entities) == 0) { if ($message->header->entity_id != $ent_num) { $filename = decodeHeader($message->header->filename); if ($filename == "") { $filename = "untitled-".$message->header->entity_id; } $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"; } $newAttachment = array(); $newAttachment['localfilename'] = $localfilename; $newAttachment['remotefilename'] = $filename; $newAttachment['type'] = strtolower($message->header->type0 . '/' . $message->header->type1); /* Write Attachment to file */ $fp = fopen ("$hashed_attachment_dir/$localfilename", 'w'); fputs($fp, decodeBody(mime_fetch_body($imapConnection, $id, $message->header->entity_id), $message->header->encoding)); fclose ($fp); $attachments[] = $newAttachment; } } else { for ($i = 0; $i < count($message->entities); $i++) { getAttachments($message->entities[$i]); } } return; } function showInputForm () { global $send_to, $send_to_cc, $reply_subj, $forward_subj, $body, $passed_body, $color, $use_signature, $signature, $prefix_sig, $editor_size, $attachments, $subject, $newmail, $use_javascript_addr_book, $send_to_bcc, $reply_id, $mailbox, $from_htmladdr_search, $location_of_buttons, $attachment_dir, $username, $data_dir, $identity, $draft_id, $delete_draft, $mailprio, $default_use_mdn, $mdn_user_support, $compose_new_win, $saved_draft, $mail_sent; $subject = decodeHeader($subject, false); $reply_subj = decodeHeader($reply_subj, false); $forward_subj = decodeHeader($forward_subj, false); if ($use_javascript_addr_book) { echo "\n". '' . "\n\n"; } echo "\n" . '
\n"; if (isset($draft_id)) { echo '\n"; } if (isset($delete_draft)) { echo '\n"; } if ($saved_draft == 'yes') { echo '
'. _("Draft Saved").'
'; } if ($mail_sent == 'yes') { echo '
'. _("Your Message has been sent").'
'; } echo '' . "\n"; if ($compose_new_win == '1') { echo ' '."\n"; } if ($location_of_buttons == 'top') { showComposeButtonRow(); } $idents = getPref($data_dir, $username, 'identities', 0); if ($idents > 1) { echo ' ' . "\n" . ' ' . "\n" . ' ' . "\n"; } echo ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n\n"; if ($location_of_buttons == 'between') { showComposeButtonRow(); } echo ' ' . "\n" . ' ' . "\n" . ' ' . "\n"; if ($location_of_buttons == 'bottom') { showComposeButtonRow(); } else { echo ' ' . "\n"; } /* This code is for attachments */ echo ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n"; if (count($attachments)) { $hashed_attachment_dir = getHashedDir($username, $attachment_dir); echo ''; } /* End of attachment code */ echo '
' . "\n" . _("From:") . ' ' . "\n" . '' . "\n" . '
' . "\n" . _("To:") . ' ' . "\n" . '
' . "\n" . '
' . "\n" . _("CC:") . ' ' . "\n" . '
' . "\n" . '
' . "\n" . _("BCC:") . ' ' . "\n" . '
' . "\n" . '
' . "\n" . _("Subject:") . ' ' . "\n"; if ($reply_subj) { $reply_subj = str_replace('"', "'", $reply_subj); $reply_subj = trim($reply_subj); if (substr(strtolower($reply_subj), 0, 3) != 're:') { $reply_subj = 'Re: ' . $reply_subj; } echo ' '; } elseif ($forward_subj) { $forward_subj = trim($forward_subj); if ((substr(strtolower($forward_subj), 0, 4) != 'fwd:') && (substr(strtolower($forward_subj), 0, 5) != '[fwd:') && (substr(strtolower($forward_subj), 0, 6) != '[ fwd:')) { $forward_subj = '[Fwd: ' . $forward_subj . ']'; } echo ' '; } else { echo ' '; } echo '
' . "\n" . '   
' . "\n" . '
'; echo '  
' . "\n" . _("Attach:") . ' ' . "\n" . ' ' . "\n" . '   ' . "\n" . '
' . "\n" . ' ' . ''; foreach ($attachments as $key => $info) { $attached_file = "$hashed_attachment_dir/$info[localfilename]"; echo '\n" . $info['remotefilename'] . ' - ' . $info['type'] . ' (' . show_readable_size(filesize($attached_file)) . ")
\n"; } echo '\n" . '
' . "\n"; if ($reply_id) { echo '\n" . '
'; do_hook('compose_bottom'); echo '' . "\n"; } function showComposeButtonRow() { global $use_javascript_addr_book, $save_as_draft, $default_use_priority, $mailprio, $default_use_mdn, $data_dir, $username; echo " \n\n"; if ($default_use_priority) { if(!isset($mailprio)) { $mailprio = "3"; } echo _("Priority") .': "; } $mdn_user_support=getPref($data_dir, $username, 'mdn_user_support',$default_use_mdn); if ($default_use_mdn) { if ($mdn_user_support) { echo "\n\t". _("Receipt") .': '. ''. _("On read"). ' '. _("On Delivery"); } } echo " \n \n"; echo "\n \n"; if ($use_javascript_addr_book) { echo " \n"; } else { echo " "; } echo "\n \n"; if ($save_as_draft) { echo '\n"; } do_hook('compose_button_row'); echo " \n\n"; } function checkInput ($show) { /* * I implemented the $show variable because the error messages * were getting sent before the page header. So, I check once * using $show=false, and then when i'm ready to display the error * message, show=true */ global $body, $send_to, $subject, $color; if ($send_to == "") { if ($show) { plain_error_message(_("You have not filled in the \"To:\" field."), $color); } return false; } return true; } /* function checkInput() */ /* True if FAILURE */ function saveAttachedFiles() { global $HTTP_POST_FILES, $attachment_dir, $attachments, $username; $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"; } if (!@rename($HTTP_POST_FILES['attachfile']['tmp_name'], $full_localfilename)) { if (!@copy($HTTP_POST_FILES['attachfile']['tmp_name'], $full_localfilename)) { return true; } } $newAttachment['localfilename'] = $localfilename; $newAttachment['remotefilename'] = $HTTP_POST_FILES['attachfile']['name']; $newAttachment['type'] = strtolower($HTTP_POST_FILES['attachfile']['type']); if ($newAttachment['type'] == "") { $newAttachment['type'] = 'application/octet-stream'; } $attachments[] = $newAttachment; } function ClearAttachments() { global $username, $attachments, $attachment_dir; $hashed_attachment_dir = getHashedDir($username, $attachment_dir); foreach ($attachments as $info) { $attached_file = "$hashed_attachment_dir/$info[localfilename]"; if (file_exists($attached_file)) { unlink($attached_file); } } $attachments = array(); } function getReplyCitation($orig_from) { global $reply_citation_style, $reply_citation_start, $reply_citation_end; /* First, return an empty string when no citation style selected. */ if (($reply_citation_style == '') || ($reply_citation_style == 'none')) { return ''; } /* Decode the users name. */ $parpos = strpos($orig_from, '('); if ($parpos === false) { $orig_from = trim(substr($orig_from, 0, strpos($orig_from, '<'))); $orig_from = str_replace('"', '', $orig_from); $orig_from = str_replace("'", '', $orig_from); } else { $end_parpos = strrpos($orig_from, ')'); $end_parpos -= ($end_parpos === false ? $end_parpos : $parpos + 1); $orig_from = trim(substr($orig_from, $parpos + 1, $end_parpos)); } /* Make sure our final value isn't an empty string. */ if ($orig_from == '') { return ''; } /* Otherwise, try to select the desired citation style. */ switch ($reply_citation_style) { case 'author_said': $start = ''; $end = ' ' . _("said") . ':'; break; case 'quote_who': $start = '<' . _("quote") . ' ' . _("who") . '="'; $end = '">'; break; case 'user-defined': $start = $reply_citation_start; $end = $reply_citation_end; break; default: return ''; } /* Build and return the citation string. */ return ($start . $orig_from . $end . "\n"); } ?>