diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 4e0b6d5104..4205b24871 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -5213,13 +5213,31 @@ public class MessageHelper { // https://datatracker.ietf.org/doc/html/rfc2634#section-2 } else { if (TextUtils.isEmpty(smimeType)) { - String name = ct.getParameter("name"); - if ("smime.p7m".equalsIgnoreCase(name)) { - getMessageParts(null, part, parts, EntityAttachment.SMIME_MESSAGE); - return parts; - } else if ("smime.p7s".equalsIgnoreCase(name)) { - getMessageParts(null, part, parts, EntityAttachment.SMIME_SIGNED_DATA); - return parts; + String xmailer = imessage.getHeader("X-Mailer", null); + if (xmailer != null && xmailer.contains("Kerio Outlook Connector")) { + Object content = tryParseMultipart(Helper.readStream(part.getInputStream()), part.getContentType()); + if (content instanceof Multipart) { + Multipart multipart = (Multipart) content; + int count = multipart.getCount(); + for (int i = 0; i < count; i++) + try { + BodyPart child = multipart.getBodyPart(i); + getMessageParts(part, child, parts, null); + } catch (ParseException ex) { + Log.w(ex); + parts.warnings.add(Log.formatThrowable(ex, false)); + } + return parts; + } + } else { + String name = ct.getParameter("name"); + if ("smime.p7m".equalsIgnoreCase(name)) { + getMessageParts(null, part, parts, EntityAttachment.SMIME_MESSAGE); + return parts; + } else if ("smime.p7s".equalsIgnoreCase(name)) { + getMessageParts(null, part, parts, EntityAttachment.SMIME_SIGNED_DATA); + return parts; + } } } StringBuilder sb = new StringBuilder();