From 2e10259992bf3c26422d374dcb5848579739bffb Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 18 Apr 2014 04:17:12 -0400
Subject: [PATCH] Fixed mbox files import

---
 program/steps/mail/import.inc |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/program/steps/mail/import.inc b/program/steps/mail/import.inc
index 2179275..b6ce471 100644
--- a/program/steps/mail/import.inc
+++ b/program/steps/mail/import.inc
@@ -33,7 +33,7 @@
             // check file content type first
             list($mtype_primary,) = explode('/', rcube_mime::file_content_type($filepath, $_FILES['_file']['name'][$i], $_FILES['_file']['type'][$i]));
 
-            if (!in_array($mtype_primary, array('text','message'))) {
+            if (!in_array($mtype_primary, array('text', 'message'))) {
                 continue;
             }
 
@@ -44,7 +44,7 @@
             }
             while ($line !== false && trim($line) == '');
 
-            if (!preg_match('/^From\s+-/', $line) && !preg_match('/^[a-z-_]+:\s+.+/i', $line)) {
+            if (!preg_match('/^From .+/', $line) && !preg_match('/^[a-z-_]+:\s+.+/i', $line)) {
                 continue;
             }
 
@@ -52,8 +52,10 @@
             fseek($fp, 0);
             while (($line = fgets($fp)) !== false) {
                 // importing mbox file, split by From - lines
-                if (preg_match('/^From\s+-/', $line) && ($lastline == '' || substr($lastline, -2) == '--')) {
+                if ($lastline === '' && strncmp($line, 'From ', 5) === 0 && strlen($line) > 5) {
                     if (!empty($message)) {
+                        // unquote ">From " lines in message body
+                        $message = preg_replace('/\n>([>]*)From /', "\n\\1From ", $message);
                         if ($RCMAIL->storage->save_message(null, rtrim($message))) {
                             $imported++;
                         }

--
Gitblit v1.9.1