| | |
| | | public $uid; |
| | | public $folder; |
| | | public $headers; |
| | | public $parts = array(); |
| | | public $mime_parts = array(); |
| | | public $sender; |
| | | public $parts = array(); |
| | | public $mime_parts = array(); |
| | | public $inline_parts = array(); |
| | | public $attachments = array(); |
| | | public $subject = ''; |
| | | public $sender = null; |
| | | public $is_safe = false; |
| | | public $attachments = array(); |
| | | public $subject = ''; |
| | | public $is_safe = false; |
| | | |
| | | const BODY_MAX_SIZE = 1048576; // 1MB |
| | | |
| | |
| | | |
| | | $this->set_safe((intval($_GET['_safe']) || $_SESSION['safe_messages'][$this->folder.':'.$uid])); |
| | | $this->opt = array( |
| | | 'safe' => $this->is_safe, |
| | | 'safe' => $this->is_safe, |
| | | 'prefer_html' => $this->app->config->get('prefer_html'), |
| | | 'get_url' => $this->app->url(array( |
| | | 'action' => 'get', |
| | | 'mbox' => $this->storage->get_folder(), |
| | | 'uid' => $uid)) |
| | | 'get_url' => $this->app->url(array( |
| | | 'action' => 'get', |
| | | 'mbox' => $this->folder, |
| | | 'uid' => $uid)) |
| | | ); |
| | | |
| | | if (!empty($this->headers->structure)) { |
| | |
| | | if (!($part = $this->mime_parts[$mime_id])) { |
| | | return; |
| | | } |
| | | |
| | | // allow plugins to modify part body |
| | | $plugin = $this->app->plugins->exec_hook('message_part_body', |
| | | array('object' => $this, 'part' => $part)); |
| | | |
| | | // only text parts can be formatted |
| | | $formatted = $formatted && $part->ctype_primary == 'text'; |
| | |
| | | $structure->headers = rcube_mime::parse_headers($headers); |
| | | } |
| | | } |
| | | else |
| | | else { |
| | | $mimetype = $structure->mimetype; |
| | | } |
| | | |
| | | // show message headers |
| | | if ($recursive && is_array($structure->headers) && |
| | |
| | | array('object' => $this, 'structure' => $structure, |
| | | 'mimetype' => $mimetype, 'recursive' => $recursive)); |
| | | |
| | | if ($plugin['abort']) |
| | | if ($plugin['abort']) { |
| | | return; |
| | | } |
| | | |
| | | $structure = $plugin['structure']; |
| | | list($message_ctype_primary, $message_ctype_secondary) = explode('/', $plugin['mimetype']); |
| | | $mimetype = $plugin['mimetype']; |
| | | $recursive = $plugin['recursive']; |
| | | |
| | | list($message_ctype_primary, $message_ctype_secondary) = explode('/', $mimetype); |
| | | |
| | | // print body if message doesn't have multiple parts |
| | | if ($message_ctype_primary == 'text' && !$recursive) { |
| | |
| | | $related_part = $p; |
| | | else if ($sub_mimetype == 'text/plain' && !$plain_part) |
| | | $plain_part = $p; |
| | | else if ($sub_mimetype == 'text/html' && !$html_part) |
| | | else if ($sub_mimetype == 'text/html' && !$html_part) { |
| | | $html_part = $p; |
| | | $this->got_html_part = true; |
| | | } |
| | | else if ($sub_mimetype == 'text/enriched' && !$enriched_part) |
| | | $enriched_part = $p; |
| | | else { |
| | |
| | | } |
| | | else { |
| | | $part_mimetype = $part_orig_mimetype = $mail_part->mimetype; |
| | | } |
| | | } |
| | | |
| | | // multipart/alternative |
| | | if ($primary_type == 'multipart') { |
| | |
| | | continue; |
| | | |
| | | if ($part_mimetype == 'text/html' && $mail_part->size) { |
| | | $got_html_part = true; |
| | | $this->got_html_part = true; |
| | | } |
| | | |
| | | $mail_part = $plugin['structure']; |
| | |
| | | } |
| | | // part is Microsoft Outlook TNEF (winmail.dat) |
| | | else if ($part_mimetype == 'application/ms-tnef') { |
| | | foreach ((array)$this->tnef_decode($mail_part) as $tpart) { |
| | | $tnef_parts = (array) $this->tnef_decode($mail_part); |
| | | foreach ($tnef_parts as $tpart) { |
| | | $this->mime_parts[$tpart->mime_id] = $tpart; |
| | | $this->attachments[] = $tpart; |
| | | } |
| | | |
| | | // add winmail.dat to the list if it's content is unknown |
| | | if (empty($tnef_parts) && !empty($mail_part->filename)) { |
| | | $this->mime_parts[$mail_part->mime_id] = $mail_part; |
| | | $this->attachments[] = $mail_part; |
| | | } |
| | | } |
| | | // part is a file/attachment |
| | |
| | | else if ($mail_part->mimetype == 'message/rfc822') { |
| | | $this->parse_structure($mail_part); |
| | | } |
| | | // calendar part not marked as attachment (#1490325) |
| | | else if ($part_mimetype == 'text/calendar') { |
| | | if (!$mail_part->filename) { |
| | | $mail_part->filename = 'calendar.ics'; |
| | | } |
| | | |
| | | $this->attachments[] = $mail_part; |
| | | } |
| | | } |
| | | |
| | | // if this was a related part try to resolve references |
| | |
| | | // MS Outlook sends sometimes non-related attachments as related |
| | | // In this case multipart/related message has only one text part |
| | | // We'll add all such attachments to the attachments list |
| | | if (!isset($got_html_part) && empty($inline_object->content_id)) { |
| | | if (!isset($this->got_html_part)) { |
| | | $this->attachments[] = $inline_object; |
| | | } |
| | | // MS Outlook sometimes also adds non-image attachments as related |
| | |
| | | { |
| | | return rcube_mime::format_flowed($text, $length); |
| | | } |
| | | |
| | | } |