/**
  * __construct
  *
  * Provide a uid, and parse message structure.
  *
  * @param string $uid The message UID.
  *
  * @uses rcmail::get_instance()
  * @uses rcube_imap::decode_mime_string()
  * @uses self::set_safe()
  *
  * @see self::$app, self::$imap, self::$opt, self::$structure
  */
 function __construct($uid)
 {
     $this->app = rcmail::get_instance();
     $this->imap = $this->app->imap;
     $this->uid = $uid;
     $this->headers = $this->imap->get_headers($uid, NULL, true, true);
     $this->subject = rcube_imap::decode_mime_string($this->headers->subject, $this->headers->charset);
     list(, $this->sender) = each($this->imap->decode_address_list($this->headers->from));
     $this->set_safe(intval($_GET['_safe']) || $_SESSION['safe_messages'][$uid]);
     $this->opt = array('safe' => $this->is_safe, 'prefer_html' => $this->app->config->get('prefer_html'), 'get_url' => rcmail_url('get', array('_mbox' => $this->imap->get_mailbox_name(), '_uid' => $uid)));
     if ($this->structure = $this->imap->get_structure($uid, $this->headers->body_structure)) {
         $this->get_mime_numbers($this->structure);
         $this->parse_structure($this->structure);
     } else {
         $this->body = $this->imap->get_body($uid);
     }
 }
Example #2
0
 /**
  * __construct
  *
  * Provide a uid, and parse message structure.
  *
  * @param string $uid The message UID.
  *
  * @uses rcmail::get_instance()
  * @uses rcube_imap::decode_mime_string()
  * @uses self::set_safe()
  *
  * @see self::$app, self::$imap, self::$opt, self::$structure
  */
 function __construct($uid)
 {
     $this->app = rcmail::get_instance();
     $this->imap = $this->app->imap;
     $this->imap->get_all_headers = true;
     $this->uid = $uid;
     $this->headers = $this->imap->get_message($uid);
     if (!$this->headers) {
         return;
     }
     $this->subject = rcube_imap::decode_mime_string($this->headers->subject, $this->headers->charset);
     list(, $this->sender) = each($this->imap->decode_address_list($this->headers->from));
     $this->set_safe(intval($_GET['_safe']) || $_SESSION['safe_messages'][$uid]);
     $this->opt = array('safe' => $this->is_safe, 'prefer_html' => $this->app->config->get('prefer_html'), 'get_url' => rcmail_url('get', array('_mbox' => $this->imap->get_mailbox_name(), '_uid' => $uid)));
     if (!empty($this->headers->structure)) {
         $this->get_mime_numbers($this->headers->structure);
         $this->parse_structure($this->headers->structure);
     } else {
         $this->body = $this->imap->get_body($uid);
     }
     // notify plugins and let them analyze this structured message object
     $this->app->plugins->exec_hook('message_load', array('object' => $this));
 }
Example #3
0
 /**
  * Decode a mime-encoded string to internal charset
  *
  * @param string $input    Header value
  * @param string $fallback Fallback charset if none specified
  *
  * @return string Decoded string
  * @static
  */
 public static function decode_mime_string($input, $fallback = null)
 {
     // Initialize variable
     $out = '';
     // Iterate instead of recursing, this way if there are too many values we don't have stack overflows
     // rfc: all line breaks or other characters not found
     // in the Base64 Alphabet must be ignored by decoding software
     // delete all blanks between MIME-lines, differently we can
     // receive unnecessary blanks and broken utf-8 symbols
     $input = preg_replace("/\\?=\\s+=\\?/", '?==?', $input);
     // Check if there is stuff to decode
     if (strpos($input, '=?') !== false) {
         // Loop through the string to decode all occurences of =? ?= into the variable $out
         while (($pos = strpos($input, '=?')) !== false) {
             // Append everything that is before the text to be decoded
             $out .= substr($input, 0, $pos);
             // Get the location of the text to decode
             $end_cs_pos = strpos($input, "?", $pos + 2);
             $end_en_pos = strpos($input, "?", $end_cs_pos + 1);
             $end_pos = strpos($input, "?=", $end_en_pos + 1);
             // Extract the encoded string
             $encstr = substr($input, $pos + 2, $end_pos - $pos - 2);
             // Extract the remaining string
             $input = substr($input, $end_pos + 2);
             // Decode the string fragement
             $out .= rcube_imap::_decode_mime_string_part($encstr);
         }
         // Deocde the rest (if any)
         if (strlen($input) != 0) {
             $out .= rcube_imap::decode_mime_string($input, $fallback);
         }
         // return the results
         return $out;
     }
     // no encoding information, use fallback
     return rcube_charset_convert($input, !empty($fallback) ? $fallback : rcmail::get_instance()->config->get('default_charset', 'ISO-8859-1'));
 }
Example #4
0
 /**
  * Decode a message header value
  *
  * @param string  $input         Header value
  * @param boolean $remove_quotas Remove quotes if necessary
  * @return string Decoded string
  */
 function decode_header($input, $remove_quotes = false)
 {
     $str = rcube_imap::decode_mime_string((string) $input, $this->default_charset);
     if ($str[0] == '"' && $remove_quotes) {
         $str = str_replace('"', '', $str);
     }
     return $str;
 }