From 14bd927c71bf6bd62483494b1a4229a50855ccb7 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sun, 12 Jan 2014 03:26:02 -0500
Subject: [PATCH] Extracting inline image data into attachments also if data type is not set

---
 program/steps/mail/sendmail.inc |   19 +++++++++++--------
 1 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index b187d5c..0619d63 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -779,16 +779,15 @@
     $body   = $mime_message->getHTMLBody();
     $offset = 0;
     $list   = array();
-    $regexp = '# src=[\'"](data:(image/[a-z]+);base64,([a-z0-9+/=\r\n]+))([\'"])#i';
-
-    // get domain for the Content-ID, must be the same as in Mail_Mime::get()
-    if (preg_match('#@([0-9a-zA-Z\-\.]+)#', $from, $matches)) {
-        $domain = $matches[1];
-    } else {
-        $domain = 'localhost';
-    }
+    $domain = 'localhost';
+    $regexp = '#img[^>]+src=[\'"](data:([^;]*);base64,([a-z0-9+/=\r\n]+))([\'"])#i';
 
     if (preg_match_all($regexp, $body, $matches, PREG_OFFSET_CAPTURE)) {
+        // get domain for the Content-ID, must be the same as in Mail_Mime::get()
+        if (preg_match('#@([0-9a-zA-Z\-\.]+)#', $from, $m)) {
+            $domain = $m[1];
+        }
+
         foreach ($matches[1] as $idx => $m) {
             $data = preg_replace('/\r\n/', '', $matches[3][$idx][0]);
             $data = base64_decode($data);
@@ -801,6 +800,10 @@
             $mime_type = $matches[2][$idx][0];
             $name      = $list[$hash];
 
+            if (empty($mime_type)) {
+                $mime_type = rcube_mime::image_content_type($data);
+            }
+
             // add the image to the MIME message
             if (!$name) {
                 $ext         = preg_replace('#^[^/]+/#', '', $mime_type);

--
Gitblit v1.9.1