From 4fbbd42292e9432c13d77b3d0479c603229790c8 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 14 Feb 2023 10:36:11 +0100 Subject: [PATCH] Native DKIM: use MIME stream --- .../main/java/eu/faircode/email/MessageHelper.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index e10ec1f2bf..d404e6ea2e 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -1996,10 +1996,13 @@ public class MessageHelper { try { // Workaround reformatted headers (Content-Type) - InternetHeaders ih = new InternetHeaders(((ReadableMime) imessage).getMimeStream(), true); + // This will do a BODY.PEEK[] + Properties props = MessageHelper.getSessionProperties(true); + Session isession = Session.getInstance(props, null); + MimeMessage amessage = new MimeMessage(isession, ((ReadableMime) imessage).getMimeStream()); // https://datatracker.ietf.org/doc/html/rfc6376/ - String[] headers = ih.getHeader("DKIM-Signature"); + String[] headers = amessage.getHeader("DKIM-Signature"); if (headers == null || headers.length < 1) return signers; @@ -2064,7 +2067,7 @@ public class MessageHelper { String[] values = ("DKIM-Signature".equals(key) ? new String[]{header} - : ih.getHeader(key)); + : amessage.getHeader(key)); if (values == null || idx > values.length) { // https://datatracker.ietf.org/doc/html/rfc6376/#section-5.4 Log.i("DKIM missing header=" + @@ -2086,7 +2089,7 @@ public class MessageHelper { else { // Find original header/name (case sensitive) int _idx = values.length - idx; - Enumeration
oheaders = ih.getAllHeaders(); + Enumeration
oheaders = amessage.getAllHeaders(); while (oheaders.hasMoreElements()) { Header oheader = oheaders.nextElement(); if (key.equalsIgnoreCase(oheader.getName())) { @@ -2111,7 +2114,7 @@ public class MessageHelper { Log.i("DKIM head=" + head.toString().replace("\r\n", "|")); ByteArrayOutputStream bos = new ByteArrayOutputStream(); - Helper.copy(imessage.getRawInputStream(), bos); + Helper.copy(amessage.getRawInputStream(), bos); String body = bos.toString(); // TODO: charset? if ("simple".equals(c[c.length > 1 ? 1 : 0])) { if (TextUtils.isEmpty(body))