From 96c3ab83a00b2eaccbbcc0ef19cf1dc3420d9852 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 17 Jul 2019 09:38:40 +0200 Subject: [PATCH] Send inline content as related --- .../java/eu/faircode/email/MessageHelper.java | 70 +++++++++++++------ 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index ef619e763a..23bb459345 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -349,40 +349,61 @@ public class MessageHelper { StringBuilder htmlContent = new StringBuilder(); htmlContent.append(body.toString()).append("\n"); + // multipart/mixed + // multipart/related + // multipart/alternative + // text/plain + // text/html + // inlines + // attachments + BodyPart plainPart = new MimeBodyPart(); plainPart.setContent(plainContent, "text/plain; charset=" + Charset.defaultCharset().name()); BodyPart htmlPart = new MimeBodyPart(); htmlPart.setContent(htmlContent.toString(), "text/html; charset=" + Charset.defaultCharset().name()); - Multipart alternativePart = new MimeMultipart("alternative"); - alternativePart.addBodyPart(plainPart); - alternativePart.addBodyPart(htmlPart); + Multipart altMultiPart = new MimeMultipart("alternative"); + altMultiPart.addBodyPart(plainPart); + altMultiPart.addBodyPart(htmlPart); + + boolean plain_only = (message.plain_only != null && message.plain_only); - int available = 0; + int availableAttachments = 0; + boolean hasInline = false; for (EntityAttachment attachment : attachments) - if (attachment.available) - available++; - Log.i("Attachments available=" + available); + if (attachment.available) { + availableAttachments++; + if (attachment.isInline()) + hasInline = true; + } - if (available == 0) - if (message.plain_only != null && message.plain_only) + if (availableAttachments == 0) + if (plain_only) imessage.setContent(plainContent, "text/plain; charset=" + Charset.defaultCharset().name()); else - imessage.setContent(alternativePart); + imessage.setContent(altMultiPart); else { - Multipart mixedPart = new MimeMultipart("mixed"); + Multipart mixedMultiPart = new MimeMultipart("mixed"); + Multipart relatedMultiPart = new MimeMultipart("related"); - BodyPart attachmentPart = new MimeBodyPart(); - if (message.plain_only != null && message.plain_only) - attachmentPart.setContent(plainContent, "text/plain; charset=" + Charset.defaultCharset().name()); + BodyPart bodyPart = new MimeBodyPart(); + if (plain_only) + bodyPart.setContent(plainContent, "text/plain; charset=" + Charset.defaultCharset().name()); else - attachmentPart.setContent(alternativePart); - mixedPart.addBodyPart(attachmentPart); + bodyPart.setContent(altMultiPart); + + if (hasInline && !plain_only) { + relatedMultiPart.addBodyPart(bodyPart); + MimeBodyPart relatedPart = new MimeBodyPart(); + relatedPart.setContent(relatedMultiPart); + mixedMultiPart.addBodyPart(relatedPart); + } else + mixedMultiPart.addBodyPart(bodyPart); for (final EntityAttachment attachment : attachments) if (attachment.available) { - BodyPart bpAttachment = new MimeBodyPart(); + BodyPart attachmentPart = new MimeBodyPart(); File file = attachment.getFile(context); @@ -412,18 +433,21 @@ public class MessageHelper { return getContentType(new File(filename)); } }); - bpAttachment.setDataHandler(new DataHandler(dataSource)); + attachmentPart.setDataHandler(new DataHandler(dataSource)); - bpAttachment.setFileName(attachment.name); + attachmentPart.setFileName(attachment.name); if (attachment.disposition != null) - bpAttachment.setDisposition(attachment.disposition); + attachmentPart.setDisposition(attachment.disposition); if (attachment.cid != null) - bpAttachment.setHeader("Content-ID", attachment.cid); + attachmentPart.setHeader("Content-ID", attachment.cid); - mixedPart.addBodyPart(bpAttachment); + if (attachment.isInline() && !plain_only) + relatedMultiPart.addBodyPart(attachmentPart); + else + mixedMultiPart.addBodyPart(attachmentPart); } - imessage.setContent(mixedPart); + imessage.setContent(mixedMultiPart); } }