function cw_parse_mail($msgs, $level = 0)
{
    if (empty($msgs)) {
        return false;
    }
    $lend = CW_IS_OS_WINDOWS ? "\r\n" : "\n";
    $head = "";
    $msg = "";
    # Subarray
    if (is_array($msgs['content'])) {
        # Subarray is full
        if (count($msgs['content']) > 1) {
            $boundary = substr(uniqid(time() + rand() . "_"), 0, 16);
            $msgs['header']['Content-Type'] .= ";{$lend}\t boundary=\"{$boundary}\"";
            foreach ($msgs['header'] as $k => $v) {
                $head .= $k . ": " . $v . $lend;
            }
            if ($level > 0) {
                $msg = $head . $lend;
            }
            for ($x = 0; $x < count($msgs['content']); $x++) {
                $res = cw_parse_mail($msgs['content'][$x], $level + 1);
                $msg .= "--" . $boundary . $lend . $res[1] . $lend;
            }
            $msg .= "--" . $boundary . "--" . $lend;
        } else {
            # Subarray have only one element
            list($msgs['header'], $msgs['content']) = cw_parse_mail($msgs['content'][0], $level);
        }
    }
    # Current array - atom
    if (!is_array($msgs['content'])) {
        if (is_array($msgs['header'])) {
            foreach ($msgs['header'] as $k => $v) {
                $head .= $k . ": " . $v . $lend;
            }
        }
        if ($level > 0) {
            $msg = $head . $lend;
        }
        $msg .= $msgs['content'] . $lend;
    }
    # Header substitute
    if (empty($head)) {
        if (is_array($msgs['header'])) {
            foreach ($msgs['header'] as $k => $v) {
                $head .= $k . ": " . $v . $lend;
            }
        } else {
            $head = $msgs['header'];
        }
    }
    return array($head, $msg);
}
     $paths = explode(",", $mail['files']);
     if (is_array($paths)) {
         foreach ($paths as $path) {
             if ($path && file_exists($path)) {
                 $ext = end(explode(".", basename($path)));
                 $files[] = array('type' => cw_attach_get_content_type($ext), 'name' => basename($path), 'data' => file_get_contents($path));
             }
         }
     }
 }
 if (!empty($files)) {
     foreach ($files as $v) {
         $msgs['content'][] = array("header" => array("Content-Type" => "{$v['type']};{$lend}\tname=\"{$v['name']}\"", "Content-Transfer-Encoding" => "base64", "Content-Disposition" => "attachment", "Content-ID" => "<{$v['name']}>"), "content" => chunk_split(base64_encode($v['data'])));
     }
 }
 list($message_header, $mail_message) = cw_parse_mail($msgs);
 $mail_from = $from;
 if ($config['Email']['use_base64_headers'] == "Y") {
     $mail_subject = cw_mail_quote($mail_subject, $charset);
 }
 $headers = "From: " . $mail_from . $lend . "X-Mailer: PHP/" . phpversion() . $lend . "MIME-Version: 1.0" . $lend . $message_header;
 if (trim($mail_from) != "") {
     $headers .= 'Reply-to: ' . $mail_from . $lend;
 }
 $mail_result = false;
 if ($config['Email']['use_smtp'] == "Y") {
     $mail_data = array('from' => $mail_from, 'send_to' => $to, 'subject' => $mail_subject, 'body' => $orig_mail_message, 'alt_body' => $plain_mail_message);
     $mail_result = cw_smtp_send_mail($mail_data, $config['Email']['smtp_debug_enabled'] == 'Y' ? 2 : 0);
     cw_log_add('phpmailer_sent', $mail_data);
 } else {
     if (preg_match('/([^ @,;<>]+@[^ @,;<>]+)/S', $from, $m)) {