diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index d6943432f0..c5bebdebb8 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -29,6 +29,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Date; @@ -248,7 +249,28 @@ public class MessageHelper { private String getHtml(Part part) throws MessagingException { if (part.isMimeType("text/*")) try { - String s = part.getContent().toString(); + String s; + try { + s = part.getContent().toString(); + } catch (UnsupportedEncodingException ex) { + Log.w(Helper.TAG, part.getContentType() + "\n" + ex + "\n" + Log.getStackTraceString(ex)); + s = "Unsupported encoding: " + part.getContentType() + "\n\n"; + + InputStream is = part.getInputStream(); + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + byte[] buffer = new byte[8192]; + for (int len = is.read(buffer); len != -1; len = is.read(buffer)) + os.write(buffer, 0, len); + os.toByteArray(); + + try { + s += new String(os.toByteArray(), "US-ASCII"); + } catch (UnsupportedEncodingException uex) { + Log.w(Helper.TAG, uex + "\n" + Log.getStackTraceString(uex)); + } + } + if (part.isMimeType("text/plain")) s = "
" + s.replaceAll("\\r?\\n", "
") + "
"; return s; @@ -316,10 +338,24 @@ public class MessageHelper { Object content = part.getContent(); if (content instanceof InputStream || content instanceof String) { - if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()) || !TextUtils.isEmpty(part.getFileName())) { + String disposition; + try { + disposition = part.getDisposition(); + } catch (MessagingException ex) { + disposition = null; + } + + String filename; + try { + filename = part.getFileName(); + } catch (MessagingException ex) { + filename = null; + } + + if (disposition == null || Part.ATTACHMENT.equalsIgnoreCase(disposition) || !TextUtils.isEmpty(filename)) { ContentType ct = new ContentType(part.getContentType()); EntityAttachment attachment = new EntityAttachment(); - attachment.name = part.getFileName(); + attachment.name = filename; attachment.type = ct.getBaseType(); attachment.size = part.getSize(); attachment.part = part;