From b390d0e43a803861268d68deefca03b09d6731f3 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 29 Jun 2018 16:43:20 +0200 Subject: Fixed apple html messages with attachments. --- .../src/domain/mime/mimetreeparser/messagepart.cpp | 11 +++++++++++ .../mime/mimetreeparser/tests/mimetreeparsertest.cpp | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) (limited to 'framework/src/domain/mime/mimetreeparser') diff --git a/framework/src/domain/mime/mimetreeparser/messagepart.cpp b/framework/src/domain/mime/mimetreeparser/messagepart.cpp index 4bed80da..1a1b2003 100644 --- a/framework/src/domain/mime/mimetreeparser/messagepart.cpp +++ b/framework/src/domain/mime/mimetreeparser/messagepart.cpp @@ -568,6 +568,17 @@ AlternativeMessagePart::AlternativeMessagePart(ObjectTreeParser *otp, KMime::Con // immediate children of this multipart/alternative node. // In this case, the HTML node is a child of multipart/related. dataHtml = findTypeInDirectChilds(mNode, "multipart/related"); + if (dataHtml) { + const auto parts = dataHtml->contents(); + for (int i = 0; i < parts.size(); i++) { + const auto p = parts.at(i); + if (i == 0 ) { + dataHtml = p; + } else if (KMime::isAttachment(p)) { + appendSubPart(MimeMessagePart::Ptr(new MimeMessagePart(otp, p, true))); + } + } + } // Still not found? Stupid apple mail actually puts the attachments inside of the // multipart/alternative, which is wrong. Therefore we also have to look for multipart/mixed diff --git a/framework/src/domain/mime/mimetreeparser/tests/mimetreeparsertest.cpp b/framework/src/domain/mime/mimetreeparser/tests/mimetreeparsertest.cpp index 97c79fe7..6b4280a9 100644 --- a/framework/src/domain/mime/mimetreeparser/tests/mimetreeparsertest.cpp +++ b/framework/src/domain/mime/mimetreeparser/tests/mimetreeparsertest.cpp @@ -401,6 +401,23 @@ private slots: QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned); QCOMPARE(otp.plainTextContent(), QString::fromUtf8("test\n\n-- \nThis is a HTML signature.\n")); } + + void testAppleHtmlWithAttachments() + { + MimeTreeParser::ObjectTreeParser otp; + otp.parseObjectTree(readMailFromFile("applehtmlwithattachments.mbox")); + otp.decryptParts(); + auto partList = otp.collectContentParts(); + QCOMPARE(partList.size(), 1); + auto part = partList[0].dynamicCast(); + QCOMPARE(part->encryptions().size(), 0); + QCOMPARE(part->signatures().size(), 0); + QCOMPARE(otp.plainTextContent(), QString::fromUtf8("Hi,\n\nThis is an HTML message with attachments.\n\nCheers,\nChristian")); + QCOMPARE(otp.htmlContent(), QString::fromUtf8("
Hi,

This is an HTML message with attachments.

Cheers,
Christian
")); + + auto attachments = otp.collectAttachmentParts(); + QCOMPARE(attachments.size(), 1); + } }; QTEST_GUILESS_MAIN(InterfaceTest) -- cgit v1.2.3