From 3e58bf2062be1323d7c7c021d40255458e28e74d Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Wed, 30 Jun 2010 05:44:33 -0400 Subject: [PATCH] - Fix handling of messages with Content-Type: application/* and no filename (#1484050) --- program/include/rcube_message.php | 30 ++++++++++++++++++------------ 1 files changed, 18 insertions(+), 12 deletions(-) diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php index 8236503..fac7fe8 100644 --- a/program/include/rcube_message.php +++ b/program/include/rcube_message.php @@ -5,7 +5,7 @@ | program/include/rcube_message.php | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland | + | Copyright (C) 2008-2010, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -63,14 +63,17 @@ { $this->app = rcmail::get_instance(); $this->imap = $this->app->imap; - + $this->uid = $uid; $this->headers = $this->imap->get_headers($uid, NULL, true, true); + + 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, @@ -440,7 +443,6 @@ // part belongs to a related message and is linked if ($mimetype == 'multipart/related' - && preg_match('!^image/!', $part_mimetype) && ($mail_part->headers['content-id'] || $mail_part->headers['content-location'])) { if ($mail_part->headers['content-id']) $mail_part->content_id = preg_replace(array('/^</', '/>$/'), '', $mail_part->headers['content-id']); @@ -486,6 +488,11 @@ else if ($structure->filename) { $this->attachments[] = $structure; } + // message is a single part non-text (without filename) + else if (preg_match('/application\//i', $mimetype)) { + $structure->filename = 'Part '.$structure->mime_id; + $this->attachments[] = $structure; + } } @@ -498,7 +505,7 @@ { if (strlen($part->mime_id)) $this->mime_parts[$part->mime_id] = &$part; - + if (is_array($part->parts)) for ($i=0; $i<count($part->parts); $i++) $this->get_mime_numbers($part->parts[$i]); @@ -516,18 +523,17 @@ if (!isset($part->body)) $part->body = $this->imap->get_message_part($this->uid, $part->mime_id, $part); - require_once('lib/tnef_decoder.inc'); - $parts = array(); - $tnef_arr = tnef_decode($part->body); + $tnef = new tnef_decoder; + $tnef_arr = $tnef->decompress($part->body); foreach ($tnef_arr as $pid => $winatt) { $tpart = new rcube_message_part; $tpart->filename = trim($winatt['name']); $tpart->encoding = 'stream'; - $tpart->ctype_primary = trim(strtolower($winatt['type0'])); - $tpart->ctype_secondary = trim(strtolower($winatt['type1'])); + $tpart->ctype_primary = trim(strtolower($winatt['type'])); + $tpart->ctype_secondary = trim(strtolower($winatt['subtype'])); $tpart->mimetype = $tpart->ctype_primary . '/' . $tpart->ctype_secondary; $tpart->mime_id = 'winmail.' . $part->mime_id . '.' . $pid; $tpart->size = $winatt['size']; @@ -536,7 +542,7 @@ $parts[] = $tpart; unset($tnef_arr[$pid]); } - + return $parts; } @@ -582,7 +588,7 @@ unset($matches[$pid]); } } - + return $parts; } -- Gitblit v1.9.1