* Copyright 2001 Olivier Cahagne * Copyright 2008-2011 Tim Gerundt * * This file is part of NOCC. NOCC is free software under the terms of the * GNU General Public License. You should have received a copy of the license * along with NOCC. If not, see . * * @package NOCC * @license http://www.gnu.org/licenses/ GNU General Public License * @version SVN: $Id: send.php 3062 2023-03-06 11:07:35Z oheil $ */ require_once './common.php'; $mail_from = get_default_from_address(); if( ( isset($conf->domains[$_SESSION['nocc_domainnum']]->allow_address_change) && $conf->domains[$_SESSION['nocc_domainnum']]->allow_address_change ) || ( ! isset($conf->domains[$_SESSION['nocc_domainnum']]->allow_address_change) && $conf->allow_address_change ) ) { $mail_from = NOCC_Request::getStringValue('mail_from'); } $mail_to = NOCC_Request::getStringValue('mail_to'); $mail_cc = NOCC_Request::getStringValue('mail_cc'); $mail_bcc = NOCC_Request::getStringValue('mail_bcc'); $mail_subject = NOCC_Request::getStringValue('mail_subject'); $mail_body = NOCC_Request::getStringValue('mail_body'); if( strlen(NOCC_Request::getStringValue('nocc_attach_array'))>0 ) { $mail_att=unserialize(base64_decode(NOCC_Request::getStringValue('nocc_attach_array'))); if( ! is_array($mail_att) ) { unset($mail_att); } } $mail_receipt = isset($_REQUEST['receipt']); $mail_priority = NOCC_Request::getStringValue('priority'); $domainnum=NOCC_Request::getStringValue('saved_domainnum'); $send_backup=array(); $send_backup['nocc_domainnum']=$domainnum; $send_backup['mail_from']=$mail_from; $send_backup['mail_to']=$mail_to; $send_backup['mail_cc']=$mail_cc; $send_backup['mail_bcc']=$mail_bcc; $send_backup['mail_subject']=$mail_subject; $send_backup['mail_body']=$mail_body; if( isset($mail_att) ) { $send_backup['mail_att']=$mail_att; } $send_backup['mail_receipt']=$mail_receipt; $send_backup['mail_priority']=$mail_priority; $_SESSION['send_backup']=$send_backup; if (!isset($_SESSION['nocc_loggedin'])) { require_once './utils/proxy.php'; header('Location: ' . $conf->base_url . 'logout.php?'.NOCC_Session::getUrlGetSession()); return; } if ($_SERVER['REQUEST_METHOD'] != 'POST') { clear_attachments(); require_once './utils/proxy.php'; header('Location: ' . $conf->base_url . 'action.php?'.NOCC_Session::getUrlGetSession()); return; } require_once './classes/class_send.php'; require_once './classes/class_smtp.php'; if (ini_get("file_uploads")) { if (isset($_FILES['mail_att'])) { $mail_att = $_FILES['mail_att']; } } if (NOCC_Session::getSendHtmlMail()) { $mail_body = ''.$mail_body.''; } switch ($_REQUEST['sendaction']) { case unhtmlentities($html_attach): // Counting the attachments number in the array if (!isset($_SESSION['nocc_attach_array'])) $_SESSION['nocc_attach_array'] = array(); $attach_array = $_SESSION['nocc_attach_array']; //TODO: Check if "$conf->tmpdir" exists? $tmpFile = $conf->tmpdir.'/'.basename($mail_att['tmp_name'].md5(uniqid(rand(),true)).'.att'); // Adding the new file to the array if (@move_uploaded_file($mail_att['tmp_name'], $tmpFile)) { $attachedFile = new NOCC_AttachedFile($tmpFile, basename($mail_att['name']), $mail_att['size'], $mail_att['type']); $attach_array[] = $attachedFile; } else { $ev = new NoccException($html_file_upload_attack); require './html/header.php'; require './html/error.php'; require './html/footer.php'; break; } // Registering the attachments array into the session $_SESSION['nocc_attach_array'] = $attach_array; $_SESSION['send_backup']['mail_att']=$attach_array; // Displaying the sending form with the new attachments array //header("Content-type: text/html; Charset=UTF-8"); require './html/header.php'; require './html/menu_inbox.php'; require './html/send.php'; require './html/menu_inbox.php'; require './html/footer.php'; break; case unhtmlentities($html_cancel): $mail_to=""; $mail_cc=""; $mail_bcc=""; $mail_subject=""; $mail_body=""; $mail_receipt=""; $mail_priority=""; if( isset($_SESSION['send_backup']) && $_SESSION['nocc_domainnum']==$_SESSION['send_backup']['nocc_domainnum'] ) { unset($_SESSION['send_backup']); } clear_attachments(); require_once './utils/proxy.php'; header('Location: ' . $conf->base_url . 'action.php?'.NOCC_Session::getUrlGetSession()); //require './html/header.php'; //require './html/menu_inbox.php'; //require './html/send.php'; //require './html/menu_inbox.php'; //require './html/footer.php'; break; case unhtmlentities($html_send): $mail = new mime_mail(); $mail->crlf = $conf->crlf; $mail->smtp_server = $_SESSION['nocc_smtp_server']; $mail->smtp_port = $_SESSION['nocc_smtp_port']; //TODO: No nice to use $mail->from as temp variable! $mail->from = cut_address(trim($mail_from), 'UTF-8'); $mail->from = $mail->from[0]; $mail->priority = $_REQUEST['priority']; $mail->receipt = isset($_REQUEST['receipt']); $mail->headers = ''; if (!empty($_REQUEST['mail_messageid'])) { $mail->headers .= 'References: ' . urldecode($_REQUEST['mail_messageid']) . $mail->crlf; $mail->headers .= 'In-Reply-To: ' . urldecode($_REQUEST['mail_messageid']) . $mail->crlf; } $mail->headers .= 'User-Agent: ' . $conf->nocc_name . ' <' . $conf->nocc_url . '>'; $mail->to = cut_address(trim($mail_to), 'UTF-8'); $mail->cc = cut_address(trim($mail_cc), 'UTF-8'); $mail->bcc = cut_address(trim($mail_bcc), 'UTF-8'); $user_prefs = NOCC_Session::getUserPrefs(); if ($user_prefs->getBccSelf()) { array_unshift($mail->bcc, $mail->from); } if( $user_prefs->getCollect()==1 || $user_prefs->getCollect()==3 ) { require_once './classes/nocc_contacts.php'; $path = $conf->prefs_dir . '/' . preg_replace("/(\\\|\/)/","_",NOCC_Session::getUserKey()) . '.contacts'; $contacts_object=new NOCC_Contacts(); $all_to=$mail_to.";".$mail_cc.";".$mail_bcc; $contacts=$contacts_object->add_contact($path,$all_to); if( count($contacts) <=$conf->contact_number_max ) { $contacts_object->saveList($path,$contacts,$conf,$ev); } //ignore exception as emails should be send anyways } if ($mail_subject != '') { $mail_subject = trim($mail_subject); $mail->subject = '=?UTF-8?B?' . base64_encode($mail_subject) . '?='; } // Append advertisement tag, if set // Wrap outgoing message if needed $wrap_msg = $user_prefs->getWrapMessages(); if ($mail_body != '') { if ($wrap_msg) $mail->body = wrap_outgoing_msg($mail_body, $wrap_msg, $mail->crlf); else $mail->body = $mail_body; } if( isset($conf->ad) ) { $ad=$conf->ad; $crlf=$mail->crlf; if( $user_prefs->getSendHtmlMail() ) { $crlf="
"; $ad=preg_replace("/\r\n/","\n",$ad); $ad=preg_replace("/\r/","\n",$ad); $ad=preg_replace("/\n/",$crlf,$ad); } if ($mail_body != '') { $mail->body = $mail->body . $crlf . $crlf . $ad; } else { $mail->body = $ad; } } // Handle dots for SMTP protocol $mail->body = escape_dots($mail->body); // Getting the attachments if (isset($_SESSION['nocc_attach_array'])) { $attach_array = $_SESSION['nocc_attach_array']; for ($i = 0; $i < count($attach_array); $i++) { $attachedFile = $attach_array[$i]; // If the temporary file exists, attach it if ($attachedFile->exists()) { $content = $attachedFile->getContent(); // add it to the message, by default it is encoded in base64 $mail->add_attachment($content, quoted_printable_decode($attachedFile->getName()), $attachedFile->getMimeType(), 'base64', ''); } } } // Add original message as attachment? if (isset($_REQUEST['forward_msgnum']) && $_REQUEST['forward_msgnum'] != "") { try { $pop = new nocc_imap(); } catch (Exception $ex) { //TODO: Show error without NoccException! $ev = new NoccException($ex->getMessage()); require './html/header.php'; require './html/error.php'; require './html/footer.php'; break; } $mail_list = explode('$', $_REQUEST['forward_msgnum']); for ($msg_num = 0; $msg_num < count($mail_list); $msg_num++) { $forward_msgnum = $mail_list[$msg_num]; $origmsg = $pop->fetchmessage($forward_msgnum); // Attach it //TODO: Move filename to a own variable! if (count($mail_list) == 1) { $mail->add_attachment($origmsg, 'orig_msg.eml', 'message/rfc822', '', ''); } else { $mail->add_attachment($origmsg, 'orig_msg_'.$msg_num.'.eml', 'message/rfc822', '', ''); } } } if (!isset ($_SESSION['last_send'])) { $ev = $mail->send($conf); $_SESSION['last_send'] = time(); } else if ($_SESSION['last_send'] + $conf->send_delay < time()) { $ev = $mail->send($conf); $_SESSION['last_send'] = time(); } else { $ev = new NoccException(i18n_message($lang_err_send_delay, $conf->send_delay)); } header("Content-type: text/html; Charset=UTF-8"); if (NoccException::isException($ev)) { // Error while sending the message, display an error message require './html/header.php'; require './html/menu_inbox.php'; require './html/send_error.php'; require './html/menu_inbox.php'; require './html/footer.php'; } else { if (isset($_SESSION['nocc_attach_array'])) { $attach_array = $_SESSION['nocc_attach_array']; for ($i = 0; $i < count($attach_array); $i++) { $attachedFile = $attach_array[$i]; if ($attachedFile->exists()) { $attachedFile->delete(); } } } if( isset($_SESSION['send_backup']) && $_SESSION['nocc_domainnum']==$_SESSION['send_backup']['nocc_domainnum'] ) { unset($_SESSION['send_backup']); } clear_attachments(); // Redirect user to inbox require_once './utils/proxy.php'; header("Location: ".$conf->base_url."action.php?successfulsend=true&".NOCC_Session::getUrlGetSession()); } break; case unhtmlentities($html_attach_delete): // Rebuilding the attachments array with only the files the user wants to keep $tmp_array = array(); $attach_array = $_SESSION['nocc_attach_array']; for ($i = 0; $i < count($attach_array); $i++) { $attachedFile = $attach_array[$i]; if (!isset($_REQUEST['file-'.$i])) { $tmp_array[] = $attachedFile; } else { $attachedFile->delete(); } } // Registering the new attachments array into the session $_SESSION['nocc_attach_array'] = $tmp_array; $_SESSION['send_backup']['mail_att']=$attach_array; // Displaying the sending form with the new attachment array header("Content-type: text/html; Charset=UTF-8"); require './html/header.php'; require './html/menu_inbox.php'; require './html/send.php'; require './html/menu_inbox.php'; require './html/footer.php'; break; default: // Nothing was set in the sendaction (e.g. no javascript enabled) header("Content-type: text/html; Charset=UTF-8"); $ev = new NoccException($html_no_sendaction); require './html/header.php'; require './html/menu_inbox.php'; require './html/send_error.php'; require './html/menu_inbox.php'; require './html/footer.php'; break; }