Fix for #855320 where Outlook Express was creating CID: based URLs,
authorjangliss <jangliss@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 8 Feb 2005 15:13:31 +0000 (15:13 +0000)
committerjangliss <jangliss@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 8 Feb 2005 15:13:31 +0000 (15:13 +0000)
but not assigning a content-id to the attachment.  This is a bug in
Outlook Express and is non-RFC compliant behaviour.

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@8822 7612ce4b-ef26-0410-bec9-ea0150e637f0

ChangeLog
functions/mime.php

index c49e4ea..0202e43 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -211,6 +211,9 @@ Version 1.5.1 -- CVS
     an already subscribed folder (#1115409).
   - Added blank.png for missing image support.
   - Use the proper attachment filenames in case of forwarding a message.
+  - Fix for #855320 where Outlook Express was creating CID: based URLs,
+    but not assigning a content-id to the attachment.  This is a bug in
+       Outlook Express and is non-RFC compliant behaviour.
 
 
 Version 1.5.0
index ea49c4d..93c95a0 100644 (file)
@@ -866,6 +866,15 @@ function find_ent_id($id, $message) {
 //                if (sq_check_save_extension($message->entities[$i])) {
                     return $message->entities[$i]->entity_id;
 //                }
+            } elseif (!empty($message->entities[$i]->header->parameters['name'])) {
+                /**
+                 * This is part of a fix for Outlook Express 6.x generating
+                 * cid URLs without creating content-id headers
+                 * @@JA - 20050207
+                 */
+                if (strcasecmp($message->entities[$i]->header->parameters['name'], $id) == 0) {
+                    return $message->entities[$i]->entity_id;
+                }
             }
         }
     }
@@ -1550,11 +1559,37 @@ function sq_cid2http($message, $id, $cidurl, $mailbox){
     /* in case of non-save cid links $httpurl should be replaced by a sort of
     unsave link image */
     $httpurl = '';
-    if ($linkurl) {
+
+   /**
+    * This is part of a fix for Outlook Express 6.x generating
+    * cid URLs without creating content-id headers. These images are
+    * not part of the multipart/related html mail. The html contains
+    * <img src="cid:{some_id}/image_filename.ext"> references to
+    * attached images with as goal to render them inline although
+    * the attachment disposition property is not inline.
+    **/
+
+    if (empty($linkurl)) {
+        if (preg_match('/{.*}\//', $cidurl)) {
+            $cidurl = preg_replace('/{.*}\//','', $cidurl);
+            if (!empty($cidurl)) {
+                $linkurl = find_ent_id($cidurl, $message);
+            }
+        }
+    }
+    if (!empty($linkurl)) {
         $httpurl = $quotchar . SM_PATH . 'src/download.php?absolute_dl=true&amp;' .
-                "passed_id=$id&amp;mailbox=" . urlencode($mailbox) .
-                '&amp;ent_id=' . $linkurl . $quotchar;
+                   "passed_id=$id&amp;mailbox=" . urlencode($mailbox) .
+                   '&amp;ent_id=' . $linkurl . $quotchar;
+    } else {
+        /**
+         * If we couldn't generate a proper img url, drop in a blank image
+         * instead of sending back empty, otherwise it causes unusual behaviour
+         */
+        $httpurl = $quotechar . SM_PATH . 'images/blank.png';
     }
     return $httpurl;
 }
 
@@ -2046,4 +2081,4 @@ function SendDownloadHeaders($type0, $type1, $filename, $force, $filesize=0) {
 
 }  // end fn SendDownloadHeaders
 
-?>
\ No newline at end of file
+?>