[#8289] fix decoding of multipart emails too
diff --git a/Allura/allura/lib/mail_util.py b/Allura/allura/lib/mail_util.py
index 7fbace5..f1de6de 100644
--- a/Allura/allura/lib/mail_util.py
+++ b/Allura/allura/lib/mail_util.py
@@ -150,7 +150,8 @@
                 filename=part.get_filename(None),
                 payload=part.get_payload(decode=True))
             charset = part.get_content_charset()
-            if charset:
+            # payload is sometimes already unicode (due to being saved in mongo?)
+            if isinstance(dpart['payload'], six.binary_type) and charset:
                 dpart['payload'] = dpart['payload'].decode(charset)
             result['parts'].append(dpart)
     else:
diff --git a/Allura/allura/tests/test_mail_util.py b/Allura/allura/tests/test_mail_util.py
index 4f99840..8568191 100644
--- a/Allura/allura/tests/test_mail_util.py
+++ b/Allura/allura/tests/test_mail_util.py
@@ -149,6 +149,38 @@
         assert isinstance(msg['payload'], unicode)
         assert_in(u'èrogrammed', msg['payload'])
 
+    def test_more_encodings_multipart(self):
+        # these are unicode strings to reflect behavior after loading 'route_email' tasks from mongo
+        s_msg = u"""Date: Sat, 25 May 2019 09:32:00 +1000
+From: <foo@bar.com>
+To: <385@bugs.proj.localhost>
+Subject: bugs
+Content-Type: multipart/alternative; boundary="===============7387203749754534836=="
+
+--===============7387203749754534836==
+Content-Type: text/plain; charset="utf-8"
+
+> Status: closed
+> Created: Thu May 23, 2019 09:24 PM UTC by admin1
+> Attachments:
+> 
+>   • foo.txt (1.0 kB; text/plain)
+> 
+
+
+--===============7387203749754534836==
+Content-Type: text/html; charset="utf-8"
+
+<html><head>... blah blah 
+...
+&gt; • foo.txt (1.0 kB; text/plain)
+"""
+        msg = parse_message(s_msg)
+        assert isinstance(msg['parts'][1]['payload'], unicode)
+        assert isinstance(msg['parts'][2]['payload'], unicode)
+        assert_in(u'• foo', msg['parts'][1]['payload'])
+        assert_in(u'• foo', msg['parts'][2]['payload'])
+
     def test_unicode_complex_message(self):
         charset = 'utf-8'
         p1 = MIMEText(u'''По оживлённым берегам