From 19d4aca11f5215d2fba4f9aafc746c45e86f378d Mon Sep 17 00:00:00 2001
From: David Rivera <vinyard@vnetgaming.net>
Date: Tue, 18 Mar 2014 13:31:27 -0700
Subject: [PATCH] Decode base64 and quoted-printable encoded multipart emails

---
 ActiveSync/SOGoMailObject+ActiveSync.m | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/ActiveSync/SOGoMailObject+ActiveSync.m b/ActiveSync/SOGoMailObject+ActiveSync.m
index 9f0ce50..4285c58 100644
--- a/ActiveSync/SOGoMailObject+ActiveSync.m
+++ b/ActiveSync/SOGoMailObject+ActiveSync.m
@@ -42,6 +42,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #import <NGCards/iCalTimeZone.h>
 
 #import <NGExtensions/NGBase64Coding.h>
+#import <NGExtensions/NGQuotedPrintableCoding.h>
 #import <NGExtensions/NSString+misc.h>
 #import <NGExtensions/NSString+Encoding.h>
 #import <NGImap4/NGImap4Envelope.h>
@@ -196,7 +197,7 @@ struct GlobalObjectId {
 //
 - (NSData *) _preferredBodyDataInMultipartUsingType: (int) theType
 {
-  NSString *key, *plainKey, *htmlKey, *type, *subtype;
+  NSString *key, *plainKey, *htmlKey, *type, *subtype, *encoding;
   NSDictionary *textParts, *part;
   NSEnumerator *e;
   NSData *d;
@@ -222,12 +223,19 @@ struct GlobalObjectId {
   if (theType == 2)
     {
       d = [[self fetchPlainTextParts] objectForKey: htmlKey];
+      encoding = [[self lookupInfoForBodyPart: htmlKey] objectForKey: @"encoding"];
     }
   else if (theType == 1)
     {
       d = [[self fetchPlainTextParts] objectForKey: plainKey];
+      encoding = [[self lookupInfoForBodyPart: plainKey] objectForKey: @"encoding"];
     }
 
+  if ([encoding caseInsensitiveCompare: @"base64"] == NSOrderedSame)
+            d = [d dataByDecodingBase64];
+  else if ([encoding caseInsensitiveCompare: @"quoted-printable"] == NSOrderedSame)
+            d = [d dataByDecodingQuotedPrintableTransferEncoding];
+
   return d;
 }
 
-- 
1.7.12.4

