From a23f535bb9d1100b25424a66623a5a3db3638e12 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 26 Jun 2022 22:06:38 +0200 Subject: [PATCH] Try parse string multipart --- .../java/eu/faircode/email/MessageHelper.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 38b438a8fd..f62be17c4c 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -107,6 +107,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.activation.DataHandler; +import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.activation.FileTypeMap; import javax.mail.Address; @@ -4051,6 +4052,10 @@ public class MessageHelper { if (part.isMimeType("multipart/mixed")) { Object content = part.getContent(); + + if (content instanceof String) + content = tryParseMultipart((String) content, part.getContentType()); + if (content instanceof Multipart) { Multipart mp = (Multipart) content; for (int i = 0; i < mp.getCount(); i++) { @@ -4074,6 +4079,10 @@ public class MessageHelper { "application/pkcs7-signature".equals(protocol) || "application/x-pkcs7-signature".equals(protocol)) { Object content = part.getContent(); + + if (content instanceof String) + content = tryParseMultipart((String) content, part.getContentType()); + if (content instanceof Multipart) { Multipart multipart = (Multipart) content; if (multipart.getCount() == 2) { @@ -4120,6 +4129,10 @@ public class MessageHelper { String protocol = ct.getParameter("protocol"); if ("application/pgp-encrypted".equals(protocol) || protocol == null) { Object content = part.getContent(); + + if (content instanceof String) + content = tryParseMultipart((String) content, part.getContentType()); + if (content instanceof Multipart) { Multipart multipart = (Multipart) content; if (multipart.getCount() == 2) { @@ -4218,6 +4231,10 @@ public class MessageHelper { if (part.isMimeType("multipart/*")) { Multipart multipart; Object content = part.getContent(); // Should always be Multipart + + if (content instanceof String) + content = tryParseMultipart((String) content, part.getContentType()); + if (content instanceof Multipart) { multipart = (Multipart) part.getContent(); int count = multipart.getCount(); @@ -4374,6 +4391,35 @@ public class MessageHelper { } } + private Object tryParseMultipart(String text, String contentType) { + try { + return new MimeMultipart(new DataSource() { + @Override + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(text.getBytes(StandardCharsets.ISO_8859_1)); + } + + @Override + public OutputStream getOutputStream() throws IOException { + return null; + } + + @Override + public String getContentType() { + return contentType; + } + + @Override + public String getName() { + return "String"; + } + }); + } catch (MessagingException ex) { + Log.e(ex); + return text; + } + } + private void ensureEnvelope() throws MessagingException { _ensureMessage(false, false); }