Пример #1
0
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;
}
Пример #2
0
$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