From 63f9dee62db3da78d3755febf24b4fb24a743d43 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 26 Nov 2010 07:41:16 -0500
Subject: [PATCH] - Add workaround for MSOE's multipart/related messages with non-related attachments

---
 CHANGELOG                         |    1 +
 program/include/rcube_message.php |   15 ++++++++++++++-
 skins/default/editor_content.css  |    1 -
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 3236253..9eb23bc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -77,6 +77,7 @@
 - Lock submit button in onsubmit event on login page (#1487036)
 - Don't set attachment's charset in Content-type header (#1487122)
 - Fix handling of message bodies (quoted-printable encoded) with NULL characters (#1486189)
+- Add workaround for MSOE's multipart/related messages with non-related attachments
 
 RELEASE 0.4.2
 -------------
diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index 89d65eb..790f8d9 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -411,6 +411,10 @@
                     if ($plugin['abort'])
                         continue;
 
+                    if ($part_mimetype == 'text/html') {
+                        $got_html_part = true;
+                    }
+
                     $mail_part = $plugin['structure'];
                     list($primary_type, $secondary_type) = explode('/', $plugin['mimetype']);
 
@@ -487,8 +491,17 @@
                     $part_url = $this->get_part_url($inline_object->mime_id);
                     if ($inline_object->content_id)
                         $a_replaces['cid:'.$inline_object->content_id] = $part_url;
-                    if ($inline_object->content_location)
+                    if ($inline_object->content_location) {
                         $a_replaces[$inline_object->content_location] = $part_url;
+                    }
+                    // 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)
+                        && !empty($inline_object->filename)
+                    ) {
+                        $this->attachments[] = $inline_object;
+                    }
                 }
 
                 // add replace array to each content part
diff --git a/skins/default/editor_content.css b/skins/default/editor_content.css
index 14c2936..2ddc87f 100644
--- a/skins/default/editor_content.css
+++ b/skins/default/editor_content.css
@@ -30,4 +30,3 @@
 	margin-left:5px;
 	width:100%;
 }
-

--
Gitblit v1.9.1