function mh_find_match($message) { foreach ($this->prefs as $p) { if (stristr(rcube_mime::decode_header($message->{$p}['header']), $p['input'])) { return $p['color']; } } return false; }
/** * Returns header value */ public function get($name, $decode = true) { $name = strtolower($name); if (isset($this->obj_headers[$name])) { $value = $this->{$this->obj_headers[$name]}; } else { $value = $this->others[$name]; } return $decode ? rcube_mime::decode_header($value, $this->charset) : $value; }
/** * Return a (decoded) message header * * @param string $name Header name * @param bool $row Don't mime-decode the value * @return string Header value */ public function get_header($name, $raw = false) { if (empty($this->headers)) { return null; } if ($this->headers->{$name}) { $value = $this->headers->{$name}; } else { if ($this->headers->others[$name]) { $value = $this->headers->others[$name]; } } return $raw ? $value : $this->mime->decode_header($value); }
/** * Extract mail headers for new filter form */ private function parse_headers($headers) { $result = array(); if ($headers->subject) { $result[] = array('Subject', rcube_mime::decode_header($headers->subject)); } // @TODO: List-Id, others? foreach (array('From', 'To') as $h) { $hl = strtolower($h); if ($headers->{$hl}) { $list = rcube_mime::decode_address_list($headers->{$hl}); foreach ($list as $item) { if ($item['mailto']) { $result[] = array($h, $item['mailto']); } } } } return $result; }
/** * Returns header value */ public function get($name, $decode = true) { $name = strtolower($name); if (isset($this->obj_headers[$name])) { $value = $this->{$this->obj_headers[$name]}; } else { $value = $this->others[$name]; } if ($decode) { if (is_array($value)) { foreach ($value as $key => $val) { $value[$key] = rcube_mime::decode_header($val, $this->charset); $value[$key] = rcube_charset::clean($val); } } else { $value = rcube_mime::decode_header($value, $this->charset); $value = rcube_charset::clean($value); } } return $value; }
/** * Get message headers for popup window */ function mail_headers($args) { $headers = $args['headers']; $ret = array(); if ($headers->subject) { $ret[] = array('Subject', rcube_mime::decode_header($headers->subject)); } // @TODO: List-Id, others? foreach (array('From', 'To') as $h) { $hl = strtolower($h); if ($headers->{$hl}) { $list = rcube_mime::decode_address_list($headers->{$hl}); foreach ($list as $item) { if ($item['mailto']) { $ret[] = array($h, $item['mailto']); } } } } if ($this->rc->action == 'preview') { $this->rc->output->command('parent.set_env', array('sieve_headers' => $ret)); } else { $this->rc->output->set_env('sieve_headers', $ret); } return $args; }
/** * Helper method to packs all the given messages into a zip archive * * @param array List of message UIDs to download */ private function _download_messages($messageset) { $rcmail = rcmail::get_instance(); $imap = $rcmail->get_storage(); $mode = rcube_utils::get_input_value('_mode', rcube_utils::INPUT_POST); $temp_dir = $rcmail->config->get('temp_dir'); $tmpfname = tempnam($temp_dir, 'zipdownload'); $tempfiles = array($tmpfname); $folders = count($messageset) > 1; // @TODO: file size limit // open zip file $zip = new ZipArchive(); $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE); if ($mode == 'mbox') { $tmpfp = fopen($tmpfname . '.mbox', 'w'); } foreach ($messageset as $mbox => $uids) { $imap->set_folder($mbox); $path = $folders ? str_replace($imap->get_hierarchy_delimiter(), '/', $mbox) . '/' : ''; if ($uids === '*') { $index = $imap->index($mbox, null, null, true); $uids = $index->get(); } foreach ($uids as $uid) { $headers = $imap->get_message_headers($uid); if ($mode == 'mbox') { // Sender address $from = rcube_mime::decode_address_list($headers->from, null, true, $headers->charset, true); $from = array_shift($from); $from = preg_replace('/\\s/', '-', $from); // Received (internal) date $date = rcube_utils::anytodatetime($headers->internaldate); if ($date) { $date->setTimezone(new DateTimeZone('UTC')); $date = $date->format(self::MBOX_DATE_FORMAT); } // Mbox format header (RFC4155) $header = sprintf("From %s %s\r\n", $from ?: 'MAILER-DAEMON', $date ?: ''); fwrite($tmpfp, $header); // Use stream filter to quote "From " in the message body stream_filter_register('mbox_filter', 'zipdownload_mbox_filter'); $filter = stream_filter_append($tmpfp, 'mbox_filter'); $imap->get_raw_body($uid, $tmpfp); stream_filter_remove($filter); fwrite($tmpfp, "\r\n"); } else { // maildir $subject = rcube_mime::decode_header($headers->subject, $headers->charset); $subject = $this->_filename_from_subject(mb_substr($subject, 0, 16)); $subject = $this->_convert_filename($subject); $disp_name = $path . $uid . ($subject ? " {$subject}" : '') . '.eml'; $tmpfn = tempnam($temp_dir, 'zipmessage'); $tmpfp = fopen($tmpfn, 'w'); $imap->get_raw_body($uid, $tmpfp); $tempfiles[] = $tmpfn; fclose($tmpfp); $zip->addFile($tmpfn, $disp_name); } } } $filename = $folders ? 'messages' : $imap->get_folder(); if ($mode == 'mbox') { $tempfiles[] = $tmpfname . '.mbox'; fclose($tmpfp); $zip->addFile($tmpfname . '.mbox', $filename . '.mbox'); } $zip->close(); $this->_deliver_zipfile($tmpfname, $filename . '.zip'); // delete temporary files from disk foreach ($tempfiles as $tmpfn) { unlink($tmpfn); } exit; }
/** * Set label by config to mail from maillist * * @access public */ function message_set_label($p) { $prefs = $this->rc->config->get('message_label', array()); //write_log('debug', preg_replace('/\r\n$/', '', print_r($prefs, true))); if (!count($prefs) or !isset($p['messages']) or !is_array($p['messages'])) { return $p; } foreach ($p['messages'] as $message) { $type = 'filter'; $color = ''; $ret_key = array(); foreach ($prefs as $key => $p) { if ($p['header'] == 'subject') { $cont = trim(rcube_mime::decode_header($message->{$p}['header'], $message->charset)); } else { $cont = $message->{$p}['header']; } if (stristr($cont, $p['input'])) { array_push($ret_key, array('id' => $key, 'type' => $type)); } } if (!empty($message->flags)) { foreach ($message->flags as $flag => $set_val) { if (stripos($flag, 'ulabels') === 0) { $flag_id = str_ireplace('ulabels_', '', $flag); if (!empty($ret_key)) { foreach ($ret_key as $key_search => $value) { $id = $value['id']; if ($prefs[$id]['id'] == strtolower($flag_id) && $value['type'] == 'filter') { unset($ret_key[$key_search]); } } } } $type = 'label'; if (stripos($flag, 'labels') === 0) { $flag_id = str_ireplace('labels_', '', $flag); foreach ($prefs as $key => $p) { if ($p['id'] == strtolower($flag_id)) { $flabel = false; if (!empty($ret_key)) { foreach ($ret_key as $key_filter => $value_filter) { $searh_filter = array('id' => $key, 'type' => 'filter'); if ($value_filter == $searh_filter) { $flabel = $key_filter; } } } if ($flabel !== false) { unset($ret_key[$flabel]); $type = 'flabel'; } array_push($ret_key, array('id' => $key, 'type' => $type)); } } } } } //write_log('debug', preg_replace('/\r\n$/', '', print_r($ret_key,true))); if (!empty($ret_key)) { sort($ret_key); $message->list_flags['extra_flags']['plugin_label'] = array(); $k = 0; foreach ($ret_key as $label_id) { !empty($p['text']) ? $text = $p['text'] : ($text = 'label'); $id = $label_id['id']; $type = $label_id['type']; $message->list_flags['extra_flags']['plugin_label'][$k]['color'] = $prefs[$id]['color']; $message->list_flags['extra_flags']['plugin_label'][$k]['text'] = $prefs[$id]['text']; $message->list_flags['extra_flags']['plugin_label'][$k]['id'] = $prefs[$id]['id']; $message->list_flags['extra_flags']['plugin_label'][$k]['type'] = $type; $k++; } } } return $p; }