| | |
| | | |
| | | public $uid = null; |
| | | public $headers; |
| | | public $structure; |
| | | public $parts = array(); |
| | | public $mime_parts = array(); |
| | | public $attachments = array(); |
| | |
| | | $this->imap->get_all_headers = true; |
| | | |
| | | $this->uid = $uid; |
| | | $this->headers = $this->imap->get_headers($uid, NULL, true, true); |
| | | $this->headers = $this->imap->get_message($uid); |
| | | |
| | | if (!$this->headers) |
| | | return; |
| | |
| | | '_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); |
| | | 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); |
| | |
| | | * @param string $mime_id Part MIME-ID |
| | | * @return string URL or false if part does not exist |
| | | */ |
| | | public function get_part_url($mime_id) |
| | | public function get_part_url($mime_id, $embed = false) |
| | | { |
| | | if ($this->mime_parts[$mime_id]) |
| | | return $this->opt['get_url'] . '&_part=' . $mime_id; |
| | | return $this->opt['get_url'] . '&_part=' . $mime_id . ($embed ? '&_embed=1' : ''); |
| | | else |
| | | return false; |
| | | } |
| | |
| | | if ($message_ctype_primary == 'text' && !$recursive) { |
| | | $structure->type = 'content'; |
| | | $this->parts[] = &$structure; |
| | | |
| | | |
| | | // Parse simple (plain text) message body |
| | | if ($message_ctype_secondary == 'plain') |
| | | foreach ((array)$this->uu_decode($structure) as $uupart) { |
| | |
| | | $structure->type = 'content'; |
| | | $this->parts[] = &$structure; |
| | | } |
| | | // message contains alternative parts |
| | | else if ($mimetype == 'multipart/alternative' && is_array($structure->parts)) { |
| | | // message contains (more than one!) alternative parts |
| | | else if ($mimetype == 'multipart/alternative' |
| | | && is_array($structure->parts) && count($structure->parts) > 1 |
| | | ) { |
| | | // get html/plaintext parts |
| | | $plain_part = $html_part = $print_part = $related_part = null; |
| | | |
| | | foreach ($structure->parts as $p => $sub_part) { |
| | | $sub_mimetype = $sub_part->mimetype; |
| | | |
| | | |
| | | // check if sub part is |
| | | if ($sub_mimetype == 'text/plain') |
| | | $plain_part = $p; |
| | |
| | | $this->parse_alternative = true; |
| | | $this->parse_structure($structure->parts[$related_part], true); |
| | | $this->parse_alternative = false; |
| | | |
| | | |
| | | // if plain part was found, we should unset it if html is preferred |
| | | if ($this->opt['prefer_html'] && count($this->parts)) |
| | | $plain_part = null; |
| | |
| | | $p->ctype_secondary = 'plain'; |
| | | $p->body = rcube_label('encryptedmessage'); |
| | | $p->size = strlen($p->body); |
| | | |
| | | $this->parts[] = $p; |
| | | } |
| | | // message contains multiple parts |
| | | else if (is_array($structure->parts) && !empty($structure->parts)) { |
| | |
| | | $this->attachments[] = $mail_part; |
| | | } |
| | | // part message/* |
| | | else if ($primary_type=='message') { |
| | | else if ($primary_type == 'message') { |
| | | $this->parse_structure($mail_part, true); |
| | | |
| | | // list as attachment as well (mostly .eml) |
| | |
| | | $this->attachments[] = $mail_part; |
| | | } |
| | | } |
| | | // attachment part as message/rfc822 (#1488026) |
| | | else if ($mail_part->mimetype == 'message/rfc822') { |
| | | $this->parse_structure($mail_part); |
| | | } |
| | | } |
| | | |
| | | // if this was a related part try to resolve references |
| | |
| | | $img_regexp = '/^image\/(gif|jpe?g|png|tiff|bmp|svg)/'; |
| | | |
| | | foreach ($this->inline_parts as $inline_object) { |
| | | $part_url = $this->get_part_url($inline_object->mime_id); |
| | | $part_url = $this->get_part_url($inline_object->mime_id, true); |
| | | if ($inline_object->content_id) |
| | | $a_replaces['cid:'.$inline_object->content_id] = $part_url; |
| | | if ($inline_object->content_location) { |