From 03e2d05539f28279ac48ac78eb58ddf1803cb629 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 2 Jun 2023 17:48:36 +0200 Subject: [PATCH] Check raw message ID --- app/src/main/java/eu/faircode/email/Core.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 9e9b3e156d..4548ea639f 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -494,7 +494,7 @@ class Core { break; case EntityOperation.RAW: - onRaw(context, jargs, folder, message, (IMAPFolder) ifolder); + onRaw(context, jargs, account, folder, message, (IMAPFolder) ifolder); break; case EntityOperation.BODY: @@ -1935,7 +1935,7 @@ class Core { db.message().setMessageHeaders(message.id, helper.getHeaders()); } - private static void onRaw(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException, IOException, JSONException { + private static void onRaw(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException, IOException, JSONException { // Download raw message DB db = DB.getInstance(context); @@ -1950,6 +1950,18 @@ class Core { imessage.writeTo(os); } + Properties props = MessageHelper.getSessionProperties(account.unicode); + Session isession = Session.getInstance(props, null); + + MessageHelper helper; + try (InputStream is = new FileInputStream(file)) { + helper = new MessageHelper(new MimeMessage(isession, is), context); + } + + // Yahoo is returning incorrect messages + if (!Objects.equals(message.msgid, helper.getMessageID())) + throw new MessagingException("Incorrect msgid=" + message.msgid + "/" + helper.getMessageID()); + db.message().setMessageRaw(message.id, true); }