Example #1
0
 public function ham(&$uids, $mbox)
 {
     $rcmail = rcube::get_instance();
     $storage = $rcmail->storage;
     $new_uids = array();
     foreach ($uids as $uid) {
         $saved = false;
         $message = new rcube_message($uid);
         if (sizeof($message->attachments) > 0) {
             foreach ($message->attachments as $part) {
                 if ($part->ctype_primary == 'message' && $part->ctype_secondary == 'rfc822' && $part->ctype_parameters['x-spam-type'] == 'original') {
                     $orig_message_raw = $message->get_part_body($part->mime_id);
                     $saved = $storage->save_message($mbox, $orig_message_raw);
                     if ($saved !== false) {
                         $rcmail->output->command('rcmail_markasjunk2_move', null, $uid);
                         array_push($new_uids, $saved);
                     }
                 }
             }
         }
     }
     if (sizeof($new_uids) > 0) {
         $uids = $new_uids;
     }
 }
Example #2
0
 /**
  * Read email message and return contents for a new event based on that message
  */
 public function mail_message2event()
 {
     $uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
     $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
     $event = array();
     // establish imap connection
     $imap = $this->rc->get_storage();
     $imap->set_mailbox($mbox);
     $message = new rcube_message($uid);
     if ($message->headers) {
         $event['title'] = trim($message->subject);
         $event['description'] = trim($message->first_text_part());
         $this->load_driver();
         // add a reference to the email message
         if ($msgref = $this->driver->get_message_reference($message->headers, $mbox)) {
             $event['links'] = array($msgref);
         } else {
             if ($message->attachments) {
                 $eventid = 'cal-';
                 if (!is_array($_SESSION[self::SESSION_KEY]) || $_SESSION[self::SESSION_KEY]['id'] != $eventid) {
                     $_SESSION[self::SESSION_KEY] = array();
                     $_SESSION[self::SESSION_KEY]['id'] = $eventid;
                     $_SESSION[self::SESSION_KEY]['attachments'] = array();
                 }
                 foreach ((array) $message->attachments as $part) {
                     $attachment = array('data' => $imap->get_message_part($uid, $part->mime_id, $part), 'size' => $part->size, 'name' => $part->filename, 'mimetype' => $part->mimetype, 'group' => $eventid);
                     $attachment = $this->rc->plugins->exec_hook('attachment_save', $attachment);
                     if ($attachment['status'] && !$attachment['abort']) {
                         $id = $attachment['id'];
                         $attachment['classname'] = rcube_utils::file2class($attachment['mimetype'], $attachment['name']);
                         // store new attachment in session
                         unset($attachment['status'], $attachment['abort'], $attachment['data']);
                         $_SESSION[self::SESSION_KEY]['attachments'][$id] = $attachment;
                         $attachment['id'] = 'rcmfile' . $attachment['id'];
                         // add prefix to consider it 'new'
                         $event['attachments'][] = $attachment;
                     }
                 }
             }
         }
         $this->rc->output->command('plugin.mail2event_dialog', $event);
     } else {
         $this->rc->output->command('display_message', $this->gettext('messageopenerror'), 'error');
     }
     $this->rc->output->send();
 }
Example #3
0
 /**
  * Handler for keys/certs import request action
  */
 function import_file()
 {
     $uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
     $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
     $mime_id = rcube_utils::get_input_value('_part', rcube_utils::INPUT_POST);
     $storage = $this->rc->get_storage();
     $engine = $this->enigma->load_engine();
     if ($uid && $mime_id) {
         // Note: we get the attachment body via rcube_message class
         // to support keys inside encrypted messages (#5285)
         $message = new rcube_message($uid, $mbox);
         // Check if we don't need to ask for password again
         foreach ($engine->decryptions as $status) {
             if ($status instanceof enigma_error) {
                 if ($status->getCode() == enigma_error::BADPASS) {
                     $this->password_prompt($status, array('input_uid' => $uid, 'input_mbox' => $mbox, 'input_part' => $mime_id, 'input_task' => 'mail', 'input_action' => 'plugin.enigmaimport', 'action' => '?', 'iframe' => true));
                     $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
                     return;
                 }
             }
         }
         if ($engine->is_keys_part($message->mime_parts[$mime_id])) {
             $part = $message->get_part_body($mime_id);
         }
     }
     if ($part && is_array($result = $engine->import_key($part))) {
         $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation', array('new' => $result['imported'], 'old' => $result['unchanged']));
     } else {
         $this->rc->output->show_message('enigma.keysimportfailed', 'error');
     }
     $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
 }
Example #4
0
 private function archive($uids, $verbose = true)
 {
     global $E_SESSION;
     $rcmail = rcmail::get_instance();
     $path = getcwd();
     chdir(str_replace(array('/modules/CRM/Roundcube/RC', '\\modules\\CRM\\Roundcube\\RC'), '', $path));
     $msgs = array();
     if (!is_array($uids)) {
         $uids = $uids->get();
     }
     foreach ($uids as $uid) {
         $msg = new rcube_message($uid);
         if ($msg === null || empty($msg->headers)) {
             if ($verbose) {
                 $rcmail->output->command('display_message', 'messageopenerror', 'error');
             }
             return false;
         } else {
             $msgs[$uid] = $msg;
         }
     }
     $map = array();
     foreach ($msgs as $k => $msg) {
         $sends = $rcmail->storage->decode_address_list($msg->headers->to);
         $map[$k] = array();
         foreach ($sends as $send) {
             $addr = $send['mailto'];
             $ret = $this->look_contact($addr);
             $map[$k] = array_merge($map[$k], $ret);
         }
         $addr = $rcmail->storage->decode_address_list($msg->headers->from);
         if ($addr) {
             $addr = array_shift($addr);
         }
         if (!isset($addr['mailto']) || !$addr['mailto']) {
             $map[$k] = false;
             continue;
         }
         $ret = $this->look_contact($addr['mailto']);
         $map[$k] = array_merge($map[$k], $ret);
     }
     if (!isset($_SESSION['force_archive'])) {
         $_SESSION['force_archive'] = array();
     }
     foreach ($map as $k => $ret) {
         if (!$ret && !isset($_SESSION['force_archive'][$k]) && $verbose) {
             $_SESSION['force_archive'][$k] = 1;
             $rcmail->output->command('display_message', $this->gettext('contactnotfound'), 'error');
             return false;
         }
     }
     $attachments_dir = DATA_DIR . '/CRM_Roundcube/attachments/';
     $epesi_mails = array();
     if (!file_exists($attachments_dir)) {
         mkdir($attachments_dir);
     }
     foreach ($msgs as $k => $msg) {
         $contacts = $map[$k];
         $mime_map = array();
         foreach ($msg->mime_parts as $mid => $m) {
             $mime_map[$m->mime_id] = md5($k . microtime(true) . $mid);
         }
         if ($msg->has_html_part()) {
             //            $body = $msg->first_html_part();
             foreach ($msg->mime_parts as $mime_id => $part) {
                 $mimetype = strtolower($part->ctype_primary . '/' . $part->ctype_secondary);
                 if ($mimetype == 'text/html') {
                     $body = $rcmail->storage->get_message_part($msg->uid, $mime_id, $part);
                     if (isset($part->replaces)) {
                         $cid_map = $part->replaces;
                     } else {
                         $cid_map = array();
                     }
                     break;
                 }
             }
             foreach ($cid_map as $k => &$v) {
                 if (preg_match('/_part=(.*?)&/', $v, $matches)) {
                     $mid = $matches[1];
                     if (isset($mime_map[$mid])) {
                         $v = 'get.php?' . http_build_query(array('mail_id' => '__MAIL_ID__', 'mime_id' => $mime_map[$mid]));
                     }
                 } else {
                     unset($cid_map[$k]);
                 }
             }
             $body = rcmail_wash_html($body, array('safe' => true, 'inline_html' => true), $cid_map);
         } else {
             $body = '<pre>' . $msg->first_text_part() . '</pre>';
         }
         $date = rcube_imap_generic::strToTime($msg->get_header('DATE'));
         $headers = array();
         foreach ($msg->headers as $k => $v) {
             if (is_string($v) && $k != 'from' && $k != 'to' && $k != 'body_structure') {
                 $headers[] = $k . ': ' . rcube_mime::decode_mime_string((string) $v);
             }
         }
         $message_id = str_replace(array('<', '>'), '', $msg->get_header('MESSAGE-ID'));
         if (Utils_RecordBrowserCommon::get_records_count('rc_mails', array('message_id' => $message_id)) > 0) {
             $rcmail->output->command('display_message', $this->gettext('archived_duplicate'), 'warning');
             return false;
         }
         $employee = DB::GetOne('SELECT id FROM contact_data_1 WHERE active=1 AND f_login=%d', array($E_SESSION['user']));
         $data = array('message_id' => $message_id, 'references' => $msg->get_header('REFERENCES'), 'contacts' => $contacts, 'date' => $date, 'subject' => substr($msg->subject, 0, 256), 'body' => $body, 'headers_data' => implode("\n", $headers), 'from' => $rcmail->storage->decode_header($msg->headers->from), 'to' => $rcmail->storage->decode_header($msg->headers->to), 'employee' => $employee);
         $id = Utils_RecordBrowserCommon::new_record('rc_mails', $data);
         $epesi_mails[] = $id;
         foreach ($contacts as $c) {
             list($rs, $con_id) = explode(':', $c);
             if ($rs == 'P') {
                 Utils_WatchdogCommon::new_event('contact', $con_id, 'N_New mail');
             } else {
                 Utils_WatchdogCommon::new_event('company', $con_id, 'N_New mail');
             }
         }
         Utils_WatchdogCommon::new_event('contact', $employee, 'N_New mail');
         /*DB::Execute('INSERT INTO rc_mails_data_1(created_on,created_by,f_contacts,f_date,f_employee,f_subject,f_body,f_headers_data,f_direction) VALUES(%T,%d,%s,%T,%d,%s,%s,%s,%b)',array(
                       time(),$E_SESSION['user'],$contacts,$date,$employee,substr($msg->subject,0,256),$body,implode("\n",$headers),$sent_mbox));
           $id = DB::Insert_ID('rc_mails_data_1','id');*/
         foreach ($msg->mime_parts as $mid => $m) {
             if (!$m->disposition) {
                 continue;
             }
             if (isset($cid_map['cid:' . $m->content_id])) {
                 $attachment = 0;
             } else {
                 $attachment = 1;
             }
             DB::Execute('INSERT INTO rc_mails_attachments(mail_id,type,name,mime_id,attachment) VALUES(%d,%s,%s,%s,%b)', array($id, $m->mimetype, $m->filename, $mime_map[$m->mime_id], $attachment));
             if (!file_exists($attachments_dir . $id)) {
                 mkdir($attachments_dir . $id);
             }
             $fp = fopen($attachments_dir . $id . '/' . $mime_map[$m->mime_id], 'w');
             $msg->get_part_content($m->mime_id, $fp);
             fclose($fp);
         }
     }
     //$rcmail->output->command('delete_messages');
     $E_SESSION['rc_mails_cp'] = $epesi_mails;
     chdir($path);
     return true;
 }
 /**
  * Handler for request action
  */
 function save_vcard()
 {
     $this->add_texts('localization', true);
     $uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
     $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
     $mime_id = rcube_utils::get_input_value('_part', rcube_utils::INPUT_POST);
     $rcmail = rcmail::get_instance();
     $message = new rcube_message($uid, $mbox);
     if ($uid && $mime_id) {
         list($mime_id, $index) = explode(':', $mime_id);
         $part = $message->get_part_content($mime_id, null, true);
     }
     $error_msg = $this->gettext('vcardsavefailed');
     if ($part && ($vcards = rcube_vcard::import($part)) && ($vcard = $vcards[$index]) && $vcard->displayname && $vcard->email) {
         $CONTACTS = $this->get_address_book();
         $email = $vcard->email[0];
         $contact = $vcard->get_assoc();
         $valid = true;
         // skip entries without an e-mail address or invalid
         if (empty($email) || !$CONTACTS->validate($contact, true)) {
             $valid = false;
         } else {
             // We're using UTF8 internally
             $email = rcube_utils::idn_to_utf8($email);
             // compare e-mail address
             $existing = $CONTACTS->search('email', $email, 1, false);
             // compare display name
             if (!$existing->count && $vcard->displayname) {
                 $existing = $CONTACTS->search('name', $vcard->displayname, 1, false);
             }
             if ($existing->count) {
                 $rcmail->output->command('display_message', $this->gettext('contactexists'), 'warning');
                 $valid = false;
             }
         }
         if ($valid) {
             $plugin = $rcmail->plugins->exec_hook('contact_create', array('record' => $contact, 'source' => null));
             $contact = $plugin['record'];
             if (!$plugin['abort'] && $CONTACTS->insert($contact)) {
                 $rcmail->output->command('display_message', $this->gettext('addedsuccessfully'), 'confirmation');
             } else {
                 $rcmail->output->command('display_message', $error_msg, 'error');
             }
         }
     } else {
         $rcmail->output->command('display_message', $error_msg, 'error');
     }
     $rcmail->output->send();
 }
Example #6
0
 /**
  * Handler for attachment download action
  */
 public function download_attachments()
 {
     $rcmail = rcmail::get_instance();
     $imap = $rcmail->get_storage();
     $temp_dir = $rcmail->config->get('temp_dir');
     $tmpfname = tempnam($temp_dir, 'zipdownload');
     $tempfiles = array($tmpfname);
     $message = new rcube_message(rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GET));
     // open zip file
     $zip = new ZipArchive();
     $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);
     foreach ($message->attachments as $part) {
         $pid = $part->mime_id;
         $part = $message->mime_parts[$pid];
         $filename = $part->filename;
         if ($filename === null || $filename === '') {
             $ext = (array) rcube_mime::get_mime_extensions($part->mimetype);
             $ext = array_shift($ext);
             $filename = $rcmail->gettext('messagepart') . ' ' . $pid;
             if ($ext) {
                 $filename .= '.' . $ext;
             }
         }
         $disp_name = $this->_convert_filename($filename);
         $tmpfn = tempnam($temp_dir, 'zipattach');
         $tmpfp = fopen($tmpfn, 'w');
         $tempfiles[] = $tmpfn;
         $message->get_part_body($part->mime_id, false, 0, $tmpfp);
         $zip->addFile($tmpfn, $disp_name);
         fclose($tmpfp);
     }
     $zip->close();
     $filename = ($message->subject ? $message->subject : 'roundcube') . '.zip';
     $this->_deliver_zipfile($tmpfname, $filename);
     // delete temporary files from disk
     foreach ($tempfiles as $tmpfn) {
         unlink($tmpfn);
     }
     exit;
 }
 private function _do_emaillearn($uids, $spam)
 {
     $rcmail = rcube::get_instance();
     $identity_arr = $rcmail->user->get_identity();
     $from = $identity_arr['email'];
     if ($spam) {
         $mailto = $rcmail->config->get('markasjunk2_email_spam');
     } else {
         $mailto = $rcmail->config->get('markasjunk2_email_ham');
     }
     $mailto = str_replace('%u', $_SESSION['username'], $mailto);
     $mailto = str_replace('%l', $rcmail->user->get_username('local'), $mailto);
     $mailto = str_replace('%d', $rcmail->user->get_username('domain'), $mailto);
     $mailto = str_replace('%i', $from, $mailto);
     if (!$mailto) {
         return;
     }
     $message_charset = $rcmail->output->get_charset();
     // chose transfer encoding
     $charset_7bit = array('ASCII', 'ISO-2022-JP', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-15');
     $transfer_encoding = in_array(strtoupper($message_charset), $charset_7bit) ? '7bit' : '8bit';
     $temp_dir = realpath($rcmail->config->get('temp_dir'));
     $subject = $rcmail->config->get('markasjunk2_email_subject');
     $subject = str_replace('%u', $_SESSION['username'], $subject);
     $subject = str_replace('%t', $spam ? 'spam' : 'ham', $subject);
     $subject = str_replace('%l', $rcmail->user->get_username('local'), $subject);
     $subject = str_replace('%d', $rcmail->user->get_username('domain'), $subject);
     // compose headers array
     $headers = array();
     $headers['Date'] = date('r');
     $headers['From'] = format_email_recipient($identity_arr['email'], $identity_arr['name']);
     $headers['To'] = $mailto;
     $headers['Subject'] = $subject;
     foreach ($uids as $uid) {
         $MESSAGE = new rcube_message($uid);
         // set message charset as default
         if (!empty($MESSAGE->headers->charset)) {
             $rcmail->storage->set_charset($MESSAGE->headers->charset);
         }
         $MAIL_MIME = new Mail_mime($rcmail->config->header_delimiter());
         if ($rcmail->config->get('markasjunk2_email_attach', false)) {
             $tmpPath = tempnam($temp_dir, 'rcmMarkASJunk2');
             // send mail as attachment
             $MAIL_MIME->setTXTBody(($spam ? 'Spam' : 'Ham') . ' report from ' . $rcmail->config->get('product_name'), false, true);
             $raw_message = $rcmail->storage->get_raw_body($uid);
             $subject = $MESSAGE->get_header('subject');
             if (isset($subject) && $subject != "") {
                 $disp_name = $subject . ".eml";
             } else {
                 $disp_name = "message_rfc822.eml";
             }
             if (file_put_contents($tmpPath, $raw_message)) {
                 $MAIL_MIME->addAttachment($tmpPath, "message/rfc822", $disp_name, true, $transfer_encoding, 'attachment', '', '', '', $rcmail->config->get('mime_param_folding') ? 'quoted-printable' : NULL, $rcmail->config->get('mime_param_folding') == 2 ? 'quoted-printable' : NULL, '', RCUBE_CHARSET);
             }
             // encoding settings for mail composing
             $MAIL_MIME->setParam('text_encoding', $transfer_encoding);
             $MAIL_MIME->setParam('html_encoding', 'quoted-printable');
             $MAIL_MIME->setParam('head_encoding', 'quoted-printable');
             $MAIL_MIME->setParam('head_charset', $message_charset);
             $MAIL_MIME->setParam('html_charset', $message_charset);
             $MAIL_MIME->setParam('text_charset', $message_charset);
             // pass headers to message object
             $MAIL_MIME->headers($headers);
         } else {
             $headers['Resent-From'] = $headers['From'];
             $headers['Resent-Date'] = $headers['Date'];
             $headers['Date'] = $MESSAGE->headers->date;
             $headers['From'] = $MESSAGE->headers->from;
             $headers['Subject'] = $MESSAGE->headers->subject;
             $MAIL_MIME->headers($headers);
             if ($MESSAGE->has_html_part()) {
                 $body = $MESSAGE->first_html_part();
                 $MAIL_MIME->setHTMLBody($body);
             }
             $body = $MESSAGE->first_text_part();
             $MAIL_MIME->setTXTBody($body, false, true);
             foreach ($MESSAGE->attachments as $attachment) {
                 $MAIL_MIME->addAttachment($MESSAGE->get_part_body($attachment->mime_id, true), $attachment->mimetype, $attachment->filename, false, $attachment->encoding, $attachment->disposition, '', $attachment->charset);
             }
             foreach ($MESSAGE->mime_parts as $attachment) {
                 if (!empty($attachment->content_id)) {
                     // covert CID to Mail_MIME format
                     $attachment->content_id = str_replace('<', '', $attachment->content_id);
                     $attachment->content_id = str_replace('>', '', $attachment->content_id);
                     if (empty($attachment->filename)) {
                         $attachment->filename = $attachment->content_id;
                     }
                     $message_body = $MAIL_MIME->getHTMLBody();
                     $dispurl = 'cid:' . $attachment->content_id;
                     $message_body = str_replace($dispurl, $attachment->filename, $message_body);
                     $MAIL_MIME->setHTMLBody($message_body);
                     $MAIL_MIME->addHTMLImage($MESSAGE->get_part_body($attachment->mime_id, true), $attachment->mimetype, $attachment->filename, false);
                 }
             }
             // encoding settings for mail composing
             $MAIL_MIME->setParam('head_encoding', $MESSAGE->headers->encoding);
             $MAIL_MIME->setParam('head_charset', $MESSAGE->headers->charset);
             foreach ($MESSAGE->mime_parts as $mime_id => $part) {
                 $mimetype = strtolower($part->ctype_primary . '/' . $part->ctype_secondary);
                 if ($mimetype == 'text/html') {
                     $MAIL_MIME->setParam('text_encoding', $part->encoding);
                     $MAIL_MIME->setParam('html_charset', $part->charset);
                 } else {
                     if ($mimetype == 'text/plain') {
                         $MAIL_MIME->setParam('html_encoding', $part->encoding);
                         $MAIL_MIME->setParam('text_charset', $part->charset);
                     }
                 }
             }
         }
         $rcmail->deliver_message($MAIL_MIME, $from, $mailto, $smtp_error, $body_file);
         // clean up
         if (file_exists($tmpPath)) {
             unlink($tmpPath);
         }
         if ($rcmail->config->get('markasjunk2_debug')) {
             if ($spam) {
                 rcube::write_log('markasjunk2', $uid . ' SPAM ' . $mailto . ' (' . $subject . ')');
             } else {
                 rcube::write_log('markasjunk2', $uid . ' HAM ' . $mailto . ' (' . $subject . ')');
             }
             if ($smtp_error['vars']) {
                 rcube::write_log('markasjunk2', $smtp_error['vars']);
             }
         }
     }
 }
Example #8
0
function do_emaillearn($uids, $spam)
{
    $rcmail = rcmail::get_instance();
    if ($spam) {
        $mailto = $rcmail->config->get('markasjunk2_email_spam');
    } else {
        $mailto = $rcmail->config->get('markasjunk2_email_ham');
    }
    if (!$mailto) {
        return;
    }
    $message_charset = $rcmail->output->get_charset();
    // chose transfer encoding
    $charset_7bit = array('ASCII', 'ISO-2022-JP', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-15');
    $transfer_encoding = in_array(strtoupper($message_charset), $charset_7bit) ? '7bit' : '8bit';
    $temp_dir = realpath($rcmail->config->get('temp_dir'));
    $identity_arr = $rcmail->user->get_identity();
    $from = $identity_arr['email'];
    $subject = $rcmail->config->get('markasjunk2_email_subject');
    $subject = str_replace('%u', $_SESSION['username'], $subject);
    $subject = str_replace('%t', $spam ? 'spam' : 'ham', $subject);
    if (strpos($_SESSION['username'], '@') !== false) {
        $parts = explode("@", $_SESSION['username'], 2);
        $subject = str_replace(array('%l', '%d'), array($parts[0], $parts[1]), $subject);
    }
    foreach (explode(",", $uids) as $uid) {
        $MESSAGE = new rcube_message($uid);
        $tmpPath = tempnam($temp_dir, 'rcmMarkASJunk2');
        // compose headers array
        $headers = array();
        $headers['Date'] = date('r');
        $headers['From'] = rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset);
        $headers['To'] = $mailto;
        $headers['Subject'] = $subject;
        $MAIL_MIME = new rcube_mail_mime($rcmail->config->header_delimiter());
        if ($rcmail->config->get('markasjunk2_email_attach', false)) {
            // send mail as attachment
            $MAIL_MIME->setTXTBody(($spam ? 'Spam' : 'Ham') . ' report from RoundCube Webmail', false, true);
            $message = $rcmail->imap->get_raw_body($uid);
            $subject = $MESSAGE->get_header('subject');
            if (isset($subject) && $subject != "") {
                $disp_name = $subject . ".eml";
            } else {
                $disp_name = "message_rfc822.eml";
            }
            if (file_put_contents($tmpPath, $message)) {
                $MAIL_MIME->addAttachment($tmpPath, "message/rfc822", $disp_name, true, $ctype == 'message/rfc822' ? $transfer_encoding : 'base64', 'attachment', $message_charset, '', '', $rcmail->config->get('mime_param_folding') ? 'quoted-printable' : NULL, $rcmail->config->get('mime_param_folding') == 2 ? 'quoted-printable' : NULL);
            }
        } else {
            if ($MESSAGE->has_html_part()) {
                $body = $MESSAGE->first_html_part();
                $MAIL_MIME->setHTMLBody($body);
                // add a plain text version of the e-mail as an alternative part.
                $h2t = new html2text($body, false, true, 0);
                $MAIL_MIME->setTXTBody($h2t->get_text());
            } else {
                $body = $MESSAGE->first_text_part();
                $MAIL_MIME->setTXTBody($body, false, true);
            }
        }
        // encoding settings for mail composing
        $MAIL_MIME->setParam(array('text_encoding' => $transfer_encoding, 'html_encoding' => 'quoted-printable', 'head_encoding' => 'quoted-printable', 'head_charset' => $message_charset, 'html_charset' => $message_charset, 'text_charset' => $message_charset));
        // pass headers to message object
        $MAIL_MIME->headers($headers);
        rcmail_deliver_message($MAIL_MIME, $from, $mailto, $smtp_error);
        if ($rcmail->config->get('markasjunk2_debug')) {
            if ($spam) {
                write_log('markasjunk2', $uid . ' SPAM ' . $email_to . ' (' . $subject . ')');
            } else {
                write_log('markasjunk2', $uid . ' HAM ' . $email_to . ' (' . $subject . ')');
            }
            if ($smtp_error['vars']) {
                write_log('markasjunk2', $smtp_error['vars']);
            }
        }
    }
}
 /**
  * Remove attachments from a message
  */
 function remove_attachments()
 {
     $rcmail = rcmail::get_instance();
     $imap = $rcmail->storage;
     $MESSAGE = new rcube_message(get_input_value('_uid', RCUBE_INPUT_GET));
     $headers = $this->_parse_headers($imap->get_raw_headers($MESSAGE->uid));
     // set message charset as default
     if (!empty($MESSAGE->headers->charset)) {
         $imap->set_charset($MESSAGE->headers->charset);
     }
     // Remove old MIME headers
     unset($headers['MIME-Version']);
     unset($headers['Content-Type']);
     $MAIL_MIME = new Mail_mime($rcmail->config->header_delimiter());
     $MAIL_MIME->headers($headers);
     if ($MESSAGE->has_html_part()) {
         $body = $MESSAGE->first_html_part();
         $MAIL_MIME->setHTMLBody($body);
     }
     $body = $MESSAGE->first_text_part();
     $MAIL_MIME->setTXTBody($body, false, true);
     foreach ($MESSAGE->attachments as $attachment) {
         if ($attachment->mime_id != get_input_value('_part', RCUBE_INPUT_GET) && get_input_value('_part', RCUBE_INPUT_GET) != '-1') {
             $MAIL_MIME->addAttachment($MESSAGE->get_part_content($attachment->mime_id), $attachment->mimetype, $attachment->filename, false, $attachment->encoding, $attachment->disposition, '', $attachment->charset);
         }
     }
     foreach ($MESSAGE->mime_parts as $attachment) {
         if (!empty($attachment->content_id)) {
             // covert CID to Mail_MIME format
             $attachment->content_id = str_replace('<', '', $attachment->content_id);
             $attachment->content_id = str_replace('>', '', $attachment->content_id);
             if (empty($attachment->filename)) {
                 $attachment->filename = $attachment->content_id;
             }
             $MESSAGE_body = $MAIL_MIME->getHTMLBody();
             $dispurl = 'cid:' . $attachment->content_id;
             $MESSAGE_body = str_replace($dispurl, $attachment->filename, $MESSAGE_body);
             $MAIL_MIME->setHTMLBody($MESSAGE_body);
             $MAIL_MIME->addHTMLImage($MESSAGE->get_part_content($attachment->mime_id), $attachment->mimetype, $attachment->filename, false);
         }
     }
     // encoding settings for mail composing
     $MAIL_MIME->setParam('head_encoding', $MESSAGE->headers->encoding);
     $MAIL_MIME->setParam('head_charset', $MESSAGE->headers->charset);
     foreach ($MESSAGE->mime_parts as $mime_id => $part) {
         $mimetype = strtolower($part->ctype_primary . '/' . $part->ctype_secondary);
         if ($mimetype == 'text/html') {
             $MAIL_MIME->setParam('text_encoding', $part->encoding);
             $MAIL_MIME->setParam('html_charset', $part->charset);
         } else {
             if ($mimetype == 'text/plain') {
                 $MAIL_MIME->setParam('html_encoding', $part->encoding);
                 $MAIL_MIME->setParam('text_charset', $part->charset);
             }
         }
     }
     $saved = $imap->save_message($_SESSION['mbox'], $MAIL_MIME->getMessage());
     //write_log("debug","saved=".$saved);
     if ($saved) {
         $imap->delete_message($MESSAGE->uid);
         // Assume the one we just added has the highest UID
         //dsoares $uids = $imap->conn->fetchUIDs($imap->mod_mailbox($_SESSION['mbox']));
         //dsoares $uid = end($uids);
         $uid = $saved;
         //dsoares
         // set flags
         foreach ($MESSAGE->headers->flags as $flag) {
             $imap->set_flag($uid, strtoupper($flag), $_SESSION['mbox']);
         }
         $this->api->output->command('display_message', $this->gettext('attachmentremoved'), 'confirmation');
         $this->api->output->command('removeattachments_reload', $uid);
     } else {
         $this->api->output->command('display_message', $this->gettext('removefailed'), 'error');
     }
     $this->api->output->send();
 }