| | |
| | | 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 |
| | | |
| | |
| | | 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) { |
| | |
| | | } |
| | | else { |
| | | $part_mimetype = $part_orig_mimetype = $mail_part->mimetype; |
| | | } |
| | | } |
| | | |
| | | // multipart/alternative |
| | | if ($primary_type == 'multipart') { |
| | |
| | | } |
| | | // 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; |
| | | } |
| | | |
| | | $tnef_parts = null; |
| | | } |
| | | // part is a file/attachment |
| | | else if (preg_match('/^(inline|attach)/', $mail_part->disposition) || |
| | |
| | | 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 |