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;
 }
Ejemplo n.º 3
0
 /**
  * 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);
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }
Ejemplo n.º 6
0
 /**
  * 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;
 }
Ejemplo n.º 7
0
 /**
  * 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;
 }
Ejemplo n.º 8
0
 /**
  * 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;
 }