diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php
index 024f80ce5d430baab63c024987a7a9a565d1cacc..8ab686906d6cbe5c0a8522299d88036af04c6f02 100644
--- a/include/class.mailfetch.php
+++ b/include/class.mailfetch.php
@@ -193,9 +193,34 @@ class MailFetcher {
             $text=imap_binary($text);
             break;
             case 3:
-            // imap_base64 implies strict mode. If it refuses to decode the
-            // data, then fallback to base64_decode in non-strict mode
-            $text = (($conv=imap_base64($text))) ? $conv : base64_decode($text);
+            if(10000000 > strlen($text))
+            {
+                // imap_base64 implies strict mode. If it refuses to decode the
+                // data, then fallback to base64_decode in non-strict mode
+                $text = (($conv=imap_base64($text))) ? $conv : base64_decode($text);
+            }
+            else
+            {
+                 $temp = tempnam(sys_get_temp_dir(), 'attachments');
+                 if(!$temp)
+                     break;
+                 $f = fopen($temp, 'w');
+                 if(!$f)
+                     break;
+                 $s_filter = stream_filter_append($f, 'convert.base64-decode',STREAM_FILTER_WRITE);
+                 if(!fwrite($f, $text))
+                     break;
+                 stream_filter_remove($s_filter); 
+                 fclose($f);
+                 $f = fopen($temp, 'r');		
+                 if(!$f)
+                     break;
+                 $text = fread($f,filesize($temp));
+                 if(!$text)
+                     break;
+                 fclose($f);
+                 unlink($temp);
+            }
             break;
             case 4:
             $text=imap_qprint($text);