function create_message(&$headers, &$message, &$attachments, $for_draft = false, $via_smtp = false) { $to = str_replace(";", ",", $_POST["to"]); $cc = str_replace(";", ",", $_POST["cc"]); $bcc = str_replace(";", ",", $_POST["bcc"]); $subject = $_POST["subject"]; $message = $_POST["message"]; $mailcwp_session = mailcwp_get_session(); if (!isset($mailcwp_session) || empty($mailcwp_session)) { return; } $account = $mailcwp_session["account"]; $from = "{$account['name']} <{$account['email']}>"; $mbox_name = "{$account['host']}:{$account['port']}"; $use_ssl = $account["use_ssl"]; $validate_cert = $account["validate_cert"]; $username = $account["username"]; $password = $account["password"]; $use_tls = $account["use_tls"]; $folder = $mailcwp_session["folder"]; $unique_id = $_POST["unique_id"]; $original = isset($_POST["original"]) ? $_POST["original"] : -1; $use_ssl_flag = $use_ssl === "true" ? "/ssl" : ""; $validate_cert_flag = $validate_cert === "true" ? "" : "/novalidate-cert"; $use_tls_flag = $use_tls === "true" ? "/tls" : ""; if ($original > 0) { $mbox = mailcwp_imap_connect($account, 0, $folder); $mail_message = new MailMessage($mbox, $original); $forward_attachments = $mail_message->getAttachments(); } else { $forward_attachments = array(); } $timezone = null; if (array_key_exists("timezone", $account)) { $tz_name = $account["timezone"]; if (!empty($tz_name)) { $timezone = new DateTimeZone($tz_name); } } $now = new DateTime(); if (isset($timezone)) { $now->setTimeZone($timezone); } $headers = "From: {$from}\r\n" . "Date: " . $now->format("D, d-M-Y H:i:s O") . "\r\n" . "Reply-To: {$from}\r\n" . "X-Mailer: MailCWP " . MAILCWP_VERSION . "\r\n"; if ($for_draft) { $headers .= "To: {$to}\r\n" . "Subject: {$subject}\r\n"; } if (!empty($cc)) { $headers .= "Cc: {$cc}\r\n"; } if (!empty($bcc)) { $headers .= "Bcc: {$bcc}\r\n"; } //This test for the composer is a workaround //This logic must be refactored to correctly handle plain text/html //composing and sending $plugin_base_path = plugin_dir_path(__FILE__) . "../"; $composer_installed = file_exists($plugin_base_path . "mailcwp-composer"); if ($composer_installed) { if (strpos($message, "<p>") === FALSE) { $message = nl2br($message); //, htmlspecialchars($message, ENT_COMPAT, "UTF-8", false)); } } $plain_text_message = preg_replace("/<br[^>]*[\\/]{0,1}>/i", "\n", $message); $plain_text_message = preg_replace("/<\\/li>/i", "\n", $plain_text_message); $plain_text_message = preg_replace("/<p[^>]*[\\/]{0,1}>/i", "\n\n", $plain_text_message); $plain_text_message = preg_replace("/<\\/[ou]l>/i", "\n", $plain_text_message); $plain_text_message = html_entity_decode($plain_text_message); $plain_text_message = strip_tags($plain_text_message); $upload_dir = wp_upload_dir(); $mailcwp_upload_dir = "{$upload_dir['basedir']}/mailcwp/uploads"; $uploaded_files = glob("{$mailcwp_upload_dir}/{$unique_id}-*"); if ($via_smtp) { $attachments = array(); if (is_array($uploaded_files)) { foreach ($uploaded_files as $uploaded_file) { $attachments[] = $uploaded_file; } } } else { if (is_array($uploaded_files) && count($uploaded_files) > 0 || !empty($forward_attachments)) { $part2["type"] = TYPETEXT; $part2["subtype"] = "html"; $part2["contents.data"] = $message; $boundary = "------=" . md5(uniqid(rand())); $headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\n"; $message = "\r\n\r\n--{$boundary}\r\nContent-Type: text/html; charset=\"ISO-8859-1\"\r\nContent-Transfer-Encoding: 8bit \r\n\r\n\r\n" . stripslashes($message); //process attachments //find files //if files found, read each one and generate attachment string if (is_array($uploaded_files)) { foreach ($uploaded_files as $uploaded_file) { $basename = substr(basename($uploaded_file), strlen($unique_id) + 1); $message .= "\r\n\r\n"; $message .= "--{$boundary}\r\n"; $message .= "Content-Transfer-Encoding: base64\r\n"; $message .= "Content-Disposition: attachment; filename=\"{$basename}\"\r\n"; $message .= "\r\n" . chunk_split(base64_encode(file_get_contents($uploaded_file))) . "\r\n"; unlink($uploaded_file); } } if (!empty($forward_attachments)) { foreach ($forward_attachments as $forward_filename => $forward_data) { $message .= "\r\n\r\n"; $message .= "--{$boundary}\r\n"; $message .= "Content-Transfer-Encoding: base64\r\n"; $message .= "Content-Disposition: attachment; filename=\"{$forward_filename}\"\r\n"; $message .= "\r\n" . chunk_split(base64_encode($forward_data)) . "\r\n"; } } $message .= "\r\n\r\n\r\n--{$boundary}--\r\n\r\n"; } else { $boundary = "------=" . md5(uniqid(rand())); $headers .= "Content-Type: multipart/alternative; boundary=\"{$boundary}\"\r\n"; $message = "\r\n\r\n--{$boundary}\r\nContent-Type: text/plain;\r\n\tcharset=\"ISO-8859-1\"\r\nContent-Transfer-Encoding: 8bit \r\n\r\n\r\n" . stripslashes($plain_text_message) . "\r\n\r\n--{$boundary}\r\nContent-Type: text/html;\r\n\tcharset=\"ISO-8859-1\"\r\nContent-Transfer-Encoding: 8bit \r\n\r\n\r\n" . stripslashes($message); $message .= "\r\n\r\n\r\n--{$boundary}--\r\n\r\n"; } } return true; }
$use_tls = $download_data[5]; $folder = $download_data[6]; $msg_number = (int) $download_data[7]; $attachment_name = $download_data[8]; imap_timeout(15, IMAP_OPENTIMEOUT); imap_timeout(15, IMAP_READTIMEOUT); imap_timeout(15, IMAP_WRITETIMEOUT); imap_timeout(15, IMAP_CLOSETIMEOUT); $use_ssl_flag = $use_ssl == "true" ? "/ssl" : ""; $validate_cert_flag = $validate_cert == "true" ? "" : "/novalidate-cert"; $use_tls_flag = $use_tls == "true" ? "/tls" : ""; $mbox = imap_open("{" . $mbox_name . $use_ssl_flag . $validate_cert_flag . $use_tls_flag . "}{$folder}", $username, $password); //print_r(imap_errors()); $message = new MailMessage($mbox, $msg_number); //print_r($message); $attachments = $message->getAttachments(); //print_r($attachments); $download_data = null; if ($attachment_name == '*') { if (class_exists("ZipArchive")) { $attachment_name = "{$download_dir}/attachments-{$msg_number}.zip"; $zip = new ZipArchive(); $zip->open($attachment_name, ZipArchive::CREATE); foreach ($attachments as $filename => $data) { $zip->addFromString($filename, $data); } $zip->close(); $download_data = file_get_contents($attachment_name); unlink($attachment_name); } else { //attempt shell out to zip