Page MenuHome GnuPG

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 9d04bee..69ba517 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -1,190 +1,194 @@
# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
# SPDX-License-Identifier: BSD-3-Clause
ecm_setup_version(PROJECT
VARIABLE_PREFIX MIMETREEPARSER_CORE
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/mimetreeparser_core_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KPim${KF_MAJOR_VERSION}MimeTreeParserCoreConfigVersion.cmake"
SOVERSION 5
)
# private library
add_library(mimetreeparserprivate STATIC)
set_target_properties(mimetreeparserprivate PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_sources(mimetreeparserprivate PUBLIC
messagepart.h
messagepart.cpp
crypto.h
crypto.cpp
cryptohelper.h
cryptohelper.cpp
utils.h
utils.cpp
+ mailtemplates.h
+ mailtemplates.cpp
+ mailcrypto.h
+ mailcrypto.cpp
)
target_link_libraries(mimetreeparserprivate
PUBLIC
KPim${KF_MAJOR_VERSION}::Mime
KF${KF_MAJOR_VERSION}::I18n
Qt${KF_MAJOR_VERSION}::Gui
KF${KF_MAJOR_VERSION}::Codecs
Gpgme::Gpgme
)
ecm_qt_declare_logging_category(mimetreeparserprivate
HEADER mimetreeparser_core_debug.h
IDENTIFIER MIMETREEPARSER_CORE_LOG
CATEGORY_NAME org.kde.pim.mimetreeparser.core
DESCRIPTION "mimetreeparser (pim lib)"
EXPORT MIMETREEPARSERNG
)
# public dynamic library
add_library(KPim${KF_MAJOR_VERSION}MimeTreeParserCore)
add_library(KPim${KF_MAJOR_VERSION}::MimeTreeParserCore
ALIAS KPim${KF_MAJOR_VERSION}MimeTreeParserCore
)
target_sources(KPim${KF_MAJOR_VERSION}MimeTreeParserCore PRIVATE
errors.h
async.h
attachmentmodel.h
bodypartformatter.h
bodypartformatterbasefactory.h
bodypartformatterbasefactory_p.h
enums.h
htmlutils.h
- mailcrypto.h
messageparser.h
objecttreeparser.h
partmetadata.h
partmodel.h
attachmentmodel.cpp
bodypartformatter.cpp
bodypartformatter_impl.cpp
bodypartformatterbasefactory.cpp
htmlutils.cpp
- mailcrypto.cpp
messageparser.cpp
objecttreeparser.cpp
partmodel.cpp
)
if (COMPILE_WITH_UNITY_CMAKE_SUPPORT)
set_target_properties(KPim${KF_MAJOR_VERSION}MimeTreeParserCore PROPERTIES UNITY_BUILD ON)
endif()
generate_export_header(KPim${KF_MAJOR_VERSION}MimeTreeParserCore BASE_NAME mimetreeparser_core)
target_include_directories(KPim${KF_MAJOR_VERSION}MimeTreeParserCore
INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR}/KPim${KF_MAJOR_VERSION}/MimeTreeParserCore>")
target_link_libraries(KPim${KF_MAJOR_VERSION}MimeTreeParserCore
PUBLIC
KPim${KF_MAJOR_VERSION}::Mime
KF${KF_MAJOR_VERSION}::I18n
Qt${KF_MAJOR_VERSION}::Gui
PRIVATE
mimetreeparserprivate
)
set_target_properties(KPim${KF_MAJOR_VERSION}MimeTreeParserCore PROPERTIES
VERSION ${MIMETREEPARSERNG_VERSION}
SOVERSION ${MIMETREEPARSERNG_SOVERSION}
EXPORT_NAME MimeTreeParserCore
)
ecm_generate_pri_file(BASE_NAME MimeTreeParserCore
LIB_NAME KPim${KF_MAJOR_VERSION}MimeTreeParserCore
DEPS "MimeTreeParserCore"
FILENAME_VAR PRI_FILENAME
)
install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
install(TARGETS
KPim${KF_MAJOR_VERSION}MimeTreeParserCore
EXPORT KPim${KF_MAJOR_VERSION}MimeTreeParserCoreTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
)
ecm_generate_headers(MimeTreeParserCore_CamelCase_HEADERS
HEADER_NAMES
AttachmentModel
ObjectTreeParser
MessageParser
PartModel
+ MailCrypto
+ MailTemplates
REQUIRED_HEADERS MimeTreeParserCore_HEADERS
PREFIX MimeTreeParserCore
)
install(FILES
${MimeTreeParserCore_CamelCase_HEADERS}
DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim${KF_MAJOR_VERSION}/MimeTreeParserCore/MimeTreeParserCore
COMPONENT Devel
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/mimetreeparser_core_export.h
${MimeTreeParserCore_HEADERS}
DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim${KF_MAJOR_VERSION}/MimeTreeParserCore/mimetreeparsercore
COMPONENT Devel
)
if (BUILD_QCH)
ecm_add_qch(
KPim${KF_MAJOR_VERSION}MimeTreeParserCore_QCH
NAME MimeTreeParserCore
BASE_NAME KPim${KF_MAJOR_VERSION}MimeTreeParserCore
VERSION ${PIM_VERSION}
ORG_DOMAIN org.kde
# using only public headers, to cover only public API
SOURCES ${MimeTreeParser_HEADERS}
MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md"
LINK_QCHS
Qt${QT_MAJOR_VERSION}Core_QCH
INCLUDE_DIRS
${CMAKE_CURRENT_BINARY_DIR}
BLANK_MACROS
MIMETREEPARSERCORE_EXPORT
TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
COMPONENT Devel
)
endif()
########### CMake Config Files ###########
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KPim${KF_MAJOR_VERSION}MimeTreeParserCore")
if (BUILD_QCH)
ecm_install_qch_export(
TARGETS KPim${KF_MAJOR_VERSION}MimeTreeParserCore_QCH
FILE KPim${KF_MAJOR_VERSION}MimeTreeParserCoreQchTargets.cmake
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
COMPONENT Devel
)
set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KPim${KF_MAJOR_VERSION}MimeTreeParserCoreQchTargets.cmake\")")
endif()
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/KPimMimeTreeParserCoreConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/KPim${KF_MAJOR_VERSION}MimeTreeParserCoreConfig.cmake"
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/KPim${KF_MAJOR_VERSION}MimeTreeParserCoreConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/KPim${KF_MAJOR_VERSION}MimeTreeParserCoreConfigVersion.cmake"
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
COMPONENT Devel
)
install(EXPORT KPim${KF_MAJOR_VERSION}MimeTreeParserCoreTargets
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
FILE KPim${KF_MAJOR_VERSION}MimeTreeParserCoreTargets.cmake
NAMESPACE KPim${KF_MAJOR_VERSION}::
)
if (BUILD_TESTING)
add_subdirectory(autotests)
endif()
diff --git a/src/core/autotests/CMakeLists.txt b/src/core/autotests/CMakeLists.txt
index 1db9672..5bd6d25 100644
--- a/src/core/autotests/CMakeLists.txt
+++ b/src/core/autotests/CMakeLists.txt
@@ -1,77 +1,88 @@
# SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+# SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
# SPDX-License-Identifier: BSD-3-Clause
set(AUTOMOC ON)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
add_definitions(-DMAIL_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../testdata" )
+add_definitions(-DMAILTEMPLATE_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../templatetestdata" )
+
include(ECMAddTests)
include(${CMAKE_SOURCE_DIR}/cmake/modules/add_gpg_crypto_test.cmake)
function(add_mimetreeparser_class_unittest _name _additionalSource)
add_executable(${_name} ${_name}.cpp setupenv.cpp ${_additionalSource})
target_link_libraries(${_name} PRIVATE
Qt::Test
mimetreeparserprivate
KPim${KF_MAJOR_VERSION}::MimeTreeParserCore
)
target_include_directories(${_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
add_test(NAME ${_name} COMMAND $<TARGET_FILE:${_name}>)
endfunction()
function(add_mimetreeparser_crypto_unittest _name)
add_executable(${_name} ${_name}.cpp setupenv.cpp)
if (QT_MAJOR_VERSION STREQUAL "6")
target_link_libraries(${_name} PRIVATE QGpgmeQt6 Qt6::Core5Compat)
else()
target_link_libraries(${_name} PRIVATE Gpgme::Gpgme)
endif()
target_include_directories(${_name} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/..
${GPGME_INCLUDE_DIRS}
)
target_link_libraries(${_name} PRIVATE
Qt::Test
mimetreeparserprivate
KPim${KF_MAJOR_VERSION}::MimeTreeParserCore
)
add_gpg_crypto_test(${_name} mimetreeparser-${_name})
endfunction()
add_subdirectory(gnupg_home)
add_mimetreeparser_crypto_unittest(attachmenttest)
add_mimetreeparser_class_unittest(cryptohelpertest "../cryptohelper.cpp")
add_definitions( -DMAIL_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../testdata" )
include(${CMAKE_SOURCE_DIR}/cmake/modules/add_gpg_crypto_test.cmake)
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/..
)
include_directories(${GPGME_INCLUDE_DIRS})
include(ECMAddTests)
add_executable(mimetreeparsertest mimetreeparsertest.cpp)
add_gpg_crypto_test(mimetreeparsertest mimetreeparsertest)
target_link_libraries(mimetreeparsertest PUBLIC
Qt::Test
mimetreeparserprivate
KPim${KF_MAJOR_VERSION}::MimeTreeParserCore
)
add_executable(gpgerrortest gpgerrortest.cpp)
target_link_libraries(gpgerrortest PUBLIC
Qt::Test
mimetreeparserprivate
KPim${KF_MAJOR_VERSION}::MimeTreeParserCore
)
add_test(NAME gpgerrortest COMMAND $<TARGET_FILE:gpgerrortest>)
add_executable(cryptotest cryptotest.cpp)
add_gpg_crypto_test(cryptotest cryptotest)
target_link_libraries(cryptotest
Qt::Test
mimetreeparserprivate
KPim${KF_MAJOR_VERSION}::MimeTreeParserCore
)
+
+add_executable(mailtemplatetest mailtemplatetest.cpp)
+add_gpg_crypto_test(mailtemplatetest mailtemplatetest)
+target_link_libraries(mailtemplatetest
+ Qt::Test
+ mimetreeparserprivate
+ KPim${KF_MAJOR_VERSION}::MimeTreeParserCore
+)
diff --git a/src/core/autotests/mailtemplatetest.cpp b/src/core/autotests/mailtemplatetest.cpp
new file mode 100644
index 0000000..cef3005
--- /dev/null
+++ b/src/core/autotests/mailtemplatetest.cpp
@@ -0,0 +1,669 @@
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <QDebug>
+#include <QStandardPaths>
+#include <QTest>
+#include <functional>
+
+#include <MimeTreeParserCore/MailCrypto>
+#include <MimeTreeParserCore/MailTemplates>
+
+static KMime::Content *getSubpart(KMime::Content *msg, const QByteArray &mimeType)
+{
+ const auto contents = msg->contents();
+ for (const auto c : contents) {
+ if (c->contentType(false)->mimeType() == mimeType) {
+ return c;
+ }
+ }
+ return nullptr;
+}
+
+static QByteArray readMailFromFile(const QString &mailFile)
+{
+ Q_ASSERT(!QString::fromLatin1(MAILTEMPLATE_DATA_DIR).isEmpty());
+ QFile file(QLatin1String(MAILTEMPLATE_DATA_DIR) + QLatin1Char('/') + mailFile);
+ file.open(QIODevice::ReadOnly);
+ Q_ASSERT(file.isOpen());
+ return file.readAll();
+}
+
+static KMime::Message::Ptr readMail(const QString &mailFile)
+{
+ auto msg = KMime::Message::Ptr::create();
+ msg->setContent(readMailFromFile(mailFile));
+ msg->parse();
+ return msg;
+}
+
+static QString removeFirstLine(const QString &s)
+{
+ return s.mid(s.indexOf(QLatin1String("\n")) + 1);
+}
+
+static QString normalize(const QString &s)
+{
+ auto text = s;
+ text.replace(QLatin1String(">"), QString());
+ text.replace(QLatin1String("\n"), QString());
+ text.replace(QLatin1String("="), QString());
+ text.replace(QLatin1String(" "), QString());
+ return text;
+}
+
+static QString unquote(const QString &s)
+{
+ auto text = s;
+ text.replace(QLatin1String("> "), QString());
+ return text;
+}
+
+class MailTemplateTest : public QObject
+{
+ Q_OBJECT
+
+ bool validate(KMime::Message::Ptr msg)
+ {
+ const auto data = msg->encodedContent();
+ // IMAP compat: The ASCII NUL character, %x00, MUST NOT be used at any time.
+ if (data.contains('\0')) {
+ return false;
+ }
+ return true;
+ }
+
+private Q_SLOTS:
+
+ // Ensures we don't crash on garbage
+ void testEmpty()
+ {
+ MailTemplates::reply(KMime::Message::Ptr::create(), [&](const KMime::Message::Ptr &) {});
+ }
+
+ void testPlainReply()
+ {
+ auto msg = readMail(QLatin1String("plaintext.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QCOMPARE(normalize(removeFirstLine(QString::fromUtf8(result->body()))), normalize(QString::fromUtf8(msg->body())));
+ QCOMPARE(result->to()->addresses(), QVector<QByteArray>{{"konqi@example.org"}});
+ QCOMPARE(result->subject()->asUnicodeString(), QLatin1String{"RE: A random subject with alternative contenttype"});
+ }
+
+ void testHtmlReply()
+ {
+ auto msg = readMail(QLatin1String("html.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QCOMPARE(unquote(removeFirstLine(QString::fromUtf8(result->body()))), QLatin1String("HTML text"));
+ }
+
+ void testStripSignatureReply()
+ {
+ auto msg = readMail(QLatin1String("plaintext-with-signature.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QVERIFY(!result->body().contains("This is a signature"));
+ }
+
+ void testStripSignatureHtmlReply()
+ {
+ auto msg = readMail(QLatin1String("html-with-signature.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QVERIFY(!result->body().contains("This is a signature"));
+ }
+
+ // We can't test this because we can't commit a CRLF file due to commit hooks.
+ // void testStripSignatureCrlfReply()
+ // {
+ // auto msg = readMail("crlf-with-signature.mbox");
+ // KMime::Message::Ptr result;
+ // MailTemplates::reply(msg, [&] (const KMime::Message::Ptr &r) {
+ // result = r;
+ // });
+ // QTRY_VERIFY(result);
+ // QVERIFY(!result->body().contains("This is a signature"));
+ // }
+
+ void testStripEncryptedCRLFReply()
+ {
+ auto msg = readMail(QLatin1String("crlf-encrypted-with-signature.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QVERIFY(!result->body().contains("This is a signature"));
+ }
+
+ void testHtml8BitEncodedReply()
+ {
+ auto msg = readMail(QLatin1String("8bitencoded.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QVERIFY(MailTemplates::plaintextContent(result).contains(QString::fromUtf8("Why Pisa’s Tower")));
+ }
+
+ void testMultipartSignedReply()
+ {
+ auto msg = readMail(QLatin1String("openpgp-signed-mailinglist.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ auto content = removeFirstLine(QString::fromUtf8(result->body()));
+ QVERIFY(!content.isEmpty());
+ QVERIFY(content.contains(QLatin1String("i noticed a new branch")));
+ }
+
+ void testMultipartAlternativeReply()
+ {
+ auto msg = readMail(QLatin1String("alternative.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ auto content = removeFirstLine(QString::fromUtf8(result->body()));
+ QVERIFY(!content.isEmpty());
+ QCOMPARE(unquote(content),
+ QLatin1String("If you can see this text it means that your email client couldn't display our newsletter properly.\nPlease visit this link to "
+ "view the newsletter on our website: http://www.gog.com/newsletter/\n"));
+ }
+
+ void testAttachmentReply()
+ {
+ auto msg = readMail(QLatin1String("plaintextattachment.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ auto content = removeFirstLine(QString::fromUtf8(result->body()));
+ QVERIFY(!content.isEmpty());
+ QCOMPARE(unquote(content), QLatin1String("sdlkjsdjf"));
+ }
+
+ void testMultiRecipientReply()
+ {
+ auto msg = readMail(QLatin1String("multirecipients.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ auto content = removeFirstLine(QString::fromUtf8(result->body()));
+ QVERIFY(!content.isEmpty());
+ QCOMPARE(unquote(content), QLatin1String("test"));
+ QCOMPARE(result->to()->addresses(), QVector<QByteArray>{{"from@example.org"}});
+ auto l = QVector<QByteArray>{{"to1@example.org"}, {"to2@example.org"}, {"cc1@example.org"}, {"cc2@example.org"}};
+ QCOMPARE(result->cc()->addresses(), l);
+ }
+
+ void testMultiRecipientReplyFilteringMe()
+ {
+ KMime::Types::AddrSpecList me;
+ KMime::Types::Mailbox mb;
+ mb.setAddress("to1@example.org");
+ me << mb.addrSpec();
+
+ auto msg = readMail(QLatin1String("multirecipients.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(
+ msg,
+ [&](const KMime::Message::Ptr &r) {
+ result = r;
+ },
+ me);
+ QTRY_VERIFY(result);
+ QCOMPARE(result->to()->addresses(), QVector<QByteArray>{{"from@example.org"}});
+ auto l = QVector<QByteArray>{{"to2@example.org"}, {"cc1@example.org"}, {"cc2@example.org"}};
+ QCOMPARE(result->cc()->addresses(), l);
+ }
+
+ void testMultiRecipientReplyOwnMessage()
+ {
+ KMime::Types::AddrSpecList me;
+ KMime::Types::Mailbox mb;
+ mb.setAddress("from@example.org");
+ me << mb.addrSpec();
+
+ auto msg = readMail(QLatin1String("multirecipients.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(
+ msg,
+ [&](const KMime::Message::Ptr &r) {
+ result = r;
+ },
+ me);
+ QTRY_VERIFY(result);
+
+ auto to = QVector<QByteArray>{{"to1@example.org"}, {"to2@example.org"}};
+ QCOMPARE(result->to()->addresses(), to);
+ auto cc = QVector<QByteArray>{{"cc1@example.org"}, {"cc2@example.org"}};
+ QCOMPARE(result->cc()->addresses(), cc);
+ }
+
+ void testReplyList()
+ {
+ KMime::Types::AddrSpecList me;
+ KMime::Types::Mailbox mb;
+ mb.setAddress("me@example.org");
+ me << mb.addrSpec();
+
+ auto msg = readMail(QLatin1String("listmessage.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(
+ msg,
+ [&](const KMime::Message::Ptr &r) {
+ result = r;
+ },
+ me);
+ QTRY_VERIFY(result);
+
+ auto to = QVector<QByteArray>{{"list@example.org"}};
+ QCOMPARE(result->to()->addresses(), to);
+ auto cc = QVector<QByteArray>{{"to@example.org"}, {"cc1@example.org"}};
+ QCOMPARE(result->cc()->addresses(), cc);
+ }
+
+ void testForwardAsAttachment()
+ {
+ auto msg = readMail(QString::fromUtf8("plaintext.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::forward(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QCOMPARE(result->subject(false)->asUnicodeString(), QLatin1String{"FW: A random subject with alternative contenttype"});
+ QCOMPARE(result->to()->addresses(), {});
+ QCOMPARE(result->cc()->addresses(), {});
+ QCOMPARE(result->references()->identifiers(), {"1505824.VT1nqpAGu0@vkpc5"});
+ QCOMPARE(result->inReplyTo()->identifiers(), {});
+
+ auto attachments = result->attachments();
+ QCOMPARE(attachments.size(), 1);
+ auto attachment = attachments[0];
+ QCOMPARE(attachment->contentDisposition(false)->disposition(), KMime::Headers::CDinline);
+ QCOMPARE(attachment->contentDisposition(false)->filename(), QLatin1String{"A random subject with alternative contenttype.eml"});
+ QVERIFY(attachment->bodyIsMessage());
+
+ attachment->parse();
+ auto origMsg = attachment->bodyAsMessage();
+ QCOMPARE(origMsg->subject(false)->asUnicodeString(), QLatin1String{"A random subject with alternative contenttype"});
+ }
+
+ void testEncryptedForwardAsAttachment()
+ {
+ auto msg = readMail(QLatin1String("openpgp-encrypted.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::forward(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QCOMPARE(result->subject(false)->asUnicodeString(), QLatin1String{"FW: OpenPGP encrypted"});
+ QCOMPARE(result->to()->addresses(), {});
+ QCOMPARE(result->cc()->addresses(), {});
+ QCOMPARE(result->references()->identifiers(), {"1505824.VT2nqpAGu0@vkpc5"});
+ QCOMPARE(result->inReplyTo()->identifiers(), {});
+
+ auto attachments = result->attachments();
+ QCOMPARE(attachments.size(), 1);
+ auto attachment = attachments[0];
+ QCOMPARE(attachment->contentDisposition(false)->disposition(), KMime::Headers::CDinline);
+ QCOMPARE(attachment->contentDisposition(false)->filename(), QLatin1String{"OpenPGP encrypted.eml"});
+ QVERIFY(attachment->bodyIsMessage());
+
+ attachment->parse();
+ auto origMsg = attachment->bodyAsMessage();
+ QCOMPARE(origMsg->subject(false)->asUnicodeString(), QLatin1String{"OpenPGP encrypted"});
+ }
+
+ void testEncryptedWithAttachmentsForwardAsAttachment()
+ {
+ auto msg = readMail(QLatin1String("openpgp-encrypted-two-attachments.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::forward(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QCOMPARE(result->subject(false)->asUnicodeString(), QLatin1String{"FW: OpenPGP encrypted with 2 text attachments"});
+ QCOMPARE(result->to()->addresses(), {});
+ QCOMPARE(result->cc()->addresses(), {});
+ QCOMPARE(result->references()->identifiers(), {"1505824.VT0nqpAGu0@vkpc5"});
+ QCOMPARE(result->inReplyTo()->identifiers(), {});
+
+ auto attachments = result->attachments();
+ QCOMPARE(attachments.size(), 1);
+ auto attachment = attachments[0];
+ QCOMPARE(attachment->contentDisposition(false)->disposition(), KMime::Headers::CDinline);
+ QCOMPARE(attachment->contentDisposition(false)->filename(), QLatin1String{"OpenPGP encrypted with 2 text attachments.eml"});
+ QVERIFY(attachment->bodyIsMessage());
+
+ attachment->parse();
+ auto origMsg = attachment->bodyAsMessage();
+ QCOMPARE(origMsg->subject(false)->asUnicodeString(), QLatin1String{"OpenPGP encrypted with 2 text attachments"});
+
+ auto attattachments = origMsg->attachments();
+ QCOMPARE(attattachments.size(), 2);
+ QCOMPARE(attattachments[0]->contentDisposition(false)->filename(), QLatin1String{"attachment1.txt"});
+ QCOMPARE(attattachments[1]->contentDisposition(false)->filename(), QLatin1String{"attachment2.txt"});
+ }
+
+ void testForwardAlreadyForwarded()
+ {
+ auto msg = readMail(QLatin1String("cid-links-forwarded-inline.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::forward(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QCOMPARE(result->subject(false)->asUnicodeString(), QLatin1String{"FW: Html Hello (inlin)"});
+ QCOMPARE(result->to()->addresses(), {});
+ QCOMPARE(result->cc()->addresses(), {});
+ const QVector<QByteArray> references{QByteArray{"a1777ec781546ccc5dcd4918a5e4e03d@info"}, QByteArray{"46b164308eb6056361c866932a740a3c@info"}};
+ QCOMPARE(result->references()->identifiers(), references);
+ QCOMPARE(result->inReplyTo()->identifiers(), {});
+ }
+
+ void testCreatePlainMail()
+ {
+ QStringList to = {{QLatin1String("to@example.org")}};
+ QStringList cc = {{QLatin1String("cc@example.org")}};
+ QStringList bcc = {{QLatin1String("bcc@example.org")}};
+
+ KMime::Types::Mailbox from;
+ from.fromUnicodeString(QLatin1String("from@example.org"));
+ QString subject = QLatin1String("subject");
+ QString body = QLatin1String("body");
+ QList<Attachment> attachments;
+
+ auto result = MailTemplates::createMessage({}, to, cc, bcc, from, subject, body, false, attachments);
+
+ QVERIFY(result);
+ QVERIFY(validate(result));
+ QCOMPARE(result->subject()->asUnicodeString(), subject);
+ QCOMPARE(result->body(), body.toUtf8());
+ QVERIFY(result->date(false)->dateTime().isValid());
+ QVERIFY(result->contentType()->isMimeType("text/plain"));
+ QVERIFY(result->messageID(false) && !result->messageID(false)->isEmpty());
+ }
+
+ void testCreateHtmlMail()
+ {
+ QStringList to = {{QLatin1String("to@example.org")}};
+ QStringList cc = {{QLatin1String("cc@example.org")}};
+ QStringList bcc = {{QLatin1String("bcc@example.org")}};
+
+ KMime::Types::Mailbox from;
+ from.fromUnicodeString(QLatin1String("from@example.org"));
+ QString subject = QLatin1String("subject");
+ QString body = QLatin1String("body");
+ QList<Attachment> attachments;
+
+ auto result = MailTemplates::createMessage({}, to, cc, bcc, from, subject, body, true, attachments);
+
+ QVERIFY(result);
+ QVERIFY(validate(result));
+ QCOMPARE(result->subject()->asUnicodeString(), subject);
+ QVERIFY(result->date(false)->dateTime().isValid());
+ QVERIFY(result->contentType()->isMimeType("multipart/alternative"));
+ const auto contents = result->contents();
+ // 1 Plain + 1 Html
+ QCOMPARE(contents.size(), 2);
+ }
+
+ void testCreatePlainMailWithAttachments()
+ {
+ QStringList to = {{QLatin1String("to@example.org")}};
+ QStringList cc = {{QLatin1String("cc@example.org")}};
+ QStringList bcc = {{QLatin1String("bcc@example.org")}};
+
+ KMime::Types::Mailbox from;
+ from.fromUnicodeString(QLatin1String("from@example.org"));
+ QString subject = QLatin1String("subject");
+ QString body = QLatin1String("body");
+ QList<Attachment> attachments = {{QLatin1String("name"), QLatin1String("filename"), "mimetype", true, "inlineAttachment"},
+ {QLatin1String("name"), QLatin1String("filename"), "mimetype", false, "nonInlineAttachment"}};
+
+ auto result = MailTemplates::createMessage({}, to, cc, bcc, from, subject, body, false, attachments);
+
+ QVERIFY(result);
+ QVERIFY(validate(result));
+ QCOMPARE(result->subject()->asUnicodeString(), subject);
+ QVERIFY(result->contentType()->isMimeType("multipart/mixed"));
+ QVERIFY(result->date(false)->dateTime().isValid());
+ const auto contents = result->contents();
+ // 1 Plain + 2 Attachments
+ QCOMPARE(contents.size(), 3);
+ auto p = getSubpart(result.data(), "text/plain");
+ QVERIFY(p);
+ }
+
+ void testCreateHtmlMailWithAttachments()
+ {
+ QStringList to = {{QLatin1String("to@example.org")}};
+ QStringList cc = {{QLatin1String("cc@example.org")}};
+ QStringList bcc = {{QLatin1String("bcc@example.org")}};
+
+ KMime::Types::Mailbox from;
+ from.fromUnicodeString(QLatin1String("from@example.org"));
+ QString subject = QLatin1String("subject");
+ QString body = QLatin1String("body");
+ QList<Attachment> attachments = {
+ {QLatin1String("name"), QLatin1String("filename"), "mimetype", true, "inlineAttachment"},
+ {QLatin1String("name"), QLatin1String("filename"), "mimetype", false, "nonInlineAttachment"},
+ };
+
+ auto result = MailTemplates::createMessage({}, to, cc, bcc, from, subject, body, true, attachments);
+
+ QVERIFY(result);
+ QVERIFY(validate(result));
+ QCOMPARE(result->subject()->asUnicodeString(), subject);
+ QVERIFY(result->contentType()->isMimeType("multipart/mixed"));
+ QVERIFY(result->date(false)->dateTime().isValid());
+ const auto contents = result->contents();
+ // 1 alternative + 2 Attachments
+ QCOMPARE(contents.size(), 3);
+ auto p = getSubpart(result.data(), "multipart/alternative");
+ QVERIFY(p);
+ }
+
+ void testCreatePlainMailSigned()
+ {
+ QStringList to = {{QLatin1String("to@example.org")}};
+ QStringList cc = {{QLatin1String("cc@example.org")}};
+ QStringList bcc = {{QLatin1String("bcc@example.org")}};
+
+ KMime::Types::Mailbox from;
+ from.fromUnicodeString(QLatin1String("from@example.org"));
+ QString subject = QLatin1String("subject");
+ QString body = QLatin1String("body");
+ QList<Attachment> attachments;
+
+ auto keys = Crypto::findKeys({}, true, false);
+ auto result = MailTemplates::createMessage({}, to, cc, bcc, from, subject, body, false, attachments, keys, {}, keys[0]);
+
+ QVERIFY(result);
+ QVERIFY(validate(result));
+ // qWarning() << "---------------------------------";
+ // qWarning().noquote() << result->encodedContent();
+ // qWarning() << "---------------------------------";
+ QCOMPARE(result->subject()->asUnicodeString(), subject);
+ QVERIFY(result->date(false)->dateTime().isValid());
+
+ QCOMPARE(result->contentType()->mimeType(), QByteArray{"multipart/signed"});
+ QCOMPARE(result->attachments().size(), 1);
+ QCOMPARE(result->attachments()[0]->contentDisposition()->filename(), QLatin1String{"0x8F246DE6.asc"});
+ QCOMPARE(result->contents().size(), 2);
+
+ auto signedMessage = result->contents()[0];
+ QVERIFY(signedMessage->contentType()->isMimeType("multipart/mixed"));
+ const auto contents = signedMessage->contents();
+ QCOMPARE(contents.size(), 2);
+ QCOMPARE(contents[0]->contentType()->mimeType(), QByteArray{"text/plain"});
+ QCOMPARE(contents[1]->contentType()->mimeType(), QByteArray{"application/pgp-keys"});
+ QCOMPARE(contents[1]->contentDisposition()->filename(), QLatin1String{"0x8F246DE6.asc"});
+
+ auto signature = result->contents()[1];
+ QCOMPARE(signature->contentDisposition()->filename(), QLatin1String{"signature.asc"});
+ QVERIFY(signature->contentType()->isMimeType("application/pgp-signature"));
+ }
+
+ void testCreatePlainMailWithAttachmentsSigned()
+ {
+ QStringList to = {{QLatin1String("to@example.org")}};
+ QStringList cc = {{QLatin1String("cc@example.org")}};
+ QStringList bcc = {{QLatin1String("bcc@example.org")}};
+
+ KMime::Types::Mailbox from;
+ from.fromUnicodeString(QLatin1String("from@example.org"));
+ QString subject = QLatin1String("subject");
+ QString body = QLatin1String("body");
+ QList<Attachment> attachments = {
+ {QLatin1String("name"), QLatin1String("filename1"), "mimetype1", true, "inlineAttachment"},
+ {QLatin1String("name"), QLatin1String("filename2"), "mimetype2", false, "nonInlineAttachment"},
+ };
+
+ auto signingKeys = Crypto::findKeys({}, true, false);
+ auto result = MailTemplates::createMessage({}, to, cc, bcc, from, subject, body, false, attachments, signingKeys, {}, signingKeys[0]);
+
+ QVERIFY(result);
+ QVERIFY(validate(result));
+ qWarning() << "---------------------------------";
+ qWarning().noquote() << result->encodedContent();
+ qWarning() << "---------------------------------";
+ QCOMPARE(result->subject()->asUnicodeString(), subject);
+ QVERIFY(result->date(false)->dateTime().isValid());
+
+ QCOMPARE(result->contentType()->mimeType(), QByteArray{"multipart/signed"});
+ QCOMPARE(result->attachments().size(), 3);
+ QCOMPARE(result->attachments()[0]->contentDisposition()->filename(), QLatin1String{"filename1"});
+ QCOMPARE(result->attachments()[1]->contentDisposition()->filename(), QLatin1String{"filename2"});
+ QCOMPARE(result->attachments()[2]->contentDisposition()->filename(), QLatin1String{"0x8F246DE6.asc"});
+
+ QCOMPARE(result->contents().size(), 2);
+
+ auto signedMessage = result->contents()[0];
+ QVERIFY(signedMessage->contentType()->isMimeType("multipart/mixed"));
+ const auto contents = signedMessage->contents();
+ QCOMPARE(contents.size(), 4);
+ QCOMPARE(contents[0]->contentType()->mimeType(), QByteArray{"text/plain"});
+ QCOMPARE(contents[1]->contentDisposition()->filename(), QLatin1String{"filename1"});
+ QCOMPARE(contents[2]->contentDisposition()->filename(), QLatin1String{"filename2"});
+ QCOMPARE(contents[3]->contentType()->mimeType(), QByteArray{"application/pgp-keys"});
+ QCOMPARE(contents[3]->contentDisposition()->filename(), QLatin1String{"0x8F246DE6.asc"});
+ }
+
+ void testCreateIMipMessage()
+ {
+ QStringList to = {{QLatin1String("to@example.org")}};
+ QStringList cc = {{QLatin1String("cc@example.org")}};
+ QStringList bcc = {{QLatin1String("bcc@example.org")}};
+ QString from = {QLatin1String("from@example.org")};
+ QString subject = QLatin1String("subject");
+ QString body = QLatin1String("body");
+
+ QString ical = QLatin1String("ical");
+
+ auto result = MailTemplates::createIMipMessage(from, {to, cc, bcc}, subject, body, ical);
+
+ QVERIFY(result);
+ QVERIFY(validate(result));
+ qWarning() << "---------------------------------";
+ qWarning().noquote() << result->encodedContent();
+ qWarning() << "---------------------------------";
+
+ QCOMPARE(result->contentType()->mimeType(), QByteArray{"multipart/alternative"});
+
+ QCOMPARE(result->contents().size(), 2);
+ QVERIFY(result->contents()[0]->contentType()->isMimeType("text/plain"));
+ QVERIFY(result->contents()[1]->contentType()->isMimeType("text/calendar"));
+ QCOMPARE(result->contents()[1]->contentType()->name(), QLatin1String{"event.ics"});
+
+ QVERIFY(KMime::isAttachment(result->contents()[1]));
+ // KMime should return 1 attachment for this multipart but it doesn't sometimes(?)
+ //
+ // It is an attachment as the ical part:
+ // A) Has a name
+ // B) Has a content disposition of CDattachment
+ //
+ // Check the result of QVERIFY(KMime::isAttachment(result->contents()[1])); if
+ // it is true then this confirms that result->attachments() is misreporting
+ QCOMPARE(result->attachments().count(), 1);
+ }
+
+ void testEncryptedWithProtectedHeadersReply()
+ {
+ KMime::Types::AddrSpecList me;
+ KMime::Types::Mailbox mb;
+ mb.setAddress("to1@example.org");
+ me << mb.addrSpec();
+
+ auto msg = readMail(QLatin1String("openpgp-encrypted-memoryhole2.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::reply(
+ msg,
+ [&](const KMime::Message::Ptr &r) {
+ result = r;
+ },
+ me);
+ QTRY_VERIFY(result);
+ QCOMPARE(result->subject()->asUnicodeString(), QLatin1String{"RE: This is the subject"});
+ QCOMPARE(result->to()->addresses(), QVector<QByteArray>{{"jane@doe.com"}});
+ QCOMPARE(result->cc()->addresses(), QVector<QByteArray>{{"john@doe.com"}});
+ QCOMPARE(result->inReplyTo()->asUnicodeString(), QLatin1String{"<03db3530-0000-0000-95a2-8a148f00000@example.com>"});
+ QCOMPARE(result->references()->asUnicodeString(),
+ QLatin1String{"<dbe9d22b-0a3f-cb1e-e883-8a148f00000@example.com> <03db3530-0000-0000-95a2-8a148f00000@example.com>"});
+ QCOMPARE(normalize(removeFirstLine(QString::fromUtf8(result->body()))),
+ QLatin1String{"FsdflkjdslfjHappyMonday!Belowyouwillfindaquickoverviewofthecurrenton-goings.Remember"});
+ }
+
+ void testEncryptedWithProtectedHeadersForwardAsAttachment()
+ {
+ auto msg = readMail(QLatin1String("openpgp-encrypted-memoryhole2.mbox"));
+ KMime::Message::Ptr result;
+ MailTemplates::forward(msg, [&](const KMime::Message::Ptr &r) {
+ result = r;
+ });
+ QTRY_VERIFY(result);
+ QCOMPARE(result->subject()->asUnicodeString(), QLatin1String{"FW: This is the subject"});
+ QCOMPARE(result->to()->addresses(), {});
+ QCOMPARE(result->cc()->addresses(), {});
+ QCOMPARE(result->references()->asUnicodeString(),
+ QLatin1String{"<dbe9d22b-0a3f-cb1e-e883-8a148f00000@example.com> <03db3530-0000-0000-95a2-8a148f00000@example.com>"});
+ QCOMPARE(result->inReplyTo()->identifiers(), {});
+
+ auto attachments = result->attachments();
+ QCOMPARE(attachments.size(), 1);
+ auto attachment = attachments[0];
+ QCOMPARE(attachment->contentDisposition(false)->disposition(), KMime::Headers::CDinline);
+ QCOMPARE(attachment->contentDisposition(false)->filename(), QLatin1String{"This is the subject.eml"});
+ QVERIFY(attachment->bodyIsMessage());
+
+ attachment->parse();
+ auto origMsg = attachment->bodyAsMessage();
+ QCOMPARE(origMsg->subject(false)->asUnicodeString(), QLatin1String{"..."});
+ }
+};
+
+QTEST_MAIN(MailTemplateTest)
+#include "mailtemplatetest.moc"
diff --git a/src/core/mailtemplates.cpp b/src/core/mailtemplates.cpp
new file mode 100644
index 0000000..652828e
--- /dev/null
+++ b/src/core/mailtemplates.cpp
@@ -0,0 +1,971 @@
+// SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
+// SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
+// SPDX-FileCopyrightText: 2010 Leo Franchi <lfranchi@kde.org>
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "mailtemplates.h"
+
+#include <KLocalizedString>
+#include <QDebug>
+#include <QList>
+#include <QRegularExpression>
+#include <QSysInfo>
+#include <QTextCodec>
+#include <QTextDocument>
+#include <QUuid>
+
+#include <KCharsets>
+#include <KMime/Types>
+
+#include "objecttreeparser.h"
+
+QDebug operator<<(QDebug dbg, const KMime::Types::Mailbox &mb)
+{
+ dbg << mb.addrSpec().asString();
+ return dbg;
+}
+
+namespace KMime
+{
+namespace Types
+{
+static bool operator==(const KMime::Types::AddrSpec &left, const KMime::Types::AddrSpec &right)
+{
+ return (left.asString() == right.asString());
+}
+
+static bool operator==(const KMime::Types::Mailbox &left, const KMime::Types::Mailbox &right)
+{
+ return (left.addrSpec().asString() == right.addrSpec().asString());
+}
+}
+
+Message *contentToMessage(Content *content)
+{
+ content->assemble();
+ const auto encoded = content->encodedContent();
+
+ auto message = new Message();
+ message->setContent(encoded);
+ message->parse();
+
+ return message;
+}
+
+}
+
+static KMime::Types::Mailbox::List stripMyAddressesFromAddressList(const KMime::Types::Mailbox::List &list, const KMime::Types::AddrSpecList me)
+{
+ KMime::Types::Mailbox::List addresses(list);
+ for (KMime::Types::Mailbox::List::Iterator it = addresses.begin(); it != addresses.end();) {
+ if (me.contains(it->addrSpec())) {
+ it = addresses.erase(it);
+ } else {
+ ++it;
+ }
+ }
+
+ return addresses;
+}
+
+static QString toPlainText(const QString &s)
+{
+ QTextDocument doc;
+ doc.setHtml(s);
+ return doc.toPlainText();
+}
+
+QString replacePrefixes(const QString &str, const QStringList &prefixRegExps, const QString &newPrefix)
+{
+ // construct a big regexp that
+ // 1. is anchored to the beginning of str (sans whitespace)
+ // 2. matches at least one of the part regexps in prefixRegExps
+ const QString bigRegExp = QStringLiteral("^(\\s+|(%1))+\\s*").arg(prefixRegExps.join(QStringLiteral(")|(")));
+ const QRegularExpression regex(bigRegExp, QRegularExpression::CaseInsensitiveOption);
+ Q_ASSERT(regex.isValid());
+
+ QString tmp = str;
+ // We expect a match at the beginning of the string
+ const auto match = regex.match(tmp);
+ if (match.hasMatch()) {
+ return tmp.replace(0, match.captured(0).length(), newPrefix + QLatin1Char(' '));
+ }
+ // No match, we just prefix the newPrefix
+ return newPrefix + QLatin1Char(' ') + str;
+}
+
+const QStringList getForwardPrefixes()
+{
+ // See https://en.wikipedia.org/wiki/List_of_email_subject_abbreviations
+ QStringList list;
+ // We want to be able to potentially reply to a variety of languages, so only translating is not enough
+ list << i18n("fwd");
+ list << QStringLiteral("fwd");
+ list << QStringLiteral("Fwd");
+ list << QStringLiteral("fw");
+ list << QStringLiteral("fw");
+ list << QStringLiteral("wg");
+ list << QStringLiteral("vs");
+ list << QStringLiteral("tr");
+ list << QStringLiteral("rv");
+ list << QStringLiteral("enc");
+ return list;
+}
+
+static QString forwardSubject(const QString &s)
+{
+ // The standandard prefix
+ const auto localPrefix = "FW:";
+ QStringList forwardPrefixes;
+ for (const auto &prefix : getForwardPrefixes()) {
+ forwardPrefixes << prefix + QStringLiteral("\\s*:");
+ }
+ return replacePrefixes(s, forwardPrefixes, QString::fromUtf8(localPrefix));
+}
+
+static QStringList getReplyPrefixes()
+{
+ // See https://en.wikipedia.org/wiki/List_of_email_subject_abbreviations
+ QStringList list;
+ // We want to be able to potentially reply to a variety of languages, so only translating is not enough
+ list << i18n("re");
+ list << QStringLiteral("re");
+ list << QStringLiteral("aw");
+ list << QStringLiteral("sv");
+ list << QStringLiteral("antw");
+ list << QStringLiteral("ref");
+ return list;
+}
+
+static QString replySubject(const QString &s)
+{
+ // The standandard prefix (latin for "in re", in matter of)
+ const auto localPrefix = QStringLiteral("RE:");
+ QStringList replyPrefixes;
+ const auto simpleReplyPrefixes = getReplyPrefixes();
+ for (const auto &prefix : simpleReplyPrefixes) {
+ replyPrefixes << prefix + QStringLiteral("\\s*:");
+ replyPrefixes << prefix + QStringLiteral("\\[.+\\]:");
+ replyPrefixes << prefix + QStringLiteral("\\d+:");
+ }
+ return replacePrefixes(s, replyPrefixes, localPrefix);
+}
+
+static QByteArray getRefStr(const QByteArray &references, const QByteArray &messageId)
+{
+ QByteArray firstRef, lastRef, refStr{references.trimmed()}, retRefStr;
+ int i, j;
+
+ if (refStr.isEmpty()) {
+ return messageId;
+ }
+
+ i = refStr.indexOf('<');
+ j = refStr.indexOf('>');
+ firstRef = refStr.mid(i, j - i + 1);
+ if (!firstRef.isEmpty()) {
+ retRefStr = firstRef + ' ';
+ }
+
+ i = refStr.lastIndexOf('<');
+ j = refStr.lastIndexOf('>');
+
+ lastRef = refStr.mid(i, j - i + 1);
+ if (!lastRef.isEmpty() && lastRef != firstRef) {
+ retRefStr += lastRef + ' ';
+ }
+
+ retRefStr += messageId;
+ return retRefStr;
+}
+
+KMime::Content *createPlainPartContent(const QString &plainBody, KMime::Content *parent = nullptr)
+{
+ KMime::Content *textPart = new KMime::Content(parent);
+ textPart->contentType()->setMimeType("text/plain");
+ // FIXME This is supposed to select a charset out of the available charsets that contains all necessary characters to render the text
+ // QTextCodec *charset = selectCharset(m_charsets, plainBody);
+ // textPart->contentType()->setCharset(charset->name());
+ textPart->contentType()->setCharset("utf-8");
+ textPart->contentTransferEncoding()->setEncoding(KMime::Headers::CE8Bit);
+ textPart->fromUnicodeString(plainBody);
+ return textPart;
+}
+
+KMime::Content *createMultipartAlternativeContent(const QString &plainBody, const QString &htmlBody, KMime::Message *parent = nullptr)
+{
+ KMime::Content *multipartAlternative = new KMime::Content(parent);
+ multipartAlternative->contentType()->setMimeType("multipart/alternative");
+ multipartAlternative->contentType()->setBoundary(KMime::multiPartBoundary());
+
+ KMime::Content *textPart = createPlainPartContent(plainBody, multipartAlternative);
+ multipartAlternative->addContent(textPart);
+
+ KMime::Content *htmlPart = new KMime::Content(multipartAlternative);
+ htmlPart->contentType()->setMimeType("text/html");
+ // FIXME This is supposed to select a charset out of the available charsets that contains all necessary characters to render the text
+ // QTextCodec *charset = selectCharset(m_charsets, htmlBody);
+ // htmlPart->contentType()->setCharset(charset->name());
+ htmlPart->contentType()->setCharset("utf-8");
+ htmlPart->contentTransferEncoding()->setEncoding(KMime::Headers::CE8Bit);
+ htmlPart->fromUnicodeString(htmlBody);
+ multipartAlternative->addContent(htmlPart);
+
+ return multipartAlternative;
+}
+
+KMime::Content *createMultipartMixedContent(QVector<KMime::Content *> contents)
+{
+ KMime::Content *multiPartMixed = new KMime::Content();
+ multiPartMixed->contentType()->setMimeType("multipart/mixed");
+ multiPartMixed->contentType()->setBoundary(KMime::multiPartBoundary());
+
+ for (const auto &content : contents) {
+ multiPartMixed->addContent(content);
+ }
+
+ return multiPartMixed;
+}
+
+QString plainToHtml(const QString &body)
+{
+ QString str = body;
+ str = str.toHtmlEscaped();
+ str.replace(QStringLiteral("\n"), QStringLiteral("<br />\n"));
+ return str;
+}
+
+// FIXME strip signature works partially for HTML mails
+static QString stripSignature(const QString &msg)
+{
+ // We expect no CRLF from the ObjectTreeParser. The regex won't handle it.
+ if (msg.contains(QStringLiteral("\r\n"))) {
+ qWarning() << "Message contains CRLF, but shouldn't: " << msg;
+ Q_ASSERT(false);
+ }
+ // Following RFC 3676, only > before --
+ // I prefer to not delete a SB instead of delete good mail content.
+ static const QRegularExpression sbDelimiterSearch(QStringLiteral("(^|\n)[> ]*-- \n"));
+ // The regular expression to look for prefix change
+ static const QRegularExpression commonReplySearch(QStringLiteral("^[ ]*>"));
+
+ QString res = msg;
+ int posDeletingStart = 1; // to start looking at 0
+
+ // While there are SB delimiters (start looking just before the deleted SB)
+ while ((posDeletingStart = res.indexOf(sbDelimiterSearch, posDeletingStart - 1)) >= 0) {
+ QString prefix; // the current prefix
+ QString line; // the line to check if is part of the SB
+ int posNewLine = -1;
+
+ // Look for the SB beginning
+ const int posSignatureBlock = res.indexOf(QLatin1Char('-'), posDeletingStart);
+ // The prefix before "-- "$
+ if (res.at(posDeletingStart) == QLatin1Char('\n')) {
+ ++posDeletingStart;
+ }
+
+ prefix = res.mid(posDeletingStart, posSignatureBlock - posDeletingStart);
+ posNewLine = res.indexOf(QLatin1Char('\n'), posSignatureBlock) + 1;
+
+ // now go to the end of the SB
+ while (posNewLine < res.size() && posNewLine > 0) {
+ // handle the undefined case for mid ( x , -n ) where n>1
+ int nextPosNewLine = res.indexOf(QLatin1Char('\n'), posNewLine);
+
+ if (nextPosNewLine < 0) {
+ nextPosNewLine = posNewLine - 1;
+ }
+
+ line = res.mid(posNewLine, nextPosNewLine - posNewLine);
+
+ // check when the SB ends:
+ // * does not starts with prefix or
+ // * starts with prefix+(any substring of prefix)
+ if ((prefix.isEmpty() && line.indexOf(commonReplySearch) < 0)
+ || (!prefix.isEmpty() && line.startsWith(prefix) && line.mid(prefix.size()).indexOf(commonReplySearch) < 0)) {
+ posNewLine = res.indexOf(QLatin1Char('\n'), posNewLine) + 1;
+ } else {
+ break; // end of the SB
+ }
+ }
+
+ // remove the SB or truncate when is the last SB
+ if (posNewLine > 0) {
+ res.remove(posDeletingStart, posNewLine - posDeletingStart);
+ } else {
+ res.truncate(posDeletingStart);
+ }
+ }
+
+ return res;
+}
+
+static void plainMessageText(const QString &plainTextContent, const QString &htmlContent, const std::function<void(const QString &)> &callback)
+{
+ const auto result = plainTextContent.isEmpty() ? toPlainText(htmlContent) : plainTextContent;
+ callback(result);
+}
+
+QString formatQuotePrefix(const QString &wildString, const QString &fromDisplayString)
+{
+ QString result;
+
+ if (wildString.isEmpty()) {
+ return wildString;
+ }
+
+ unsigned int strLength(wildString.length());
+ for (uint i = 0; i < strLength;) {
+ QChar ch = wildString[i++];
+ if (ch == QLatin1Char('%') && i < strLength) {
+ ch = wildString[i++];
+ switch (ch.toLatin1()) {
+ case 'f': { // sender's initals
+ if (fromDisplayString.isEmpty()) {
+ break;
+ }
+
+ uint j = 0;
+ const unsigned int strLength(fromDisplayString.length());
+ for (; j < strLength && fromDisplayString[j] > QLatin1Char(' '); ++j)
+ ;
+ for (; j < strLength && fromDisplayString[j] <= QLatin1Char(' '); ++j)
+ ;
+ result += fromDisplayString[0];
+ if (j < strLength && fromDisplayString[j] > QLatin1Char(' ')) {
+ result += fromDisplayString[j];
+ } else if (strLength > 1) {
+ if (fromDisplayString[1] > QLatin1Char(' ')) {
+ result += fromDisplayString[1];
+ }
+ }
+ } break;
+ case '_':
+ result += QLatin1Char(' ');
+ break;
+ case '%':
+ result += QLatin1Char('%');
+ break;
+ default:
+ result += QLatin1Char('%');
+ result += ch;
+ break;
+ }
+ } else {
+ result += ch;
+ }
+ }
+ return result;
+}
+
+QString quotedPlainText(const QString &selection, const QString &fromDisplayString)
+{
+ QString content = selection;
+ // Remove blank lines at the beginning:
+ const int firstNonWS = content.indexOf(QRegularExpression(QStringLiteral("\\S")));
+ const int lineStart = content.lastIndexOf(QLatin1Char('\n'), firstNonWS);
+ if (lineStart >= 0) {
+ content.remove(0, lineStart);
+ }
+
+ const auto quoteString = QStringLiteral("> ");
+ const QString indentStr = formatQuotePrefix(quoteString, fromDisplayString);
+ // FIXME
+ // if (TemplateParserSettings::self()->smartQuote() && mWrap) {
+ // content = MessageCore::StringUtil::smartQuote(content, mColWrap - indentStr.length());
+ // }
+ content.replace(QLatin1Char('\n'), QLatin1Char('\n') + indentStr);
+ content.prepend(indentStr);
+ content += QLatin1Char('\n');
+
+ return content;
+}
+
+QString quotedHtmlText(const QString &selection)
+{
+ QString content = selection;
+ // TODO 1) look for all the variations of <br> and remove the blank lines
+ // 2) implement vertical bar for quoted HTML mail.
+ // 3) After vertical bar is implemented, If a user wants to edit quoted message,
+ // then the <blockquote> tags below should open and close as when required.
+
+ // Add blockquote tag, so that quoted message can be differentiated from normal message
+ content = QStringLiteral("<blockquote>") + content + QStringLiteral("</blockquote>");
+ return content;
+}
+
+enum ReplyStrategy { ReplyList, ReplySmart, ReplyAll, ReplyAuthor, ReplyNone };
+
+static QByteArray as7BitString(const KMime::Headers::Base *h)
+{
+ if (h) {
+ return h->as7BitString(false);
+ }
+ return {};
+}
+
+static QString asUnicodeString(const KMime::Headers::Base *h)
+{
+ if (h) {
+ return h->asUnicodeString();
+ }
+ return {};
+}
+
+static KMime::Types::Mailbox::List getMailingListAddresses(const KMime::Headers::Base *listPostHeader)
+{
+ KMime::Types::Mailbox::List mailingListAddresses;
+ const QString listPost = asUnicodeString(listPostHeader);
+ if (listPost.contains(QStringLiteral("mailto:"), Qt::CaseInsensitive)) {
+ static const QRegularExpression rx{QStringLiteral("<\\s*mailto\\s*:([^@>]+@[^>]+)>"), QRegularExpression::CaseInsensitiveOption};
+ const auto match = rx.match(listPost);
+ if (match.hasMatch()) {
+ KMime::Types::Mailbox mailbox;
+ mailbox.fromUnicodeString(match.captured(1));
+ mailingListAddresses << mailbox;
+ }
+ }
+ return mailingListAddresses;
+}
+
+struct RecipientMailboxes {
+ KMime::Types::Mailbox::List to;
+ KMime::Types::Mailbox::List cc;
+};
+
+static RecipientMailboxes getRecipients(const KMime::Types::Mailbox::List &from,
+ const KMime::Types::Mailbox::List &to,
+ const KMime::Types::Mailbox::List &cc,
+ const KMime::Types::Mailbox::List &replyToList,
+ const KMime::Types::Mailbox::List &mailingListAddresses,
+ const KMime::Types::AddrSpecList &me)
+{
+ KMime::Types::Mailbox::List toList;
+ KMime::Types::Mailbox::List ccList;
+ auto listContainsMe = [&](const KMime::Types::Mailbox::List &list) {
+ for (const auto &m : me) {
+ KMime::Types::Mailbox mailbox;
+ mailbox.setAddress(m);
+ if (list.contains(mailbox)) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ if (listContainsMe(from)) {
+ // sender seems to be one of our own identities, so we assume that this
+ // is a reply to a "sent" mail where the users wants to add additional
+ // information for the recipient.
+ return {to, cc};
+ }
+
+ KMime::Types::Mailbox::List recipients;
+ KMime::Types::Mailbox::List ccRecipients;
+
+ // add addresses from the Reply-To header to the list of recipients
+ if (!replyToList.isEmpty()) {
+ recipients = replyToList;
+
+ // strip all possible mailing list addresses from the list of Reply-To addresses
+ for (const KMime::Types::Mailbox &mailbox : std::as_const(mailingListAddresses)) {
+ for (const KMime::Types::Mailbox &recipient : std::as_const(recipients)) {
+ if (mailbox == recipient) {
+ recipients.removeAll(recipient);
+ }
+ }
+ }
+ }
+
+ if (!mailingListAddresses.isEmpty()) {
+ // this is a mailing list message
+ if (recipients.isEmpty() && !from.isEmpty()) {
+ // The sender didn't set a Reply-to address, so we add the From
+ // address to the list of CC recipients.
+ ccRecipients += from;
+ qDebug() << "Added" << from << "to the list of CC recipients";
+ }
+
+ // if it is a mailing list, add the posting address
+ recipients.prepend(mailingListAddresses[0]);
+ } else {
+ // this is a normal message
+ if (recipients.isEmpty() && !from.isEmpty()) {
+ // in case of replying to a normal message only then add the From
+ // address to the list of recipients if there was no Reply-to address
+ recipients += from;
+ qDebug() << "Added" << from << "to the list of recipients";
+ }
+ }
+
+ // strip all my addresses from the list of recipients
+ toList = stripMyAddressesFromAddressList(recipients, me);
+
+ // merge To header and CC header into a list of CC recipients
+ auto appendToCcRecipients = [&](const KMime::Types::Mailbox::List &list) {
+ for (const KMime::Types::Mailbox &mailbox : list) {
+ if (!recipients.contains(mailbox) && !ccRecipients.contains(mailbox)) {
+ ccRecipients += mailbox;
+ qDebug() << "Added" << mailbox.prettyAddress() << "to the list of CC recipients";
+ }
+ }
+ };
+ appendToCcRecipients(to);
+ appendToCcRecipients(cc);
+
+ if (!ccRecipients.isEmpty()) {
+ // strip all my addresses from the list of CC recipients
+ ccRecipients = stripMyAddressesFromAddressList(ccRecipients, me);
+
+ // in case of a reply to self, toList might be empty. if that's the case
+ // then propagate a cc recipient to To: (if there is any).
+ if (toList.isEmpty() && !ccRecipients.isEmpty()) {
+ toList << ccRecipients.at(0);
+ ccRecipients.pop_front();
+ }
+
+ ccList = ccRecipients;
+ }
+
+ if (toList.isEmpty() && !recipients.isEmpty()) {
+ // reply to self without other recipients
+ toList << recipients.at(0);
+ }
+
+ return {toList, ccList};
+}
+
+void MailTemplates::reply(const KMime::Message::Ptr &origMsg,
+ const std::function<void(const KMime::Message::Ptr &result)> &callback,
+ const KMime::Types::AddrSpecList &me)
+{
+ // Decrypt what we have to
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(origMsg.data());
+ otp.decryptAndVerify();
+
+ auto partList = otp.collectContentParts();
+ if (partList.isEmpty()) {
+ Q_ASSERT(false);
+ return;
+ }
+ auto part = partList[0];
+ Q_ASSERT(part);
+
+ // Prepare the reply message
+ KMime::Message::Ptr msg(new KMime::Message);
+
+ msg->removeHeader<KMime::Headers::To>();
+ msg->removeHeader<KMime::Headers::Subject>();
+ msg->contentType(true)->setMimeType("text/plain");
+ msg->contentType()->setCharset("utf-8");
+
+ auto getMailboxes = [](const KMime::Headers::Base *h) -> KMime::Types::Mailbox::List {
+ if (h) {
+ return static_cast<const KMime::Headers::Generics::AddressList *>(h)->mailboxes();
+ }
+ return {};
+ };
+
+ auto fromHeader = static_cast<const KMime::Headers::From *>(part->header(KMime::Headers::From::staticType()));
+ const auto recipients = getRecipients(fromHeader ? fromHeader->mailboxes() : KMime::Types::Mailbox::List{},
+ getMailboxes(part->header(KMime::Headers::To::staticType())),
+ getMailboxes(part->header(KMime::Headers::Cc::staticType())),
+ getMailboxes(part->header(KMime::Headers::ReplyTo::staticType())),
+ getMailingListAddresses(part->header("List-Post")),
+ me);
+ for (const auto &mailbox : recipients.to) {
+ msg->to()->addAddress(mailbox);
+ }
+ for (const auto &mailbox : recipients.cc) {
+ msg->cc(true)->addAddress(mailbox);
+ }
+
+ const auto messageId = as7BitString(part->header(KMime::Headers::MessageID::staticType()));
+
+ const QByteArray refStr = getRefStr(as7BitString(part->header(KMime::Headers::References::staticType())), messageId);
+ if (!refStr.isEmpty()) {
+ msg->references()->fromUnicodeString(QString::fromLocal8Bit(refStr), "utf-8");
+ }
+
+ // In-Reply-To = original msg-id
+ msg->inReplyTo()->from7BitString(messageId);
+
+ const auto subjectHeader = part->header(KMime::Headers::Subject::staticType());
+ msg->subject()->fromUnicodeString(replySubject(asUnicodeString(subjectHeader)), "utf-8");
+
+ auto definedLocale = QLocale::system();
+
+ // Add quoted body
+ QString plainBody;
+ QString htmlBody;
+
+ // On $datetime you wrote:
+ auto dateHeader = static_cast<const KMime::Headers::Date *>(part->header(KMime::Headers::Date::staticType()));
+ const QDateTime date = dateHeader ? dateHeader->dateTime() : QDateTime{};
+ const QString dateTimeString =
+ definedLocale.toString(date.date(), QLocale::LongFormat) + QLatin1Char(' ') + definedLocale.toString(date.time(), QLocale::LongFormat);
+ const auto onDateYouWroteLine = QStringLiteral("On %1 you wrote:\n").arg(dateTimeString);
+ plainBody.append(onDateYouWroteLine);
+ htmlBody.append(plainToHtml(onDateYouWroteLine));
+
+ const auto plainTextContent = otp.plainTextContent();
+ const auto htmlContent = otp.htmlContent();
+
+ plainMessageText(plainTextContent, htmlContent, [=](const QString &body) {
+ QString result = stripSignature(body);
+ // Quoted body
+ result = quotedPlainText(result, fromHeader ? fromHeader->displayString() : QString{});
+ if (result.endsWith(QLatin1Char('\n'))) {
+ result.chop(1);
+ }
+ // The plain body is complete
+ QString plainBodyResult = plainBody + result;
+
+ // Assemble the message
+ msg->contentType()->clear(); // to get rid of old boundary
+
+ KMime::Content *const mainTextPart = createPlainPartContent(plainBodyResult, msg.data());
+ mainTextPart->assemble();
+
+ msg->setBody(mainTextPart->encodedBody());
+ msg->setHeader(mainTextPart->contentType());
+ msg->setHeader(mainTextPart->contentTransferEncoding());
+ msg->assemble();
+
+ callback(msg);
+ });
+}
+
+void MailTemplates::forward(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback)
+{
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(origMsg.data());
+ otp.decryptAndVerify();
+
+ KMime::Message::Ptr wrapperMsg(new KMime::Message);
+ wrapperMsg->to()->clear();
+ wrapperMsg->cc()->clear();
+
+ // Decrypt the original message, it will be encrypted again in the composer
+ // for the right recipient
+ KMime::Message::Ptr forwardedMessage(new KMime::Message());
+
+ if (isEncrypted(origMsg.data())) {
+ qDebug() << "Original message was encrypted, decrypting it";
+
+ auto htmlContent = otp.htmlContent();
+
+ KMime::Content *recreatedMsg =
+ htmlContent.isEmpty() ? createPlainPartContent(otp.plainTextContent()) : createMultipartAlternativeContent(otp.plainTextContent(), htmlContent);
+
+ KMime::Message::Ptr tmpForwardedMessage;
+ auto attachments = otp.collectAttachmentParts();
+ if (!attachments.isEmpty()) {
+ QVector<KMime::Content *> contents = {recreatedMsg};
+ for (const auto &attachment : attachments) {
+ // Copy the node, to avoid deleting the parts node.
+ auto c = new KMime::Content;
+ c->setContent(attachment->node()->encodedContent());
+ c->parse();
+ contents.append(c);
+ }
+
+ auto msg = createMultipartMixedContent(contents);
+
+ tmpForwardedMessage.reset(KMime::contentToMessage(msg));
+ } else {
+ tmpForwardedMessage.reset(KMime::contentToMessage(recreatedMsg));
+ }
+
+ origMsg->contentType()->fromUnicodeString(tmpForwardedMessage->contentType()->asUnicodeString(), "utf-8");
+ origMsg->assemble();
+ forwardedMessage->setHead(origMsg->head());
+ forwardedMessage->setBody(tmpForwardedMessage->encodedBody());
+ forwardedMessage->parse();
+ } else {
+ qDebug() << "Original message was not encrypted, using it as-is";
+ forwardedMessage = origMsg;
+ }
+
+ auto partList = otp.collectContentParts();
+ if (partList.isEmpty()) {
+ Q_ASSERT(false);
+ callback({});
+ return;
+ }
+ auto part = partList[0];
+ Q_ASSERT(part);
+
+ const auto subjectHeader = part->header(KMime::Headers::Subject::staticType());
+ const auto subject = asUnicodeString(subjectHeader);
+
+ const QByteArray refStr =
+ getRefStr(as7BitString(part->header(KMime::Headers::References::staticType())), as7BitString(part->header(KMime::Headers::MessageID::staticType())));
+
+ wrapperMsg->subject()->fromUnicodeString(forwardSubject(subject), "utf-8");
+
+ if (!refStr.isEmpty()) {
+ wrapperMsg->references()->fromUnicodeString(QString::fromLocal8Bit(refStr), "utf-8");
+ }
+
+ KMime::Content *fwdAttachment = new KMime::Content;
+
+ fwdAttachment->contentDisposition()->setDisposition(KMime::Headers::CDinline);
+ fwdAttachment->contentType()->setMimeType("message/rfc822");
+ fwdAttachment->contentDisposition()->setFilename(subject + QStringLiteral(".eml"));
+ fwdAttachment->setBody(KMime::CRLFtoLF(forwardedMessage->encodedContent(false)));
+
+ wrapperMsg->addContent(fwdAttachment);
+ wrapperMsg->assemble();
+
+ callback(wrapperMsg);
+}
+
+QString MailTemplates::plaintextContent(const KMime::Message::Ptr &msg)
+{
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(msg.data());
+ const auto plain = otp.plainTextContent();
+ if (plain.isEmpty()) {
+ // Maybe not as good as the webengine version, but works at least for simple html content
+ return toPlainText(otp.htmlContent());
+ }
+ return plain;
+}
+
+QString MailTemplates::body(const KMime::Message::Ptr &msg, bool &isHtml)
+{
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(msg.data());
+ const auto html = otp.htmlContent();
+ if (html.isEmpty()) {
+ isHtml = false;
+ return otp.plainTextContent();
+ }
+ isHtml = true;
+ return html;
+}
+
+static KMime::Content *createAttachmentPart(const QByteArray &content,
+ const QString &filename,
+ bool isInline,
+ const QByteArray &mimeType,
+ const QString &name,
+ bool base64Encode = true)
+{
+ KMime::Content *part = new KMime::Content;
+ part->contentDisposition(true)->setFilename(filename);
+ if (isInline) {
+ part->contentDisposition(true)->setDisposition(KMime::Headers::CDinline);
+ } else {
+ part->contentDisposition(true)->setDisposition(KMime::Headers::CDattachment);
+ }
+
+ part->contentType(true)->setMimeType(mimeType);
+ if (!name.isEmpty()) {
+ part->contentType(true)->setName(name, "utf-8");
+ }
+ if (base64Encode) {
+ part->contentTransferEncoding(true)->setEncoding(KMime::Headers::CEbase64);
+ }
+ part->setBody(content);
+ return part;
+}
+
+static KMime::Content *createBodyPart(const QString &body, bool htmlBody)
+{
+ if (htmlBody) {
+ return createMultipartAlternativeContent(toPlainText(body), body);
+ }
+ return createPlainPartContent(body);
+}
+
+static KMime::Types::Mailbox::List stringListToMailboxes(const QStringList &list)
+{
+ KMime::Types::Mailbox::List mailboxes;
+ for (const auto &s : list) {
+ KMime::Types::Mailbox mb;
+ mb.fromUnicodeString(s);
+ if (mb.hasAddress()) {
+ mailboxes << mb;
+ } else {
+ qWarning() << "Got an invalid address: " << s << list;
+ Q_ASSERT(false);
+ }
+ }
+ return mailboxes;
+}
+
+static void setRecipients(KMime::Message &message, const Recipients &recipients)
+{
+ message.to(true)->clear();
+ const auto toRecipients = stringListToMailboxes(recipients.to);
+ for (const auto &mb : toRecipients) {
+ message.to()->addAddress(mb);
+ }
+ message.cc(true)->clear();
+ const auto ccRecipients = stringListToMailboxes(recipients.cc);
+ for (const auto &mb : ccRecipients) {
+ message.cc()->addAddress(mb);
+ }
+ message.bcc(true)->clear();
+ const auto bccRecipients = stringListToMailboxes(recipients.bcc);
+ for (const auto &mb : bccRecipients) {
+ message.bcc()->addAddress(mb);
+ }
+}
+
+KMime::Message::Ptr MailTemplates::createMessage(KMime::Message::Ptr existingMessage,
+ const QStringList &to,
+ const QStringList &cc,
+ const QStringList &bcc,
+ const KMime::Types::Mailbox &from,
+ const QString &subject,
+ const QString &body,
+ bool htmlBody,
+ const QList<Attachment> &attachments,
+ const std::vector<Crypto::Key> &signingKeys,
+ const std::vector<Crypto::Key> &encryptionKeys,
+ const Crypto::Key &attachedKey)
+{
+ auto mail = existingMessage;
+ if (!mail) {
+ mail = KMime::Message::Ptr::create();
+ } else {
+ // Content type is part of the body part we're creating
+ mail->removeHeader<KMime::Headers::ContentType>();
+ mail->removeHeader<KMime::Headers::ContentTransferEncoding>();
+ }
+
+ mail->date()->setDateTime(QDateTime::currentDateTime());
+ mail->userAgent()->fromUnicodeString(
+ QStringLiteral("%1/%2(%3)").arg(QString::fromLocal8Bit("Merkuro"), QStringLiteral("0.1"), QSysInfo::prettyProductName()),
+ "utf-8");
+
+ setRecipients(*mail, {to, cc, bcc});
+
+ mail->from(true)->clear();
+ mail->from(true)->addAddress(from);
+
+ mail->subject(true)->fromUnicodeString(subject, "utf-8");
+ if (!mail->messageID(false)) {
+ // A globally unique messageId that doesn't leak the local hostname
+ const QString messageId = QLatin1Char('<') + QUuid::createUuid().toString().mid(1, 36).remove(QLatin1Char('-')) + QStringLiteral("@merkuro>");
+ mail->messageID(true)->fromUnicodeString(messageId, "utf-8");
+ }
+ if (!mail->date(true)->dateTime().isValid()) {
+ mail->date(true)->setDateTime(QDateTime::currentDateTimeUtc());
+ }
+ mail->assemble();
+
+ const bool encryptionRequired = !signingKeys.empty() || !encryptionKeys.empty();
+ // We always attach the key when encryption is enabled.
+ const bool attachingPersonalKey = encryptionRequired;
+
+ auto allAttachments = attachments;
+ if (attachingPersonalKey) {
+ const auto publicKeyExportResult = Crypto::exportPublicKey(attachedKey);
+ if (!publicKeyExportResult) {
+ qWarning() << "Failed to export public key" << publicKeyExportResult.error();
+ return {};
+ }
+ const auto publicKeyData = publicKeyExportResult.value();
+ allAttachments
+ << Attachment{{}, QStringLiteral("0x%1.asc").arg(QString::fromUtf8(attachedKey.shortKeyId)), "application/pgp-keys", false, publicKeyData};
+ }
+
+ std::unique_ptr<KMime::Content> bodyPart{[&] {
+ if (!allAttachments.isEmpty()) {
+ auto bodyPart = new KMime::Content;
+ bodyPart->contentType(true)->setMimeType("multipart/mixed");
+ bodyPart->contentType()->setBoundary(KMime::multiPartBoundary());
+ bodyPart->contentTransferEncoding()->setEncoding(KMime::Headers::CE7Bit);
+ bodyPart->setPreamble("This is a multi-part message in MIME format.\n");
+ bodyPart->addContent(createBodyPart(body, htmlBody));
+ for (const auto &attachment : std::as_const(allAttachments)) {
+ // Just always encode attachments base64 so it's safe for binary data,
+ // except when it's another message or an ascii armored key
+ static QSet<QString> noEncodingRequired{QStringLiteral("message/rfc822"), QStringLiteral("application/pgp-keys")};
+ const bool base64Encode = !noEncodingRequired.contains(QString::fromUtf8(attachment.mimeType));
+ bodyPart->addContent(
+ createAttachmentPart(attachment.data, attachment.filename, attachment.isInline, attachment.mimeType, attachment.name, base64Encode));
+ }
+ return bodyPart;
+ } else {
+ return createBodyPart(body, htmlBody);
+ }
+ }()};
+ bodyPart->assemble();
+
+ const QByteArray bodyData = [&] {
+ if (encryptionRequired) {
+ auto result = MailCrypto::processCrypto(std::move(bodyPart), signingKeys, encryptionKeys);
+ if (!result) {
+ qWarning() << "Crypto failed" << result.error();
+ return QByteArray{};
+ }
+ result.value()->assemble();
+ return result.value()->encodedContent();
+ } else {
+ if (!bodyPart->contentType(false)) {
+ bodyPart->contentType(true)->setMimeType("text/plain");
+ bodyPart->assemble();
+ }
+ return bodyPart->encodedContent();
+ }
+ }();
+ if (bodyData.isEmpty()) {
+ return {};
+ }
+
+ KMime::Message::Ptr resultMessage(new KMime::Message);
+ resultMessage->setContent(mail->head() + bodyData);
+ resultMessage->parse(); // Not strictly necessary.
+ return resultMessage;
+}
+
+KMime::Message::Ptr
+MailTemplates::createIMipMessage(const QString &from, const Recipients &recipients, const QString &subject, const QString &body, const QString &attachment)
+{
+ KMime::Message::Ptr message = KMime::Message::Ptr(new KMime::Message);
+ message->contentTransferEncoding()->clear(); // 7Bit, decoded.
+
+ // Set the headers
+ message->userAgent()->fromUnicodeString(
+ QStringLiteral("%1/%2(%3)").arg(QString::fromLocal8Bit("Merkuro"), QStringLiteral("0.1"), QSysInfo::prettyProductName()),
+ "utf-8");
+ message->from()->fromUnicodeString(from, "utf-8");
+
+ setRecipients(*message, recipients);
+
+ message->date()->setDateTime(QDateTime::currentDateTime());
+ message->subject()->fromUnicodeString(subject, "utf-8");
+ message->contentType()->setMimeType("multipart/alternative");
+ message->contentType()->setBoundary(KMime::multiPartBoundary());
+
+ // Set the first multipart, the body message.
+ KMime::Content *bodyMessage = new KMime::Content{message.data()};
+ bodyMessage->contentType()->setMimeType("text/plain");
+ bodyMessage->contentType()->setCharset("utf-8");
+ bodyMessage->contentTransferEncoding()->setEncoding(KMime::Headers::CEquPr);
+ bodyMessage->setBody(KMime::CRLFtoLF(body.toUtf8()));
+ message->addContent(bodyMessage);
+
+ // Set the second multipart, the attachment.
+ KMime::Content *attachMessage = new KMime::Content{message.data()};
+ attachMessage->contentDisposition()->setDisposition(KMime::Headers::CDattachment);
+ attachMessage->contentType()->setMimeType("text/calendar");
+ attachMessage->contentType()->setCharset("utf-8");
+ attachMessage->contentType()->setName(QLatin1String("event.ics"), "utf-8");
+ attachMessage->contentType()->setParameter(QLatin1String("method"), QLatin1String("REPLY"));
+ attachMessage->contentTransferEncoding()->setEncoding(KMime::Headers::CEquPr);
+ attachMessage->setBody(KMime::CRLFtoLF(attachment.toUtf8()));
+ message->addContent(attachMessage);
+
+ // Job done, attach the both multiparts and assemble the message.
+ message->assemble();
+ return message;
+}
diff --git a/src/core/mailtemplates.h b/src/core/mailtemplates.h
new file mode 100644
index 0000000..5d71ea8
--- /dev/null
+++ b/src/core/mailtemplates.h
@@ -0,0 +1,50 @@
+// SPDX-FileCopyrightText: 2016 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include <KMime/Message>
+#include <QByteArray>
+#include <QStringList>
+#include <functional>
+
+#include "mailcrypto.h"
+
+struct Attachment {
+ QString name;
+ QString filename;
+ QByteArray mimeType;
+ bool isInline;
+ QByteArray data;
+};
+
+struct Recipients {
+ QStringList to;
+ QStringList cc;
+ QStringList bcc;
+};
+
+namespace MailTemplates
+{
+void reply(const KMime::Message::Ptr &origMsg,
+ const std::function<void(const KMime::Message::Ptr &result)> &callback,
+ const KMime::Types::AddrSpecList &me = {});
+void forward(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback);
+QString plaintextContent(const KMime::Message::Ptr &origMsg);
+QString body(const KMime::Message::Ptr &msg, bool &isHtml);
+KMime::Message::Ptr createMessage(KMime::Message::Ptr existingMessage,
+ const QStringList &to,
+ const QStringList &cc,
+ const QStringList &bcc,
+ const KMime::Types::Mailbox &from,
+ const QString &subject,
+ const QString &body,
+ bool htmlBody,
+ const QList<Attachment> &attachments,
+ const std::vector<Crypto::Key> &signingKeys = {},
+ const std::vector<Crypto::Key> &encryptionKeys = {},
+ const Crypto::Key &attachedKey = {});
+
+KMime::Message::Ptr
+createIMipMessage(const QString &from, const Recipients &recipients, const QString &subject, const QString &body, const QString &attachment);
+};
diff --git a/src/core/templatetestdata/8bitencoded.mbox b/src/core/templatetestdata/8bitencoded.mbox
new file mode 100644
index 0000000..6194fb9
--- /dev/null
+++ b/src/core/templatetestdata/8bitencoded.mbox
@@ -0,0 +1,2110 @@
+Return-Path: <cmollekopf+caf_=christian=mailqueue.ch@gmail.com>
+Received: from imapb010.mykolab.com ([unix socket])
+ by imapb010.mykolab.com (Cyrus 2.5.10-49-g2e214b4-Kolab-2.5.10-8.1.el7.kolab_14) with LMTPA;
+ Thu, 24 Aug 2017 13:47:08 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx002.mykolab.com (unknown [10.9.13.2])
+ by imapb010.mykolab.com (Postfix) with ESMTPS id 789071908C0AD
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 13:47:08 +0200 (CEST)
+Received: from mx.kolabnow.com (unknown [10.9.4.2])
+ by int-mx002.mykolab.com (Postfix) with ESMTPS id 54F7E2334
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 13:47:08 +0200 (CEST)
+X-Virus-Scanned: amavisd-new at mykolab.com
+Authentication-Results: ext-mx-in002.mykolab.com (amavisd-new);
+ dkim=pass (1024-bit key) header.d=nowiknow.com header.b=PhDhbCtl;
+ dkim=pass (1024-bit key) header.d=gmail.mcsv.net header.b=RCXi0ciN
+X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0
+Received: from mail-qk0-f179.google.com (mail-qk0-f179.google.com [209.85.220.179])
+ by ext-mx-in002.mykolab.com (Postfix) with ESMTPS id 6F9F7CF
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 13:47:00 +0200 (CEST)
+Received: by mail-qk0-f179.google.com with SMTP id w6so1696860qka.0
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 04:46:59 -0700 (PDT)
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+ d=1e100.net; s=20161025;
+ h=x-gm-message-state:delivered-to:dkim-signature:dkim-signature
+ :subject:from:reply-to:to:date:message-id:feedback-id:list-id
+ :list-unsubscribe:list-unsubscribe-post:mime-version;
+ bh=0j/vBe5PYyLtNIrTeg7ECKupBfn4J4reSBQ13Fmj1Ww=;
+ b=XyAKTyE716901I/+8y9GADWYMX6/PDdayxG3weM+Pt3ahoxtf/2xspxNXlhtdIMeUJ
+ KwAcXPSmScOfTnC4qfCXa/V8IEzaR3RCzRYoTUPveVSr1+duG84qki4e7NHsu9eDXUVi
+ TqJzb0VsA6FXnk+QQ17MvPTmEC1+on33RkyLirA+aTsb6KJaIM0LVOeNxjE8w7BlRUdb
+ lOeefPQ03QEpW161r8QBHv1r9A//55ThztKXcwWV3Mt8UAdL4PLUwXPc3a3yoJDEHT6R
+ pZjRYMe1O+UdhOrOeyrf1DGCZCbuxlMr11DaTFWNU0qKp2Tva9VYfLNXkFI5Xy//ppd4
+ /DcA==
+X-Gm-Message-State: AHYfb5jKITBkeyJ/SNU5jH0YX3tJ8+6nvfM4qkz5GMA/5l6kBDI5LIYr
+ 5xqp6esygvlvlh1LiNcNtJ8rEQFl7/8xjJ27eeeCwA==
+X-Received: by 10.55.204.205 with SMTP id n74mr7738289qkl.31.1503575218723;
+ Thu, 24 Aug 2017 04:46:58 -0700 (PDT)
+X-Forwarded-To: christian@mailqueue.ch
+X-Forwarded-For: cmollekopf@gmail.com christian@mailqueue.ch
+Delivered-To: cmollekopf@gmail.com
+Received: by 10.140.23.148 with SMTP id 20csp8334569qgp;
+ Thu, 24 Aug 2017 04:46:56 -0700 (PDT)
+X-Received: by 10.37.203.4 with SMTP id b4mr4589328ybg.76.1503575216900;
+ Thu, 24 Aug 2017 04:46:56 -0700 (PDT)
+ARC-Seal: i=1; a=rsa-sha256; t=1503575216; cv=none;
+ d=google.com; s=arc-20160816;
+ b=j5kfXDq3Gaazf8v/5IMOwt7IUk1plzWvvmKSq6k2OkMGQmi5YyeQqm/6dKf1W+ttoO
+ JVlRg7h+VwuhW4t2y2Pf7/wmkRQkExopPSYzTXdEnjBak6axILdoWfUHUiWcuHUIzP9r
+ Mt8WOHvgsM3cOGQeBR6UijflYwz5lOOuCh/lORkPmQnphinPZcBCMoBsXaGdwrI7YrQz
+ ZXzHxT31JiZDE5Shv+kfaN7RRzfOfQPBb40huUGKSsRcZi3S3g3N+l87r520kLAQNCxW
+ Tw5aMpzEcceBmTV+213bAjYmlR6gJvk45m+G9ISNvcn9fA2fTYanrReewAFuGgRrYOY6
+ T1kA==
+ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
+ h=mime-version:list-unsubscribe-post:list-unsubscribe:list-id
+ :feedback-id:message-id:date:to:reply-to:from:subject:dkim-signature
+ :dkim-signature:arc-authentication-results;
+ bh=0j/vBe5PYyLtNIrTeg7ECKupBfn4J4reSBQ13Fmj1Ww=;
+ b=uJ6TFST3WTHpJ3eUlH40DbU5/lP5R3JYMdWstmZjbQNXhjTV4Fpu3DL4odyRaXS0V+
+ JG/58RUjPvO3wztXop3Za15i+9e59vu4OKaBwztD/L1RiHDLDzSLqgL/gGXTKbT50izQ
+ Q589QLDgvPyL2/AZZiIktIU0FqVVDX1l9HzRFqZ/sYM7ZNCdMy92uWfUi+Me5+OgL6B1
+ tf3CH40tdRhZ/jhcWoEXECH6QD3eF7/tZHsbLiTgPm9haEMmAtSF2t8MjKWFgra7pbI2
+ 1bQB++SskwOxOIeaV3+ttXWYNzGR8aJaEHJ+pJN63xgnMld1UKX+NilOLTfa1O0qz7gX
+ YQ5A==
+ARC-Authentication-Results: i=1; mx.google.com;
+ dkim=pass header.i=@nowiknow.com header.s=k1 header.b=PhDhbCtl;
+ dkim=pass header.i=@gmail.mcsv.net header.s=k1 header.b=RCXi0ciN;
+ spf=pass (google.com: domain of bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net designates 205.201.135.142 as permitted sender) smtp.mailfrom=bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net
+Received: from mail142.atl61.mcsv.net (mail142.atl61.mcsv.net. [205.201.135.142])
+ by mx.google.com with ESMTPS id e2si999520ywc.571.2017.08.24.04.46.56
+ for <cmollekopf@gmail.com>
+ (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
+ Thu, 24 Aug 2017 04:46:56 -0700 (PDT)
+Received-SPF: pass (google.com: domain of bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net designates 205.201.135.142 as permitted sender) client-ip=205.201.135.142;
+Authentication-Results: mx.google.com;
+ dkim=pass header.i=@nowiknow.com header.s=k1 header.b=PhDhbCtl;
+ dkim=pass header.i=@gmail.mcsv.net header.s=k1 header.b=RCXi0ciN;
+ spf=pass (google.com: domain of bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net designates 205.201.135.142 as permitted sender) smtp.mailfrom=bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=k1; d=nowiknow.com;
+ h=Subject:From:Reply-To:To:Date:Message-ID:List-ID:List-Unsubscribe:
+ Content-Type:MIME-Version; i=dan@nowiknow.com;
+ bh=0j/vBe5PYyLtNIrTeg7ECKupBfn4J4reSBQ13Fmj1Ww=;
+ b=PhDhbCtlZ0sTf/uiePM3Y3Zile2xSiBfMLEpBeRI037MIT0Wd+3EjXb6mWocbkZTj8uXslIHeTFb
+ S6+VtwbwnCZfLXnB43tDWpWhTVYK5EQpgwfE/3LbSm7hc7SgG5gGw8j6ybkh6RluUXox+uwFQ4P1
+ USYaWqIo5H3ZH12dJ+M=
+DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=k1; d=gmail.mcsv.net;
+ h=Subject:From:Reply-To:To:Date:Message-ID:Feedback-ID:List-ID:
+ List-Unsubscribe:Content-Type:MIME-Version;
+ bh=VvDgaXeZiQZDe15cLybJQr285RQ=;
+ b=RCXi0ciNwW82Ta0gJ6lw549iAT4DjwqJRZ2TZqWtIymAkhBGiSW7LikSHPofApky3mq1F3wGVOJp
+ VVJoZQQhEfaMhPMOMEibhnsdIwP5LYwUx4r5SoWd3xIP/2dZIlwngOEeW23oAAVx+T9iKkuZLCnQ
+ s81PkHcv0+Gm6H6H80A=
+Subject: =?utf-8?Q?Now=20I=20Know=3A=C2=A0Why=20Pisa=E2=80=99s=20Tower=20Leans?=
+From: =?utf-8?Q?Dan=20Lewis?= <dan@nowiknow.com>
+Reply-To: =?utf-8?Q?Dan=20Lewis?= <dan@nowiknow.com>
+To: <cmollekopf@gmail.com>
+Date: Thu, 24 Aug 2017 11:36:21 +0000
+Message-ID: <2889002ad89d45ca21f50ba46.cd30a9a755.20170824113521.1b9800e15a.bf27651e@mail142.atl61.mcsv.net>
+X-Mailer: MailChimp Mailer - **CID1b9800e15acd30a9a755**
+X-Campaign: mailchimp2889002ad89d45ca21f50ba46.1b9800e15a
+X-campaignid: mailchimp2889002ad89d45ca21f50ba46.1b9800e15a
+X-Report-Abuse: Please report abuse for this campaign here: http://www.mailchimp.com/abuse/abuse.phtml?u=2889002ad89d45ca21f50ba46&id=1b9800e15a&e=cd30a9a755
+X-MC-User: 2889002ad89d45ca21f50ba46
+Feedback-ID: 1820657:1820657.2563001:us1:mc
+List-ID: 2889002ad89d45ca21f50ba46mc list <2889002ad89d45ca21f50ba46.580325.list-id.mcsv.net>
+X-Accounttype: pd
+List-Unsubscribe: <http://nowiknow.us1.list-manage.com/unsubscribe?u=2889002ad89d45ca21f50ba46&id=689d00e31c&e=cd30a9a755&c=1b9800e15a>, <mailto:unsubscribe-mc.us1_2889002ad89d45ca21f50ba46.1b9800e15a-cd30a9a755@mailin1.us2.mcsv.net?subject=unsubscribe>
+List-Unsubscribe-Post: List-Unsubscribe=One-Click
+x-mcda: FALSE
+Content-Type: multipart/alternative; boundary="_----------=_MCPart_2013239186"
+MIME-Version: 1.0
+
+This is a multi-part message in MIME format
+
+--_----------=_MCPart_2013239186
+Content-Type: text/plain; charset="utf-8"; format="fixed"
+Content-Transfer-Encoding: quoted-printable
+
+And: is it just part of an old European dance craze? (Well=2C no.)
+
+View this email in your browser (http://nowiknow.com/why-pisas-tower-leans=
+/) =C2=B7 Missed one? Visit the Archives (http://nowiknow.com/archives/)
+http://MIR.INSIRE.COM/click?s=3D188055&layout=3Dmarquee&li=3D689d00e31c&e=
+=3Dcmollekopf@gmail.com&p=3D1b9800e15a
+http://MIR.INSIRE.COM/click?s=3D188058&sz=3D116x15&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a http://MIR.INSIRE.COM/click?s=3D188059&sz=3D6=
+9x15&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a
+http://nowiknow.com/
+Just likes yesterday: I'm on vacation this week=2C so today's Now I Know i=
+s a re-run=2C originally from 2010. (The Weekender is still TBD.) -- Dan (=
+http://s.nowiknow.com/DLewisNet)
+
+
+** Why Pisa=E2=80=99s Tower Leans
+------------------------------------------------------------
+
+The Leaning Tower of Pisa is over 800 years old. Construction started on=
+ it in 1173 and=2C almost two centuries later (and after two work stoppage=
+s)=2C completed in the 1370s. For history=E2=80=99s sake=2C it is a good=
+ thing that there were two work stoppages =E2=80=94 otherwise=2C the struc=
+ture probably would have collapsed long ago. The Tower is built on=2C bas=
+ically=2C a marsh =E2=80=94 a thin layer of alluvial silt (http://s.nowikn=
+ow.com/2voNXQl) atop soft marine clay. The work stoppages gave time for=
+ the existing incomplete infrastructure to settle in the soft soil=2C comp=
+acting the ground beneath it and=2C effectively=2C letting Mother Earth ad=
+apt before construction resumed. A minor miracle=2C in and of itself.
+
+It therefore makes sense that the Tower is unstable=2C likely to shift its=
+ position any which way as time passes. But the mystery runs deeper. The=
+ Leaning Tower of Pisa only leans to the south. Assuming the unstable gro=
+und beneath is uniformly so=2C that did not make a lot of sense.
+
+In 1989=2C the Tower was leaning roughly 15 feet off its center=2C when di=
+saster struck =E2=80=94 in Milan. Another tower=2C the Civic Tower of Pav=
+ia (http://s.nowiknow.com/2vo26xt) =2C crumbled=2C killing four passersby.=
+ Fearing a similar fate for Pisa=2C the Italian government closed the tow=
+er and made a $40 million grant to researchers=2C hoping to stave off the=
+ Tower=E2=80=99s tilt into destruction. The task was daunting=2C as rese=
+archers were split =E2=80=94 some believed the problem was with the underl=
+ying land; others believed the problem was with the structure itself. Red=
+oubling these problems were the art historians=2C who insisted on preservi=
+ng the artistic value of the Tower; in short=2C propping the Tower up was=
+ a non-starter.
+
+Finding a solution took four different tries and almost a decade. In the=
+ end=2C the team used something called =E2=80=9Csoil extraction=E2=80=9D=
+ =E2=80=94 as described (http://s.nowiknow.com/2vorzXl) by the Telegraph=
+ (UK)=2C this meant =E2=80=9Cdrilling out slivers of soil from beneath the=
+ northern side of the tower =E2=80=93 away from the lean =E2=80=93 and all=
+owing gravity to coax the structure back upright.=E2=80=9D It was a nuanc=
+ed task in and of itself. Professor John Burland=2C a soil engineer at t=
+he Imperial College London=2C lead the efforts with the help of 120 sensor=
+s placed in=2C around=2C and outside the Tower=2C and an army of fax machi=
+nes. For two years=2C twice a day=2C the sensor readings were faxed to hi=
+s attention; he=E2=80=99d run some calculations and inform the drillers ho=
+w to continue. The Tower re-opened in late 2001.
+
+In capturing all these data points =E2=80=94 two a day for two years =E2=
+=80=94 Burland had in front of him the answer to the previously unanswerab=
+le question of the Tower=E2=80=99s southward tilt. In 2003=2C he figured=
+ it out. The water table (http://s.nowiknow.com/2vovXWF) on the north si=
+de of the Tower rose up to a foot higher at times during Pisa=E2=80=99s ra=
+iny season. In effect=2C the water tower slowly=2C slightly=2C and tempor=
+arily boosted the land on the north side=2C pushing the Tower to lean sout=
+h. Using a custom drainage system to normalize the water table=2C Burlan=
+d has stemmed the Tower=E2=80=99s further tilt entirely =E2=80=94 since th=
+e solution was put in place seven [now 14!] years ago=2C the Tower=E2=80=
+=99s tilt has remained the same.
+http://s.nowiknow.com/NIKPatreon
+Now I Know is supported by readers like you. Please consider becoming a pa=
+tron by supporting the project on Patreon. Click here to pledge your suppo=
+rt (http://s.nowiknow.com/NIKPatreon) .
+Bonus fact: Groundwater flows can prevent problems=2C too. In 1958=2C the=
+ town of Concord=2C Massachusetts opened a landfill adjacent to Walden Pon=
+d=2C the eponymous site of Henry David Thoreau=E2=80=99s On Walden Pond. =
+ Because the groundwater table ran from the pond to the landfill (and not=
+ vice versa)=2C the pond remained relatively unpolluted by the nearby refu=
+se.=E2=80=8B
+
+From the Archives: Patent Leather Shoes (http://dlewis.net/nik-archives/pa=
+tent-leather-shoes/) : How Michael Jackson managed to pull off an incredib=
+le=2C gravity-defying lean of his own.
+
+Related: A 3-d=2C Leaning Tower of Pisa puzzle (http://s.nowiknow.com/2v5D=
+xKs) .
+
+http://MIR.INSIRE.COM/click?s=3D97521&sz=3D300x250&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a
+http://MIR.INSIRE.COM/click?s=3D2054&sz=3D116x15&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a http://MIR.INSIRE.COM/click?s=3D96003&sz=3D69x1=
+5&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a
+
+http://www.facebook.com/sharer/sharer.php?u=3Dhttp%3A%2F%2Fnowiknow.com%2F=
+why-pisas-tower-leans%2F Share (http://www.facebook.com/sharer/sharer.php?=
+u=3Dhttp%3A%2F%2Fnowiknow.com%2Fwhy-pisas-tower-leans%2F)
+http://twitter.com/intent/tweet?text=3DWhy%20does%20the%20Leaning%20Tower%=
+20of%20Pisa%20lean%3F%20: http%3A%2F%2Fnowiknow.com%2Fwhy-pisas-tower-lean=
+s%2F Tweet (http://twitter.com/intent/tweet?text=3DWhy%20does%20the%20Lean=
+ing%20Tower%20of%20Pisa%20lean%3F%20: http%3A%2F%2Fnowiknow.com%2Fwhy-pisa=
+s-tower-leans%2F)
+http://us1.forward-to-friend.com/forward?u=3D2889002ad89d45ca21f50ba46&id=
+=3D1b9800e15a&e=3Dcd30a9a755 Forward (http://us1.forward-to-friend.com/forwa=
+rd?u=3D2889002ad89d45ca21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755)
+
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
+
+** Learn more about RevenueStripe... (http://rs-branding.nowiknow.com/?utm=
+_source=3Dcontentstripe&utm_medium=3Demail&utm_campaign=3Dnowiknow&utm_con=
+tent=3Danimatedlogo)
+** (http://rs-stripe.nowiknow.com/stripe/redirect?cs_email=3D=
+cmollekopf@gmail.com&cs_sendid=3D1b9800e15a&cs_esp=3Dmailchimp&cs_offset=3D0&cs_stripeid=3D=
+2562)
+
+** Archives (http://nowiknow.com/archives/)
+=C2=B7 ** Privacy Policy (http://nowiknow.com/privacy/)
+
+Copyright =C2=A9 2017 Now I Know LLC=2C All rights reserved.
+ You opted in=2C at http://NowIKnow.com -- or you wouldn't get this email.
+
+Now I Know is a participant in the Amazon Services LLC Associates Program=
+=2C an affiliate advertising program designed to provide a means for sites=
+ to earn advertising fees by advertising and linking to Amazon.com. Some i=
+mages above via Wikipedia.
+
+Now I Know's mailing address is:
+Now I Know LLC
+P.O. Box 536
+Mt. Kisco=2C NY 10549-9998
+USA
+Want to change how you receive these emails?
+You can ** update your email address (http://nowiknow.us1.list-manage.com/=
+profile?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755)
+or ** unsubscribe from this list (http://nowiknow.us1.list-manage.com/unsu=
+bscribe?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755&c=3D1b9=
+800e15a)
+ Email Marketing Powered by MailChimp
+http://www.mailchimp.com/monkey-rewards/?utm_source=3Dfreemium_newsletter&=
+utm_medium=3Demail&utm_campaign=3Dmonkey_rewards&aid=3D2889002ad89d45ca21f=
+50ba46&afl=3D1
+** (http://MIR.INSIRE.COM/click?s=3D143721&layout=3Dmarquee&li=3D689d00e31=
+c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a)
+** (http://MIR.INSIRE.COM/click?s=3D143724&sz=3D116x15&li=3D689d00e31c&e=
+=3Dcmollekopf@gmail.com&p=3D1b9800e15a)
+** (http://MIR.INSIRE.COM/click?s=3D143725&sz=3D69x15&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a)
+--_----------=_MCPart_2013239186
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: quoted-printable
+
+<!doctype html>
+<html xmlns=3D"http://www.w3.org/1999/xhtml" xmlns:v=3D"urn:schemas-micros=
+oft-com:vml" xmlns:o=3D"urn:schemas-microsoft-com:office:office">
+=09<head>
+=09=09<!-- NAME: 1 COLUMN -->
+=09=09<!--[if gte mso 15]>
+=09=09<xml>
+=09=09=09<o:OfficeDocumentSettings>
+=09=09=09<o:AllowPNG/>
+=09=09=09<o:PixelsPerInch>96</o:PixelsPerInch>
+=09=09=09</o:OfficeDocumentSettings>
+=09=09</xml>
+=09=09<![endif]-->
+=09=09<meta charset=3D"UTF-8">
+ <meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3Dedge">
+ <meta name=3D"viewport" content=3D"width=3Ddevice-width=2C initial=
+-scale=3D1">
+=09=09<title>Now I Know:=C2=A0Why Pisa=E2=80=99s Tower Leans</title>
+
+ <style type=3D"text/css">
+=09=09p{
+=09=09=09margin:10px 0;
+=09=09=09padding:0;
+=09=09}
+=09=09table{
+=09=09=09border-collapse:collapse;
+=09=09}
+=09=09h1=2Ch2=2Ch3=2Ch4=2Ch5=2Ch6{
+=09=09=09display:block;
+=09=09=09margin:0;
+=09=09=09padding:0;
+=09=09}
+=09=09img=2Ca img{
+=09=09=09border:0;
+=09=09=09height:auto;
+=09=09=09outline:none;
+=09=09=09text-decoration:none;
+=09=09}
+=09=09body=2C#bodyTable=2C#bodyCell{
+=09=09=09height:100%;
+=09=09=09margin:0;
+=09=09=09padding:0;
+=09=09=09width:100%;
+=09=09}
+=09=09.mcnPreviewText{
+=09=09=09display:none !important;
+=09=09}
+=09=09#outlook a{
+=09=09=09padding:0;
+=09=09}
+=09=09img{
+=09=09=09-ms-interpolation-mode:bicubic;
+=09=09}
+=09=09table{
+=09=09=09mso-table-lspace:0pt;
+=09=09=09mso-table-rspace:0pt;
+=09=09}
+=09=09.ReadMsgBody{
+=09=09=09width:100%;
+=09=09}
+=09=09.ExternalClass{
+=09=09=09width:100%;
+=09=09}
+=09=09p=2Ca=2Cli=2Ctd=2Cblockquote{
+=09=09=09mso-line-height-rule:exactly;
+=09=09}
+=09=09a[href^=3Dtel]=2Ca[href^=3Dsms]{
+=09=09=09color:inherit;
+=09=09=09cursor:default;
+=09=09=09text-decoration:none;
+=09=09}
+=09=09p=2Ca=2Cli=2Ctd=2Cbody=2Ctable=2Cblockquote{
+=09=09=09-ms-text-size-adjust:100%;
+=09=09=09-webkit-text-size-adjust:100%;
+=09=09}
+=09=09.ExternalClass=2C.ExternalClass p=2C.ExternalClass td=2C.ExternalCla=
+ss div=2C.ExternalClass span=2C.ExternalClass font{
+=09=09=09line-height:100%;
+=09=09}
+=09=09a[x-apple-data-detectors]{
+=09=09=09color:inherit !important;
+=09=09=09text-decoration:none !important;
+=09=09=09font-size:inherit !important;
+=09=09=09font-family:inherit !important;
+=09=09=09font-weight:inherit !important;
+=09=09=09line-height:inherit !important;
+=09=09}
+=09=09#bodyCell{
+=09=09=09padding:10px;
+=09=09}
+=09=09.templateContainer{
+=09=09=09max-width:600px !important;
+=09=09}
+=09=09a.mcnButton{
+=09=09=09display:block;
+=09=09}
+=09=09.mcnImage{
+=09=09=09vertical-align:bottom;
+=09=09}
+=09=09.mcnTextContent{
+=09=09=09word-break:break-word;
+=09=09}
+=09=09.mcnTextContent img{
+=09=09=09height:auto !important;
+=09=09}
+=09=09.mcnDividerBlock{
+=09=09=09table-layout:fixed !important;
+=09=09}
+=09=09body=2C#bodyTable{
+=09=09=09background-color:#FAFAFA;
+=09=09}
+=09=09#bodyCell{
+=09=09=09border-top:0;
+=09=09}
+=09=09.templateContainer{
+=09=09=09border:0;
+=09=09}
+=09=09h1{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:26px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09h2{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:22px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09h3{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:20px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09h4{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:18px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templatePreheader{
+=09=09=09background-color:#FAFAFA;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:0;
+=09=09=09padding-top:9px;
+=09=09=09padding-bottom:9px;
+=09=09}
+=09=09#templatePreheader .mcnTextContent=2C#templatePreheader .mcnTextCont=
+ent p{
+=09=09=09color:#656565;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:12px;
+=09=09=09line-height:150%;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templatePreheader .mcnTextContent a=2C#templatePreheader .mcnTextCo=
+ntent p a{
+=09=09=09color:#656565;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09=09#templateHeader{
+=09=09=09background-color:#FFFFFF;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:0;
+=09=09=09padding-top:9px;
+=09=09=09padding-bottom:0;
+=09=09}
+=09=09#templateHeader .mcnTextContent=2C#templateHeader .mcnTextContent p{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:16px;
+=09=09=09line-height:150%;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templateHeader .mcnTextContent a=2C#templateHeader .mcnTextContent=
+ p a{
+=09=09=09color:#2BAADF;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09=09#templateBody{
+=09=09=09background-color:#FFFFFF;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:2px solid #EAEAEA;
+=09=09=09padding-top:0;
+=09=09=09padding-bottom:9px;
+=09=09}
+=09=09#templateBody .mcnTextContent=2C#templateBody .mcnTextContent p{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:16px;
+=09=09=09line-height:150%;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templateBody .mcnTextContent a=2C#templateBody .mcnTextContent p a{
+=09=09=09color:#0000ff;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09=09#templateFooter{
+=09=09=09background-color:#FAFAFA;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:0;
+=09=09=09padding-top:9px;
+=09=09=09padding-bottom:9px;
+=09=09}
+=09=09#templateFooter .mcnTextContent=2C#templateFooter .mcnTextContent p{
+=09=09=09color:#656565;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:12px;
+=09=09=09line-height:150%;
+=09=09=09text-align:center;
+=09=09}
+=09=09#templateFooter .mcnTextContent a=2C#templateFooter .mcnTextContent=
+ p a{
+=09=09=09color:#656565;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09@media only screen and (min-width:768px){
+=09=09.templateContainer{
+=09=09=09width:600px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09body=2Ctable=2Ctd=2Cp=2Ca=2Cli=2Cblockquote{
+=09=09=09-webkit-text-size-adjust:none !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09body{
+=09=09=09width:100% !important;
+=09=09=09min-width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#bodyCell{
+=09=09=09padding-top:10px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImage{
+=09=09=09width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnCartContainer=2C.mcnCaptionTopContent=2C.mcnRecContentContainer=
+=2C.mcnCaptionBottomContent=2C.mcnTextContentContainer=2C.mcnBoxedTextCont=
+entContainer=2C.mcnImageGroupContentContainer=2C.mcnCaptionLeftTextContent=
+Container=2C.mcnCaptionRightTextContentContainer=2C.mcnCaptionLeftImageCon=
+tentContainer=2C.mcnCaptionRightImageContentContainer=2C.mcnImageCardLeftT=
+extContentContainer=2C.mcnImageCardRightTextContentContainer{
+=09=09=09max-width:100% !important;
+=09=09=09width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnBoxedTextContentContainer{
+=09=09=09min-width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageGroupContent{
+=09=09=09padding:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnCaptionLeftContentOuter .mcnTextContent=2C.mcnCaptionRightConten=
+tOuter .mcnTextContent{
+=09=09=09padding-top:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageCardTopImageContent=2C.mcnCaptionBlockInner .mcnCaptionTopC=
+ontent:last-child .mcnTextContent{
+=09=09=09padding-top:18px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageCardBottomImageContent{
+=09=09=09padding-bottom:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageGroupBlockInner{
+=09=09=09padding-top:0 !important;
+=09=09=09padding-bottom:0 !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageGroupBlockOuter{
+=09=09=09padding-top:9px !important;
+=09=09=09padding-bottom:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnTextContent=2C.mcnBoxedTextContentColumn{
+=09=09=09padding-right:18px !important;
+=09=09=09padding-left:18px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageCardLeftImageContent=2C.mcnImageCardRightImageContent{
+=09=09=09padding-right:18px !important;
+=09=09=09padding-bottom:0 !important;
+=09=09=09padding-left:18px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcpreview-image-uploader{
+=09=09=09display:none !important;
+=09=09=09width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h1{
+=09=09=09font-size:22px !important;
+=09=09=09line-height:125% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h2{
+=09=09=09font-size:20px !important;
+=09=09=09line-height:125% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h3{
+=09=09=09font-size:18px !important;
+=09=09=09line-height:125% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h4{
+=09=09=09font-size:16px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnBoxedTextContentContainer .mcnTextContent=2C.mcnBoxedTextContent=
+Container .mcnTextContent p{
+=09=09=09font-size:14px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templatePreheader{
+=09=09=09display:block !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templatePreheader .mcnTextContent=2C#templatePreheader .mcnTextCont=
+ent p{
+=09=09=09font-size:14px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templateHeader .mcnTextContent=2C#templateHeader .mcnTextContent p{
+=09=09=09font-size:16px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templateBody .mcnTextContent=2C#templateBody .mcnTextContent p{
+=09=09=09font-size:16px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templateFooter .mcnTextContent=2C#templateFooter .mcnTextContent p{
+=09=09=09font-size:14px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}</style></head>
+ <body style=3D"height: 100%;margin: 0;padding: 0;width: 100%;-ms-text-=
+size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: #FAFAFA=
+;">
+=09=09<!--
+-->
+=09=09<!--[if !gte mso 9]><!----><span class=3D"mcnPreviewText" style=3D"=
+display:none; font-size:0px; line-height:0px; max-height:0px; max-width:0p=
+x; opacity:0; overflow:hidden; visibility:hidden; mso-hide:all;">And: is i=
+t just part of an old European dance craze? (Well=2C no.)</span><!--<![en=
+dif]-->
+=09=09<!--
+-->
+ <center>
+ <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspa=
+cing=3D"0" height=3D"100%" width=3D"100%" id=3D"bodyTable" style=3D"border=
+-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-s=
+ize-adjust: 100%;-webkit-text-size-adjust: 100%;height: 100%;margin: 0;pad=
+ding: 0;width: 100%;background-color: #FAFAFA;">
+ <tr>
+ <td align=3D"center" valign=3D"top" id=3D"bodyCell" st=
+yle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-te=
+xt-size-adjust: 100%;height: 100%;margin: 0;padding: 10px;width: 100%;bord=
+er-top: 0;">
+ <!-- BEGIN TEMPLATE // -->
+=09=09=09=09=09=09<!--[if gte mso 9]>
+=09=09=09=09=09=09<table align=3D"center" border=3D"0" cellspacing=3D"0" c=
+ellpadding=3D"0" width=3D"600" style=3D"width:600px;">
+=09=09=09=09=09=09<tr>
+=09=09=09=09=09=09<td align=3D"center" valign=3D"top" width=3D"600" style=
+=3D"width:600px;">
+=09=09=09=09=09=09<![endif]-->
+ <table border=3D"0" cellpadding=3D"0" cellspacing=
+=3D"0" width=3D"100%" class=3D"templateContainer" style=3D"border-collapse=
+: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;border: 0;max-width: 600px !importa=
+nt;">
+ <tr>
+ <td valign=3D"top" id=3D"templatePreheader=
+" style=3D"background:#FAFAFA none no-repeat center/cover;mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;ba=
+ckground-color: #FAFAFA;background-image: none;background-repeat: no-repea=
+t;background-position: center;background-size: cover;border-top: 0;border-=
+bottom: 0;padding-top: 9px;padding-bottom: 9px;"><table border=3D"0" cellp=
+adding=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnTextBlock" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"210" style=3D"width:210px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 210px;border-collapse: collapse;mso-table=
+-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text=
+-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContentContainer">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-left: 18px;padding-bottom: 9px;padding-right: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #656565;font-family: Helve=
+tica;font-size: 12px;line-height: 150%;text-align: left;">
+
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"390" style=3D"width:390px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 390px;border-collapse: collapse;mso-table=
+-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text=
+-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContentContainer">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-left: 18px;padding-bottom: 9px;padding-right: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #656565;font-family: Helve=
+tica;font-size: 12px;line-height: 150%;text-align: left;">
+
+ <div style=3D"text-align: right;"><a href=3D"h=
+ttp://nowiknow.us1.list-manage2.com/track/click?u=3D2889002ad89d45ca21f50b=
+a46&id=3Db2f647f3ef&e=3Dcd30a9a755" target=3D"_blank" style=3D"mso-line-h=
+eight-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 1=
+00%;color: #656565;font-weight: normal;text-decoration: underline;">View t=
+his email in your browser</a>&nbsp;=C2=B7&nbsp;<a href=3D"http://nowiknow.=
+us1.list-manage2.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D8c46c4=
+fdfe&e=3Dcd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size=
+-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: n=
+ormal;text-decoration: underline;">Missed one? Visit the Archives</a></div=
+>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ <tr>
+ <td valign=3D"top" id=3D"templateHeader" s=
+tyle=3D"background:#FFFFFF none no-repeat center/cover;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;backg=
+round-color: #FFFFFF;background-image: none;background-repeat: no-repeat;b=
+ackground-position: center;background-size: cover;border-top: 0;border-bot=
+tom: 0;padding-top: 9px;padding-bottom: 0;"><table border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnCodeBlock" style=3D"b=
+order-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-t=
+ext-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" al=
+ign=3D"center" style=3D"margin-left: auto;margin-right: auto;border-collap=
+se: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adj=
+ust: 100%;-webkit-text-size-adjust: 100%;"><tbody><tr><td colspan=3D"2" st=
+yle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-te=
+xt-size-adjust: 100%;"><a href=3D"http://nowiknow.us1.list-manage1.com/tra=
+ck/click?u=3D2889002ad89d45ca21f50ba46&id=3D0a6c76aa42&e=3Dcd30a9a755" re=
+l=3D"nofollow" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust=
+: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/=
+imp?s=3D188055&amp;layout=3Dmarquee&amp;li=3D689d00e31c&amp;e=3D=
+cmollekopf@gmail.com&amp;p=3D1b9800e15a" border=3D"0" style=3D"display: block;width: 100=
+%;height: auto;border: 0;outline: none;text-decoration: none;-ms-interpola=
+tion-mode: bicubic;" width=3D"{INSERT TEMPLATE MAX WIDTH HERE AS INTEGER}"=
+></a></td></tr><tr style=3D"display:block; height:1px; line-height:1px;"><=
+td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D1880=
+56&amp;sz=3D1x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b980=
+0e15a" height=3D"1" width=3D"10" style=3D"border: 0;height: auto;outline:=
+ none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td sty=
+le=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-tex=
+t-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D188057&amp=
+;sz=3D1x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a"=
+ height=3D"1" width=3D"10" style=3D"border: 0;height: auto;outline: none;t=
+ext-decoration: none;-ms-interpolation-mode: bicubic;"></td></tr><tr><td a=
+lign=3D"left" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;"><a href=3D"http://nowiknow.us1.list=
+-manage1.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D8f8ede861a&e=
+=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-height-rule: exactly;-m=
+s-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http=
+://MIR.INSIRE.COM/imp?s=3D188058&amp;sz=3D116x15&amp;li=3D689d00e31c&amp;e=
+=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" border=3D"0" style=3D"border: 0;he=
+ight: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bic=
+ubic;"></a></td><td align=3D"right" style=3D"mso-line-height-rule: exactly=
+;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a href=3D"ht=
+tp://nowiknow.us1.list-manage1.com/track/click?u=3D2889002ad89d45ca21f50ba=
+46&id=3D31eb34aeba&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-hei=
+ght-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D188059&amp;sz=3D69x15&amp;li=
+=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" border=3D"0" st=
+yle=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-inte=
+rpolation-mode: bicubic;"></a></td></tr></tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnImageBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnImageBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnImageBlockInner">
+ <table align=3D"left" width=3D"100%" border=3D"0" cell=
+padding=3D"0" cellspacing=3D"0" class=3D"mcnImageContentContainer" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody><tr>
+ <td class=3D"mcnImageContent" valign=3D"top" s=
+tyle=3D"padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom=
+: 0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+
+ <a href=3D"http://nowiknow.us1.list-ma=
+nage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D3e7c0fee15&e=3D=
+cd30a9a755" title=3D"" class=3D"" target=3D"_blank" style=3D"mso-line-height=
+-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"=
+>
+ <img align=3D"center" alt=3D"" src=
+=3D"https://gallery.mailchimp.com/2889002ad89d45ca21f50ba46/images/9dfc45f=
+3-a00a-4c17-acad-df81042c2e73.png" width=3D"564" style=3D"max-width: 800px=
+;padding-bottom: 0;display: inline !important;vertical-align: bottom;borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;" class=3D"mcnImage">
+ </a>
+
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ <tr>
+ <td valign=3D"top" id=3D"templateBody" sty=
+le=3D"background:#FFFFFF none no-repeat center/cover;mso-line-height-rule:=
+ exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;backgro=
+und-color: #FFFFFF;background-image: none;background-repeat: no-repeat;bac=
+kground-position: center;background-size: cover;border-top: 0;border-botto=
+m: 2px solid #EAEAEA;padding-top: 0;padding-bottom: 9px;"><table border=3D=
+"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnTextBlo=
+ck" style=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <div><em>Just likes yesterday: I'm on vacation=
+ this week=2C so today's Now I Know is a&nbsp;re-run=2C originally from 20=
+10. (The Weekender is still TBD.) --&nbsp;<a href=3D"http://nowiknow.us1.l=
+ist-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D949248ae12&e=
+=3Dcd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;=
+text-decoration: underline;">Dan</a></em>
+
+<h1 style=3D"display: block;margin: 0;padding: 0;color: #202020;font-famil=
+y: Helvetica;font-size: 26px;font-style: normal;font-weight: bold;line-hei=
+ght: 125%;letter-spacing: normal;text-align: left;"><font color=3D"#000080=
+">Why Pisa=E2=80=99s Tower Leans</font></h1>
+</div>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnImageBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnImageBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnImageBlockInner">
+ <table align=3D"left" width=3D"100%" border=3D"0" cell=
+padding=3D"0" cellspacing=3D"0" class=3D"mcnImageContentContainer" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody><tr>
+ <td class=3D"mcnImageContent" valign=3D"top" s=
+tyle=3D"padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom=
+: 0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+
+
+ <img align=3D"center" alt=3D"" src=
+=3D"https://gallery.mailchimp.com/2889002ad89d45ca21f50ba46/images/a7a2f56=
+d-76ce-47ab-8965-91b304217398.jpg" width=3D"300" style=3D"max-width: 300px=
+;padding-bottom: 0;display: inline !important;vertical-align: bottom;borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;" class=3D"mcnImage">
+
+
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <p style=3D"margin: 10px 0;padding: 0;mso-line=
+-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;color: #202020;font-family: Helvetica;font-size: 16px;line-height: 1=
+50%;text-align: left;">The Leaning Tower of Pisa is over 800 years old.&nb=
+sp; Construction started on it in 1173 and=2C almost two centuries later (=
+and after two work stoppages)=2C completed in the 1370s.&nbsp;&nbsp; For h=
+istory=E2=80=99s sake=2C it is a good thing that there were two work stopp=
+ages =E2=80=94 otherwise=2C the structure probably would have collapsed lo=
+ng ago.&nbsp; The Tower is built on=2C basically=2C a marsh =E2=80=94 a th=
+in layer of&nbsp;<a href=3D"http://nowiknow.us1.list-manage.com/track/clic=
+k?u=3D2889002ad89d45ca21f50ba46&id=3De624abfe58&e=3Dcd30a9a755" target=3D=
+"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;text-de=
+coration: underline;">alluvial silt</a>&nbsp;atop soft marine clay.&nbsp;&=
+nbsp; The work stoppages gave time for the existing incomplete infrastruct=
+ure to settle in the soft soil=2C compacting the ground beneath it and=2C=
+ effectively=2C letting Mother Earth adapt before construction resumed.&nb=
+sp; A minor miracle=2C in and of itself.</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">It th=
+erefore makes sense that the Tower is unstable=2C likely to shift its posi=
+tion any which way as time passes.&nbsp; But the mystery runs deeper.&nbsp=
+; The Leaning Tower of Pisa only leans to the south.&nbsp; Assuming the un=
+stable ground beneath is uniformly so=2C that did not make a lot of sense.=
+</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">In 19=
+89=2C the Tower was leaning roughly 15 feet off its center=2C when disaste=
+r struck =E2=80=94 in Milan.&nbsp; Another tower=2C the&nbsp;<a href=3D"ht=
+tp://nowiknow.us1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba4=
+6&id=3D995d196326&e=3Dcd30a9a755" target=3D"_blank" style=3D"mso-line-hei=
+ght-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;color: #0000ff;font-weight: normal;text-decoration: underline;">Civic To=
+wer of Pavia</a>=2C crumbled=2C killing four passersby. &nbsp;Fearing a si=
+milar fate for Pisa=2C the Italian government closed the tower and made a=
+ $40 million grant to researchers=2C hoping to stave off the Tower=E2=80=
+=99s tilt into destruction. &nbsp; The task was daunting=2C as researchers=
+ were split =E2=80=94 some believed the problem was with the underlying la=
+nd; others believed the problem was with the structure itself. &nbsp;Redou=
+bling these problems were the art historians=2C who insisted on preserving=
+ the artistic value of the Tower; in short=2C propping the Tower up was a=
+ non-starter.</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">Findi=
+ng a solution took four different tries and almost a decade. &nbsp;In the=
+ end=2C the team used something called =E2=80=9Csoil extraction=E2=80=9D=
+ =E2=80=94 as&nbsp;<a href=3D"http://nowiknow.us1.list-manage2.com/track/c=
+lick?u=3D2889002ad89d45ca21f50ba46&id=3Db0bbe1296f&e=3Dcd30a9a755" target=
+=3D"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 1=
+00%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;text=
+-decoration: underline;">described</a>&nbsp;by the Telegraph (UK)=2C this=
+ meant =E2=80=9Cdrilling out slivers of soil from beneath the northern sid=
+e of the tower =E2=80=93 away from the lean =E2=80=93 and allowing gravity=
+ to coax the structure back upright.=E2=80=9D &nbsp;It was a nuanced task=
+ in and of itself. &nbsp; Professor John Burland=2C a soil engineer at the=
+ Imperial College London=2C lead the efforts with the help of 120 sensors=
+ placed in=2C around=2C and outside the Tower=2C and an army of fax machin=
+es. &nbsp;For two years=2C twice a day=2C the sensor readings were faxed t=
+o his attention; he=E2=80=99d run some calculations and inform the driller=
+s how to continue. &nbsp;The Tower re-opened in late 2001.</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">In ca=
+pturing all these data points =E2=80=94 two a day for two years =E2=80=94=
+ Burland had in front of him the answer to the previously unanswerable que=
+stion of the Tower=E2=80=99s southward tilt. &nbsp;In 2003=2C he figured i=
+t out. &nbsp;The&nbsp;<a href=3D"http://nowiknow.us1.list-manage2.com/trac=
+k/click?u=3D2889002ad89d45ca21f50ba46&id=3Daccb264095&e=3Dcd30a9a755" tar=
+get=3D"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust=
+: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;t=
+ext-decoration: underline;">water table</a>&nbsp;on the north side of the=
+ Tower rose up to a foot higher at times during Pisa=E2=80=99s rainy seaso=
+n. &nbsp;In effect=2C the water tower slowly=2C slightly=2C and temporaril=
+y boosted the land on the north side=2C pushing the Tower to lean south. &=
+nbsp; Using a custom drainage system to normalize the water table=2C Burla=
+nd has stemmed the Tower=E2=80=99s further tilt entirely =E2=80=94 since t=
+he solution was put in place seven [now 14!] years ago=2C the Tower=E2=80=
+=99s tilt has remained the same.</p>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnDividerBlock" style=3D"min-width: 100%;border-collapse: c=
+ollapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;">
+ <tbody class=3D"mcnDividerBlockOuter">
+ <tr>
+ <td class=3D"mcnDividerBlockInner" style=3D"min-width: 100%;pa=
+dding: 0px 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;">
+ <table class=3D"mcnDividerContent" border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-t=
+op: 3px solid #EAEAEA;border-collapse: collapse;mso-table-lspace: 0pt;mso-=
+table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;">
+ <tbody><tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <span></span>
+ </td>
+ </tr>
+ </tbody></table>
+<!--
+ <td class=3D"mcnDividerBlockInner" style=3D"padding: 18px;=
+">
+ <hr class=3D"mcnDividerContent" style=3D"border-bottom-col=
+or:none; border-left-color:none; border-right-color:none; border-bottom-wi=
+dth:0; border-left-width:0; border-right-width:0; margin-top:0; margin-rig=
+ht:0; margin-bottom:0; margin-left:0;" />
+-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnImageBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnImageBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnImageBlockInner">
+ <table align=3D"left" width=3D"100%" border=3D"0" cell=
+padding=3D"0" cellspacing=3D"0" class=3D"mcnImageContentContainer" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody><tr>
+ <td class=3D"mcnImageContent" valign=3D"top" s=
+tyle=3D"padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom=
+: 0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+
+ <a href=3D"http://nowiknow.us1.list-ma=
+nage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3Db485bbd7b4&e=3D=
+cd30a9a755" title=3D"" class=3D"" target=3D"_blank" style=3D"mso-line-height=
+-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"=
+>
+ <img align=3D"center" alt=3D"" src=
+=3D"https://gallery.mailchimp.com/2889002ad89d45ca21f50ba46/images/b588757=
+c-459c-4662-9cd4-327f2844f58f.png" width=3D"564" style=3D"max-width: 656px=
+;padding-bottom: 0;display: inline !important;vertical-align: bottom;borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;" class=3D"mcnImage">
+ </a>
+
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <div style=3D"text-align: center;"><em>Now I K=
+now is supported by readers like you. Please consider becoming a patron by=
+ supporting the project on Patreon.&nbsp;<a href=3D"http://nowiknow.us1.li=
+st-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3Da51a2ca803&e=
+=3Dcd30a9a755" target=3D"_blank" style=3D"mso-line-height-rule: exactly;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;fo=
+nt-weight: normal;text-decoration: underline;">Click here to pledge your s=
+upport</a>.</em></div>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnDividerBlock" style=3D"min-width: 100%;border-collapse: c=
+ollapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;">
+ <tbody class=3D"mcnDividerBlockOuter">
+ <tr>
+ <td class=3D"mcnDividerBlockInner" style=3D"min-width: 100%;pa=
+dding: 0px 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;">
+ <table class=3D"mcnDividerContent" border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-t=
+op: 3px solid #EAEAEA;border-collapse: collapse;mso-table-lspace: 0pt;mso-=
+table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;">
+ <tbody><tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <span></span>
+ </td>
+ </tr>
+ </tbody></table>
+<!--
+ <td class=3D"mcnDividerBlockInner" style=3D"padding: 18px;=
+">
+ <hr class=3D"mcnDividerContent" style=3D"border-bottom-col=
+or:none; border-left-color:none; border-right-color:none; border-bottom-wi=
+dth:0; border-left-width:0; border-right-width:0; margin-top:0; margin-rig=
+ht:0; margin-bottom:0; margin-left:0;" />
+-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <div style=3D"text-align: left;"><br>
+<font color=3D"#000080"><strong><u>Bonus fact</u></strong></font>: Groundw=
+ater flows can prevent problems=2C too.&nbsp; In 1958=2C the town of Conco=
+rd=2C Massachusetts&nbsp;opened a landfill adjacent to Walden Pond=2C the=
+ eponymous site of Henry David Thoreau=E2=80=99s&nbsp;<em>On Walden Pond</=
+em>.&nbsp; Because the groundwater table ran from the pond to the landfill=
+ (and not vice versa)=2C the pond remained relatively unpolluted by the ne=
+arby refuse.=E2=80=8B<br>
+<br>
+<font color=3D"#000080"><strong><u>From the Archives</u></strong></font>:=
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002ad8=
+9d45ca21f50ba46&id=3D9cfb51a117&e=3Dcd30a9a755" style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;co=
+lor: #0000ff;font-weight: normal;text-decoration: underline;">Patent Leath=
+er Shoes</a>: How Michael Jackson managed to pull off an incredible=2C gra=
+vity-defying lean of his own.<br>
+&nbsp;</div>
+<font color=3D"#000080"><strong><u>Related</u></strong></font>:&nbsp;A 3-d=
+=2C Leaning Tower of Pisa&nbsp;<a href=3D"http://nowiknow.us1.list-manage.=
+com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D3e98ab8352&e=3D=
+cd30a9a755" target=3D"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight:=
+ normal;text-decoration: underline;">puzzle</a>.<br>
+&nbsp;
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnCodeBlock" style=3D"border-collapse: collapse;mso-table-l=
+space: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-s=
+ize-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <center><table border=3D"0" cellpadding=3D"0" cellspacing=
+=3D"0" style=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-=
+rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><t=
+body><tr><td colspan=3D"2" style=3D"mso-line-height-rule: exactly;-ms-text=
+-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a style=3D"display: b=
+lock;width: 300px;height: 250px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;" href=3D"http://nowiknow.us=
+1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D8d9e2bf2f=
+a&e=3Dcd30a9a755" rel=3D"nofollow"><img src=3D"http://MIR.INSIRE.COM/imp?=
+s=3D97521&amp;sz=3D300x250&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&am=
+p;p=3D1b9800e15a" border=3D"0" width=3D"300" height=3D"250" style=3D"borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;"></a></td></tr><tr style=3D"display:block; height:1px; line-h=
+eight:1px;"><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM=
+/imp?s=3D97522&amp;sz=3D1x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&a=
+mp;p=3D1b9800e15a" height=3D"1" width=3D"10" style=3D"border: 0;height: au=
+to;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"><=
+/td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;=
+-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=
+=3D97523&amp;sz=3D1x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=
+=3D1b9800e15a" height=3D"1" width=3D"10" style=3D"border: 0;height: auto;o=
+utline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td>=
+</tr><tr><td align=3D"left" style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a href=3D"http://now=
+iknow.us1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D4=
+f3db3ffca&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-height-rule:=
+ exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img=
+ src=3D"http://MIR.INSIRE.COM/imp?s=3D2054&amp;sz=3D116x15&amp;li=3D689d00=
+e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" border=3D"0" style=3D"bo=
+rder: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation=
+-mode: bicubic;"></a></td><td align=3D"right" style=3D"mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a=
+ href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002ad89d4=
+5ca21f50ba46&id=3Daf6b1e86bf&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"ms=
+o-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-a=
+djust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D96003&amp;sz=3D69x=
+15&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" border=
+=3D"0" style=3D"border: 0;height: auto;outline: none;text-decoration: none=
+;-ms-interpolation-mode: bicubic;"></a></td></tr></tbody></table>
+</center>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnShareBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnShareBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnShareBlockInner">
+ <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0=
+" width=3D"100%" class=3D"mcnShareContentContainer" style=3D"min-width: 10=
+0%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td align=3D"center" style=3D"padding-top: 0;padding-left: 9px;pad=
+ding-bottom: 0;padding-right: 9px;mso-line-height-rule: exactly;-ms-text-s=
+ize-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspa=
+cing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-collapse: collap=
+se;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;=
+-webkit-text-size-adjust: 100%;" class=3D"mcnShareContent">
+ <tbody><tr>
+ <td align=3D"center" valign=3D"top" class=3D"mcnShareC=
+ontentItemContainer" style=3D"padding-top: 9px;padding-right: 9px;padding-=
+left: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit=
+-text-size-adjust: 100%;">
+ <table align=3D"center" border=3D"0" cellpadding=
+=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;mso-table-lspa=
+ce: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;">
+ <tbody><tr>
+ <td align=3D"left" valign=3D"top" style=3D=
+"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-siz=
+e-adjust: 100%;">
+ <!--[if mso]>
+ <table align=3D"center" border=3D"0" c=
+ellspacing=3D"0" cellpadding=3D"0">
+ <tr>
+ <![endif]-->
+
+ <!--[if mso]>
+ <td align=3D"center" valign=3D"top=
+">
+ <![endif]-->
+ <table align=3D"left" border=3D"0"=
+ cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;ms=
+o-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td valign=3D"top" style=
+=3D"padding-right: 9px;padding-bottom: 9px;mso-line-height-rule: exactly;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" class=3D"mcnSha=
+reContentItemContainer">
+ <table border=3D"0" ce=
+llpadding=3D"0" cellspacing=3D"0" width=3D"" class=3D"mcnShareContentItem"=
+ style=3D"border-collapse: separate;border-radius: 3px;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody><tr>
+ <td align=3D"l=
+eft" valign=3D"middle" style=3D"padding-top: 5px;padding-right: 9px;paddin=
+g-bottom: 5px;padding-left: 9px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table ali=
+gn=3D"left" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"" st=
+yle=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0=
+pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody=
+><tr>
+ <t=
+d align=3D"center" valign=3D"middle" width=3D"24" class=3D"mcnShareIconCon=
+tent" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-w=
+ebkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage1.com/track/click?u=3D2889002=
+ad89d45ca21f50ba46&id=3De75c55d706&e=3Dcd30a9a755" target=3D"_blank" styl=
+e=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text=
+-size-adjust: 100%;"><img src=3D"https://cdn-images.mailchimp.com/icons/so=
+cial-block-v2/outline-dark-facebook-48.png" style=3D"display: block;border=
+: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mod=
+e: bicubic;" height=3D"24" width=3D"24" class=3D""></a>
+ </=
+td>
+ <t=
+d align=3D"left" valign=3D"middle" class=3D"mcnShareTextContent" style=3D"=
+padding-left: 5px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002a=
+d89d45ca21f50ba46&id=3D0db49343d0&e=3Dcd30a9a755" target=3D"" style=3D"co=
+lor: #202020;font-family: Arial;font-size: 12px;font-weight: normal;line-h=
+eight: normal;text-align: center;text-decoration: none;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Sha=
+re</a>
+ </=
+td>
+ </tr>
+ </tbody></=
+table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ <!--[if mso]>
+ </td>
+ <![endif]-->
+
+ <!--[if mso]>
+ <td align=3D"center" valign=3D"top=
+">
+ <![endif]-->
+ <table align=3D"left" border=3D"0"=
+ cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;ms=
+o-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td valign=3D"top" style=
+=3D"padding-right: 9px;padding-bottom: 9px;mso-line-height-rule: exactly;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" class=3D"mcnSha=
+reContentItemContainer">
+ <table border=3D"0" ce=
+llpadding=3D"0" cellspacing=3D"0" width=3D"" class=3D"mcnShareContentItem"=
+ style=3D"border-collapse: separate;border-radius: 3px;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody><tr>
+ <td align=3D"l=
+eft" valign=3D"middle" style=3D"padding-top: 5px;padding-right: 9px;paddin=
+g-bottom: 5px;padding-left: 9px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table ali=
+gn=3D"left" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"" st=
+yle=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0=
+pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody=
+><tr>
+ <t=
+d align=3D"center" valign=3D"middle" width=3D"24" class=3D"mcnShareIconCon=
+tent" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-w=
+ebkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002a=
+d89d45ca21f50ba46&id=3Dc3249d445c&e=3Dcd30a9a755" target=3D"_blank" style=
+=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;"><img src=3D"https://cdn-images.mailchimp.com/icons/soc=
+ial-block-v2/outline-dark-twitter-48.png" style=3D"display: block;border:=
+ 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode=
+: bicubic;" height=3D"24" width=3D"24" class=3D""></a>
+ </=
+td>
+ <t=
+d align=3D"left" valign=3D"middle" class=3D"mcnShareTextContent" style=3D"=
+padding-left: 5px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002a=
+d89d45ca21f50ba46&id=3D59683b560f&e=3Dcd30a9a755" target=3D"" style=3D"co=
+lor: #202020;font-family: Arial;font-size: 12px;font-weight: normal;line-h=
+eight: normal;text-align: center;text-decoration: none;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Twe=
+et</a>
+ </=
+td>
+ </tr>
+ </tbody></=
+table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ <!--[if mso]>
+ </td>
+ <![endif]-->
+
+ <!--[if mso]>
+ <td align=3D"center" valign=3D"top=
+">
+ <![endif]-->
+ <table align=3D"left" border=3D"0"=
+ cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;ms=
+o-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td valign=3D"top" style=
+=3D"padding-right: 0;padding-bottom: 9px;mso-line-height-rule: exactly;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" class=3D"mcnShare=
+ContentItemContainer">
+ <table border=3D"0" ce=
+llpadding=3D"0" cellspacing=3D"0" width=3D"" class=3D"mcnShareContentItem"=
+ style=3D"border-collapse: separate;border-radius: 3px;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody><tr>
+ <td align=3D"l=
+eft" valign=3D"middle" style=3D"padding-top: 5px;padding-right: 9px;paddin=
+g-bottom: 5px;padding-left: 9px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table ali=
+gn=3D"left" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"" st=
+yle=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0=
+pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody=
+><tr>
+ <t=
+d align=3D"center" valign=3D"middle" width=3D"24" class=3D"mcnShareIconCon=
+tent" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-w=
+ebkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://us1.forward-to-friend.com/forward?u=3D2889002ad89d45c=
+a21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755" target=3D"_blank" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;"><img src=3D"https://cdn-images.mailchimp.com/icons/social-block-=
+v2/outline-dark-forwardtofriend-48.png" style=3D"display: block;border: 0;=
+height: auto;outline: none;text-decoration: none;-ms-interpolation-mode: b=
+icubic;" height=3D"24" width=3D"24" class=3D""></a>
+ </=
+td>
+ <t=
+d align=3D"left" valign=3D"middle" class=3D"mcnShareTextContent" style=3D"=
+padding-left: 5px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://us1.forward-to-friend.com/forward?u=3D2889002ad89d45c=
+a21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755" target=3D"" style=3D"color: #2020=
+20;font-family: Arial;font-size: 12px;font-weight: normal;line-height: nor=
+mal;text-align: center;text-decoration: none;mso-line-height-rule: exactly=
+;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Forward</a>
+ </=
+td>
+ </tr>
+ </tbody></=
+table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ <!--[if mso]>
+ </td>
+ <![endif]-->
+
+ <!--[if mso]>
+ </tr>
+ </table>
+ <![endif]-->
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+</tbody></table>
+
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ <tr>
+ <td valign=3D"top" id=3D"templateFooter" s=
+tyle=3D"background:#FAFAFA none no-repeat center/cover;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;backg=
+round-color: #FAFAFA;background-image: none;background-repeat: no-repeat;b=
+ackground-position: center;background-size: cover;border-top: 0;border-bot=
+tom: 0;padding-top: 9px;padding-bottom: 9px;"><table border=3D"0" cellpadd=
+ing=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnCodeBlock" style=3D=
+"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <center>
+<!-- POWERINBOX 300x250 -->
+<div class=3D"powerinbox">
+<!-- domain: rs-stripe.nowiknow.com -->
+<!-- branding: rs-branding.nowiknow.com -->
+ <table width=3D"300" class=3D"container-single" border=3D"0" cellpadding=
+=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;mso-table-lspa=
+ce: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;">
+ <tbody>
+ <tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 1=
+00%;-webkit-text-size-adjust: 100%;">
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2=
+889002ad89d45ca21f50ba46&id=3D0722b4d99d&e=3Dcd30a9a755" style=3D"display=
+: inline-block;border: 0;outline: none;text-decoration: none;mso-line-heig=
+ht-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%=
+;" target=3D"_blank">
+ <img src=3D"http://rs-branding.nowiknow.com/recommend/300x250.=
+png" style=3D"width: 300px;height: 15px;border: 0;outline: none;text-decor=
+ation: none;-ms-interpolation-mode: bicubic;" width=3D"300" height=3D"15"=
+ border=3D"0" alt=3D"Learn more about RevenueStripe...">
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td align=3D"center" height=3D"3" valign=3D"top" style=3D"font-siz=
+e: 3px;height: 3px;line-height: 3px;vertical-align: top;mso-line-height-ru=
+le: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"></=
+td>
+ </tr>
+ </tbody>
+ </table>
+ <table width=3D"300" class=3D"fallback-single" border=3D"0" cellspacing=
+=3D"0" cellpadding=3D"0" style=3D"border-collapse: collapse;mso-table-lspa=
+ce: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;">
+ <tbody><tr>
+ <td width=3D"300" class=3D"col-single" style=3D"border-collapse: col=
+lapse;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-tex=
+t-size-adjust: 100%;">
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D288=
+9002ad89d45ca21f50ba46&id=3D39a82cf0f7&e=3Dcd30a9a755" style=3D"border-st=
+yle: none;outline: none;text-decoration: none;mso-line-height-rule: exactl=
+y;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" target=3D"_b=
+lank">
+ <img alt=3D"" height=3D"250" src=3D"http://rs-stripe.nowiknow.co=
+m/stripe/image?cs_email=3Dcmollekopf@gmail.com&amp;cs_sendid=3D1b9800e15a&amp;=
+cs_esp=3Dmailchimp&amp;cs_offset=3D0&amp;cs_stripeid=3D2562" style=3D"disp=
+lay: block;border: 0;height: auto;line-height: 100%;outline: none;text-dec=
+oration: none;-ms-interpolation-mode: bicubic;" width=3D"300">
+ </a>
+ </td>
+ </tr>
+ </tbody></table>
+</div>
+<!-- POWERINBOX 300x250 -->
+</center>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnDividerBlock" style=3D"min-width: 100%;border-collapse: c=
+ollapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;">
+ <tbody class=3D"mcnDividerBlockOuter">
+ <tr>
+ <td class=3D"mcnDividerBlockInner" style=3D"min-width: 100%;pa=
+dding: 10px 18px 25px;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+ <table class=3D"mcnDividerContent" border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-t=
+op: 2px solid #EEEEEE;border-collapse: collapse;mso-table-lspace: 0pt;mso-=
+table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;">
+ <tbody><tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <span></span>
+ </td>
+ </tr>
+ </tbody></table>
+<!--
+ <td class=3D"mcnDividerBlockInner" style=3D"padding: 18px;=
+">
+ <hr class=3D"mcnDividerContent" style=3D"border-bottom-col=
+or:none; border-left-color:none; border-right-color:none; border-bottom-wi=
+dth:0; border-left-width:0; border-right-width:0; margin-top:0; margin-rig=
+ht:0; margin-bottom:0; margin-left:0;" />
+-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #656565;font-family: Helve=
+tica;font-size: 12px;line-height: 150%;text-align: center;">
+
+ <a href=3D"http://nowiknow.us1.list-manage1.co=
+m/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D2742a17102&e=3D=
+cd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decorati=
+on: underline;">Archives</a>&nbsp;=C2=B7&nbsp;<a href=3D"http://nowiknow.u=
+s1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D84e04731=
+e2&e=3Dcd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size-a=
+djust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: nor=
+mal;text-decoration: underline;">Privacy Policy</a><br>
+<br>
+<em>Copyright =C2=A9 2017 Now I Know LLC=2C All rights reserved.</em><br>
+ You opted in=2C at http://NowIKnow.com -- or you wouldn't get this email.=
+<br>
+<br>
+Now I Know is&nbsp;a participant in the Amazon Services LLC Associates Pro=
+gram=2C an affiliate advertising program designed to provide a means for s=
+ites to earn advertising fees by advertising and linking to Amazon.com. So=
+me images above via Wikipedia.<br>
+<br>
+<strong>Now I Know's mailing address is:</strong><br>
+<div class=3D"vcard"><span class=3D"org fn">Now I Know LLC</span><div clas=
+s=3D"adr"><div class=3D"street-address">P.O. Box 536</div><span class=3D"l=
+ocality">Mt. Kisco</span>=2C <span class=3D"region">NY</span> <span class=
+=3D"postal-code">10549-9998</span></div><br><a href=3D"http://nowiknow.us1=
+=2Elist-manage.com/vcard?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c" clas=
+s=3D"hcard-download">Add us to your address book</a></div>
+<br>
+<br>
+Want to change how you receive these emails?<br>
+You can <a href=3D"http://nowiknow.us1.list-manage.com/profile?u=3D2889002=
+ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755" style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;co=
+lor: #656565;font-weight: normal;text-decoration: underline;">update your=
+ email address</a>&nbsp;or <a href=3D"http://nowiknow.us1.list-manage.com/=
+unsubscribe?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755&c=
+=3D1b9800e15a" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust=
+: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;t=
+ext-decoration: underline;">unsubscribe from this list</a><br>
+<br>
+ <a href=3D"http://www.mailchimp.com/monkey-rewards/?utm_source=3Dfreemium=
+_newsletter&utm_medium=3Demail&utm_campaign=3Dmonkey_rewards&aid=3D2889002=
+ad89d45ca21f50ba46&afl=3D1"><img src=3D"https://cdn-images.mailchimp.com/m=
+onkey_rewards/MC_MonkeyReward_19.png" border=3D"0" alt=3D"Email Marketing=
+ Powered by MailChimp" title=3D"MailChimp Email Marketing" width=3D"139" h=
+eight=3D"54"></a>
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnCodeBlock" style=3D"border-collapse: collapse;mso-table-l=
+space: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-s=
+ize-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <!-- LI MARQ -->
+<table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" align=3D"center" s=
+tyle=3D"margin-left: auto;margin-right: auto;border-collapse: collapse;mso=
+-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;"><tbody><tr><td colspan=3D"2" style=3D"mso-line-=
+height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;"><a href=3D"http://nowiknow.us1.list-manage1.com/track/click?u=3D28=
+89002ad89d45ca21f50ba46&id=3De688028181&e=3Dcd30a9a755" rel=3D"nofollow"=
+ style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit=
+-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D143721=
+&amp;layout=3Dmarquee&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=
+=3D1b9800e15a" border=3D"0" style=3D"display: block;width: 100%;height: au=
+to;border: 0;outline: none;text-decoration: none;-ms-interpolation-mode: b=
+icubic;" width=3D"{INSERT TEMPLATE MAX WIDTH HERE AS INTEGER}"></a></td></=
+tr><tr style=3D"display:block; height:1px; line-height:1px;"><td style=3D"=
+mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D143722&amp;sz=3D=
+1x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" heigh=
+t=3D"1" width=3D"10" style=3D"border: 0;height: auto;outline: none;text-de=
+coration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-lin=
+e-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust=
+: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D143723&amp;sz=3D1x1&amp=
+;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" height=3D"1"=
+ width=3D"10" style=3D"border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;"></td></tr><tr><td align=3D"left"=
+ style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit=
+-text-size-adjust: 100%;"><a href=3D"http://nowiknow.us1.list-manage1.com/=
+track/click?u=3D2889002ad89d45ca21f50ba46&id=3D0ef8631923&e=3Dcd30a9a755"=
+ rel=3D"nofollow" style=3D"mso-line-height-rule: exactly;-ms-text-size-adj=
+ust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.C=
+OM/imp?s=3D143724&amp;sz=3D116x15&amp;li=3D689d00e31c&amp;e=3D=
+cmollekopf@gmail.com&amp;p=3D1b9800e15a" border=3D"0" style=3D"border: 0;height: auto;outl=
+ine: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></a></td=
+><td align=3D"right" style=3D"mso-line-height-rule: exactly;-ms-text-size-=
+adjust: 100%;-webkit-text-size-adjust: 100%;"><a href=3D"http://nowiknow.u=
+s1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D76f23153=
+0a&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-height-rule: exactl=
+y;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"=
+http://MIR.INSIRE.COM/imp?s=3D143725&amp;sz=3D69x15&amp;li=3D689d00e31c&am=
+p;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" border=3D"0" style=3D"border: 0=
+;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode:=
+ bicubic;"></a></td></tr></tbody></table>
+
+<table cellpadding=3D"0" cellspacing=3D"0" border=3D"0" width=3D"40" heigh=
+t=3D"6" style=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table=
+-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><=
+tbody><tr><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/i=
+mp?s=3D123528300&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com=
+&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border=
+: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mod=
+e: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-size=
+-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSI=
+RE.COM/imp?s=3D123528301&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3D=
+cmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=
+=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-interpo=
+lation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http:=
+//MIR.INSIRE.COM/imp?s=3D123528302&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=
+=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D=
+"0" style=3D"border: 0;height: auto;outline: none;text-decoration: none;-m=
+s-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: ex=
+actly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=
+=3D"http://MIR.INSIRE.COM/imp?s=3D123528303&amp;sz=3D2x1&amp;li=3D689d00e3=
+1c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" b=
+order=3D"0" style=3D"border: 0;height: auto;outline: none;text-decoration:=
+ none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">=
+<img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528304&amp;sz=3D2x1&amp;li=3D=
+689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=
+=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;text-dec=
+oration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line=
+-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528305&amp;sz=3D2x1&a=
+mp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2=
+" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;=
+text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"=
+mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528306&amp;sz=
+=3D2x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" wi=
+dth=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outlin=
+e: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td s=
+tyle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-t=
+ext-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D12352830=
+7&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800=
+e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: aut=
+o;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></=
+td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D=
+123528308&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=
+=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;he=
+ight: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bic=
+ubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM=
+/imp?s=3D123528309&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3D=
+cmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"bord=
+er: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-m=
+ode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-si=
+ze-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.IN=
+SIRE.COM/imp?s=3D123528310&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3D=
+cmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=
+=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-interpo=
+lation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http:=
+//MIR.INSIRE.COM/imp?s=3D123528311&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=
+=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D=
+"0" style=3D"border: 0;height: auto;outline: none;text-decoration: none;-m=
+s-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: ex=
+actly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=
+=3D"http://MIR.INSIRE.COM/imp?s=3D123528312&amp;sz=3D2x1&amp;li=3D689d00e3=
+1c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" b=
+order=3D"0" style=3D"border: 0;height: auto;outline: none;text-decoration:=
+ none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">=
+<img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528313&amp;sz=3D2x1&amp;li=3D=
+689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=
+=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;text-dec=
+oration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line=
+-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528314&amp;sz=3D2x1&a=
+mp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2=
+" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;=
+text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"=
+mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528315&amp;sz=
+=3D2x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800e15a" wi=
+dth=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outlin=
+e: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td s=
+tyle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-t=
+ext-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D12352831=
+6&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=3D1b9800=
+e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: aut=
+o;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></=
+td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D=
+123528317&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3Dcmollekopf@gmail.com&amp;p=
+=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;he=
+ight: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bic=
+ubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM=
+/imp?s=3D123528318&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3D=
+cmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"bord=
+er: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-m=
+ode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-si=
+ze-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.IN=
+SIRE.COM/imp?s=3D123528319&amp;sz=3D2x1&amp;li=3D689d00e31c&amp;e=3D=
+cmollekopf@gmail.com&amp;p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=
+=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-interpo=
+lation-mode: bicubic;"></td></tr></tbody></table>
+
+<!-- PAVED -->
+
+<img src=3D"https://pippio.com/api/sync?pid=3D2397&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2398&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2399&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2401&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2402&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2403&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2404&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2405&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2406&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2407&amp;it=3D4&amp;iv=3D=
+&amp;it=3D4&amp;iv=3D&amp;it=3D4&amp;iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ </table>
+=09=09=09=09=09=09<!--[if gte mso 9]>
+=09=09=09=09=09=09</td>
+=09=09=09=09=09=09</tr>
+=09=09=09=09=09=09</table>
+=09=09=09=09=09=09<![endif]-->
+ <!-- // END TEMPLATE -->
+ </td>
+ </tr>
+ </table>
+ </center>
+ <img src=3D"http://nowiknow.us1.list-manage.com/track/open.php?u=3D288=
+9002ad89d45ca21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755" height=3D"1" width=
+=3D"1"></body>
+</html>
+--_----------=_MCPart_2013239186--
diff --git a/src/core/templatetestdata/README b/src/core/templatetestdata/README
new file mode 100644
index 0000000..9153cd1
--- /dev/null
+++ b/src/core/templatetestdata/README
@@ -0,0 +1,9 @@
+Most of this data has been imported from kdepim originally with the messagetreeparser.
+The .tree and .html files are anecdotal only.
+
+To generate new gpg encrypted content use an existing mime message to your liking, and then
+copy in ascii armored content in. The encrypted content can be created using:
+
+ gpg2 --home /src/kube/framework/src/domain/mime/mimetreeparser/tests/gnupg_home/ -a -r test@kolab.org --encrypt toEncrypt.txt
+
+where toEncrypt.txt contains the to be encrypted content.
diff --git a/src/core/templatetestdata/alternative-notext.mbox b/src/core/templatetestdata/alternative-notext.mbox
new file mode 100644
index 0000000..8602643
--- /dev/null
+++ b/src/core/templatetestdata/alternative-notext.mbox
@@ -0,0 +1,22 @@
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with a empty text alternative contenttype
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="----=_Part_12345678_12345678"
+
+
+------=_Part_12345678_12345678
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/html; charset="windows-1252"
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p></body></html>
+
+
+------=_Part_12345678_12345678--
diff --git a/src/core/templatetestdata/alternative-notext.mbox.html b/src/core/templatetestdata/alternative-notext.mbox.html
new file mode 100644
index 0000000..41db4ea
--- /dev/null
+++ b/src/core/templatetestdata/alternative-notext.mbox.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/alternative-notext.mbox.tree b/src/core/templatetestdata/alternative-notext.mbox.tree
new file mode 100644
index 0000000..0de0728
--- /dev/null
+++ b/src/core/templatetestdata/alternative-notext.mbox.tree
@@ -0,0 +1,2 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::AlternativeMessagePart
diff --git a/src/core/templatetestdata/alternative.mbox b/src/core/templatetestdata/alternative.mbox
new file mode 100644
index 0000000..6522c34
--- /dev/null
+++ b/src/core/templatetestdata/alternative.mbox
@@ -0,0 +1,28 @@
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="----=_Part_12345678_12345678"
+
+
+------=_Part_12345678_12345678
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
+
+
+------=_Part_12345678_12345678
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/html; charset="windows-1252"
+
+<html><body><p><span>HTML</span> text</p></body></html>
+
+
+------=_Part_12345678_12345678--
diff --git a/src/core/templatetestdata/alternative.mbox.html b/src/core/templatetestdata/alternative.mbox.html
new file mode 100644
index 0000000..2fe886f
--- /dev/null
+++ b/src/core/templatetestdata/alternative.mbox.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/alternative.mbox.tree b/src/core/templatetestdata/alternative.mbox.tree
new file mode 100644
index 0000000..0de0728
--- /dev/null
+++ b/src/core/templatetestdata/alternative.mbox.tree
@@ -0,0 +1,2 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::AlternativeMessagePart
diff --git a/src/core/templatetestdata/applehtmlwithattachments.mbox b/src/core/templatetestdata/applehtmlwithattachments.mbox
new file mode 100644
index 0000000..cb39229
--- /dev/null
+++ b/src/core/templatetestdata/applehtmlwithattachments.mbox
@@ -0,0 +1,340 @@
+Return-Path: <test1@kolab.org>
+Received: from imapb020.mykolab.com ([unix socket])
+ by imapb020.mykolab.com (Cyrus 2.5.11-41-gd53406f3f-Kolab-2.5.11-15.1.el7.kolab_16) with LMTPA;
+ Fri, 29 Jun 2018 14:27:36 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx001.mykolab.com (unknown [10.9.13.1])
+ by imapb020.mykolab.com (Postfix) with ESMTPS id 1E5E8108
+ for <test1@kolab.org>; Fri, 29 Jun 2018 14:27:36 +0200 (CEST)
+Received: from ext-subm003.mykolab.com (unknown [10.9.6.3])
+ by int-mx001.mykolab.com (Postfix) with ESMTPS id 09E231F3
+ for <test1@kolab.org>; Fri, 29 Jun 2018 14:27:36 +0200 (CEST)
+From: Kolab <test1@kolab.org>
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A"
+Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
+Subject: Apple HTML with attachments
+Message-Id: <7A536C16-FA0F-47AA-8FFC-F61761E7689A@kolab.org>
+Date: Fri, 29 Jun 2018 05:27:26 -0700
+To: John Doe <test1@kolab.org>
+
+
+--Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain;
+ charset=us-ascii
+
+Hi,
+
+This is an HTML message with attachments.
+
+Cheers,
+Christian
+--Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A
+Content-Type: multipart/related;
+ type="text/html";
+ boundary="Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091"
+
+
+--Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html; charset=us-ascii" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">This is an <b class="">HTML</b> message with attachments.</div></blockquote><div class=""><br class=""></div><div class="">Cheers,</div><div class="">Christian<img apple-inline="yes" id="B9EE68A9-83CA-41CD-A3E4-E5BA301F797A" class="" src="cid:F5B62D1D-E4EC-4C59-AA5A-708525C2AC3C"></div></div></body></html>
+--Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename=kubeonosxscreenshot07.png
+Content-Type: image/png;
+ x-unix-mode=0666;
+ name="kubeonosxscreenshot07.png"
+Content-Id: <F5B62D1D-E4EC-4C59-AA5A-708525C2AC3C>
+
+iVBORw0KGgoAAAANSUhEUgAAAUAAAACqCAYAAADcOJb6AAAAAXNSR0IArs4c6QAAAZ9pVFh0WE1M
+OmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
+eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3
+LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlv
+biByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNv
+bS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjA0NzwvZXhpZjpQ
+aXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMDkyPC9leGlm
+OlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4K
+PC94OnhtcG1ldGE+CnDhDyMAAD0nSURBVHgB7X1JbyRJlt6LCI99Y3BnJslMZmZ1dVd1T68SBB3m
+JGEE3XTVSTcB+jmCfoEO0km6jCBBF42AUQMzwHQXpqu6tq7OyrUyk3vse4S+73kY6QxuQSYZTjKf
+VUX6ZmZu/gX9i2f2tsh//r9fD9dyQ4mWyzLwIhLJ5mTY3ZeIDGUYK0l1UJX2sCvz3oyIRCUSwfkh
+dkcl4naObEcVIrgaqHukypELrhdXGce4D/5B+9E22BinhoEq2lWgKnbdqWCrw3GPKujw3C15r4Mx
+AQf2hzM865fR0egEaoxO4zwroxzW9S+5c9oyUN2d11o4z+v8h1W07mjr77szrHS8uDa8MrrFqFLw
+yuiqq6CXeENXx10YNR1Vd0fjV/WrcRcPtmO1cBisp98X6h59GrbhmTPKqAo37jth7QP8R+0jo+/g
+jJ6OXGJ/LEfHw36PFr3naIijoWgFfT9Ge+4ZxtsGewo+5Vn1XJuT67uzrgd37Fq58+746JZXgy30
+eNTktJZ+m0O0j/bg+j9szf4Pj3iAoyBhuO9r1HSI65HRdb8tkWVBO///gzEf9Msu/RrYYg//n/z1
+D4+MxW8/ehY0iEWj4iWGHXkym5XSb38rvXxRyv/yr2Rm879JZNCW6uK/l/9e+1t52nsu/6H47yQd
+SctAb60jtH8MgQME/D9a/ZsN/IUEz7Iqj92fsbt20MXYzqT1xprduEM+x/iznnSOA3fPfNJDBLE7
+6fp558bbB8d02njO6/M2XXfYBp9bxOt0OlIp9yTzww/SzdelUilLuvIcX0VTKsmyPGu8km8Hr2Q3
+si/5WB9f5dEO3guCSPT438Z7dXidjfFrAgwvKmlc54isb0PAEHg/BCL/8b/+72GhuykepsD9aEwG
++YIkh9jv92QYn5dqvyLNYUsWY/NXRn3DYV/i2RkZrjw5Kh2/37NcW2tSfjLSl8X+vizNz4MFsRRw
+tT8F1zZ269gQMASOIsBJsBPjvGfPnslv//q/SCQel1QyKe1WU1KpjLTabRkO+hLjuh9q94eDo71c
+9ghS1GDQkdLHv5bOv/lnSrSX7Wpa7foAbDVSl39R/Vw++fEnEotFpNHnhAUS7AGU0xqN3ccQMATe
+D4GhpGN+D16v05ZGsyk5z5PHGw/liy++lGazAQLs4N0eyCCJlxzKkWAZOsVE8DTPBVciSbGcMgYb
+8lQT02hMu9PdrnTEk+6xGmMNbsAhCbCNnwJO/+PxGATAmFS6USll4jdgdDYEQ8AQmBQB0lK50ZV8
+0tdmeH1IeXyxnzzakJmZok9amOJFwVxDqO46vy5Jdy4BpYh/C9ZNxeIywDR2gN5Ihuw0GfOkp33x
+nEgcGhZKjV0cBEkw+9sdiW6S9nxBNKqtjw+ffbIdt664ftw5Ho/XGW/n2rAPd238nOv/tC0f3XE7
+n40PmIAUeC8HAtQTx1sSF1svPI6LnTEE3gcBFb5GL33w/fJZKNCze9ndFpfIOCz1dld5i/veoNcD
+2cWkXKnId39+Ki1MgbMwhXGl/TgjzYc47rEnTF/xeTKzjg56Uu21lRn2Og3ZyC7KbrcG0huqprjk
+ZeRVY1O2uy3IeZwq+iXz+73RMNwZn1xykDJbfUhYIBZyCnZBqEPxyMQo/JfHNKfwwEasw0sJdN3B
+oOLY57UOpqYcQxwXOWKcAmGDyNGWfXaxTeM4jnZ9tKuNngvVLlwGfNbBABJzC9PiqLQh2XIZIQoJ
+sQvJugNsU6mUkqQX96TfgyyJHwYOnl8k29MEoNfHUgMkcA/XumgTi8VwbqB9cS2Wz8B/oviRiTom
+vvBorYEhcPsR6OIda7bakkympNfr4F2L6rvT73Xx7vTFw7vTx7uTSMTBZS2J430c4v3q473PZbOo
+r2/TARCeL6kM5dnzF/pyOZY8qEHGQ4cRdMDC64VIRhbSIMZuG5JQXD7vPpNcJCXZBF5+1EnHEpD8
++vJusIW2aOPER3bgd8M9Lew+gUF9OuPJu8ZASphyUyqsgpjetYZyP8MjEmFUdluYkmP8qIqps0gG
+RBZDfwO0T+HGPZBJuT2UPVxcSkekC8arY9w/yXuy1x4I/pcfsHi3mInJDBiwBcB+v9tXIvVHc/F/
+h4Oe/OlP32JqnJBKrS7FQk7yxZK062XZ2qlIPp/VL+Te/XtSr8LWEizNL41EhuHql9jAF5pOpSWB
+6XUTv04xLLq2weRrqyuyt4cfDEjk7U5X1tfWJJnwxiG8+KCthSFwCxHge1OrVeXd9q4sQBm5v7sN
+IWMgs3MLeJHaUsb7R4GjiSW9mWJRtnd2JF/ArLbflUa7JxsbD3T2Gnx0ECAkjMK8xLKoiDdSRcz2
+Pur4TBXb70o8jfVAik+j8tn25yAtsBDqkBCbuEHV29cpMAktHY2DAHtQFHQlrcqTQ9aNgNgoqQUL
+q1S6mFpTjMP/lHm47BiLwkBb60ZVwqNMFwcZkDApOfHeJLgcyK/RAxGiYz0PAqHypo1rmO7LFkiR
+N+XCJ9vUcK8BSJ2c7vcfHM3F9tkP/pcI/iH58deHJYMfiGIR0h0kuh5+nbickPDi+CI6Op328AvW
+xzpoHxJkIpHAdSwX9CJKcJQoE0n/F6wD4kviS200akrwCTw3pUOK//yDMIHwYt+X1b69CJCbcvm8
+zoSSEBiSkPLqDZId3rteUrKwYCEn9UF+qWRCMpm0SodDvGMltI1jlqX8FoAA8zKYpPzqX8ncL/8S
+zNPBC9qW7l//J5FqhaKbZH+7K2nOM0eEGGh7sJsdXSUlsnBWSWLhRJotfUrgFXRZBhkoqfnHvM51
+wm0lqaFkPbB8ty91SI6UBklg+zjm/Xc6JLKBfI8NeOxIYT/kaEcI75pY5Bwdb0NydOdZD9qXKyuc
+ui4vLUg2l8eD9iEVdyWDLyedSko611Rr8wHGTAkxmk1JBgTI6XK325MWGLiAL5SExi+H4noOX1q9
+0cD4opKCtEcyjENDv7S4DHIfYKmijF/BukQg6i8v49yVPYl1ZAjcbARIXgnMMjn95X4knYKQUcAy
+FPa51BQovJ5Op8EXh6TA5arx4qG1eLPL8rOPfyQDEODraku+x7TWNYzsQVeLPlw/h1ucPFLwKvJt
+ZIWx4mucIXvxOpgxSICsCj6Qh7mY6lnBf1in8+Q1GLCYiEgRUuEyrpB//24L83y/CzY7VjAjPlrc
+sdsevXpFRyDm3V1dl2hB9O6AAJMwI1pdWZTXr1/jmSGJYi2itLAoyehAtnYrKuV1QIB0xaGEqF8m
+xphI4SdjNiev325JHF/04tyM/PDmDfpLquY5gV+1OtZqayBIrHbIyvIVPYJ1YwjcEgT4rvDD4rbj
++3oxeP0ETnJ1VGgbYopGyY8SYJdTtJHMxnYzpRmIlz2dLiawkN/FonwCi/HN0VTOv7kveVHspEjK
+6ZnT0LAPSjzkIF+ycbf2t+TkLOo/q/WkDUGPig62bUOcq2F+/wztOTPmdJVyoEpwR7u42iMOFPea
+tHAi/mB9XYksNj+nU2tKZ3Fgdf/+fcWOfVExMoCEuL6ah/TnL95SCeIBS4LDNUEqSJKQFB8+yKjU
+R9x+/hc/0775K5fBIi4xnsGPlk5/Jx2k1TMEPlAEKPWphIj3iwoQx0sODihUoSF9+0y++N3fg2V6
+eDm7EgUR8q2kGcsvfvkradf2JBpPYUpGDUsE2pSk7OyVMRsd2dLghedC/srigkosEdxIp3zohYSW
+gsgqMH7+u7//B5AY3nb06yRFElqdZNcIsg5JUGCLGDwHIiU5XXGJYiwxrFcOoAmnsoXiKUktyh8B
+EBQlOG6jtAYfuz+x4zoeF1vjyTSevyBv38ClEM9DbZQW1BngR4NSG8X3DMT2Fqa1JLBGsy3r6/el
+vL+He0aFbokrIM1iMa9fGttz+uu+NP7iJfSYV6iBPooPz1oxBAwBHwFyCPmsUqli3TAmc7MlXDj6
+EnsRLMz3f/c/pfz5/1FOovSXwXoU3lAQYV+2623JFDEJxYtHiSw7k5YKFuaH+bguRg6whpjIZKS+
+tyObPU+Sy+swAYGdH152mn4kcMsWXuw+NMZSWuJ7C4UBNBbpHKQ6sPPo2+Jgx8v4OVd3vN5lj7Ey
+KOl+UzK9hjQ9SFe9GsYH7XA8I9EBprL49EGM/GGIpJM69vF7RUbSLdXzNGch0D160ZCsEjSB6YPY
+oEiKYxqLxu0WpD+0oacN8anXm9DwQqqGIqSK6e0cpso9LO6etF4xfm87NgQMgdMRiEJi4vo6BZQM
+OGoWs1knTLhWvt4CEh+JLwbJjdNd8Xw7QEpBX8qcRJd+A9Lq+tpXyipZ1FPpA680JKMWmkTugydw
+LoapHosvTZHtUAdkwG303l+qlpZyY3JQg/cJNKiUsEIqJMAkyD7Zh8IC657JfgrrnX1p4EeB5jWR
+oT89HQ4TUvCROjJSklwU2vClJRA7Sh8EODNTwuewGrqRfDeHejHxPEiZxEKpkFu/FGAqw3NZfElc
+A6Ua34ohYAi8PwK00lhYmPeXmk7ojhEAVSmRhfYxD43km7fvDqqpL/DKY4l+/M8lMWzLz2CAR00r
+FRP71MiikAe/hOEdZsZH1uco7ZxUeH4wjMli9Wv5tz9JYuoZrjvZEDaNh4Q0OxqyIyeOFmp1GjC3
+q/Jm150fVcOGU9kktLdnFaeh8snv9JopKDvOq3N6a7tiCBgCJyGQzfIdx1uuU8qj77DKNZTcisUZ
+uX9vRd6+20TVw0oRurdRQkRQ1CjYD3bJiBYDOz0wK5USVD4PnbcC9icptD0sxAbyV2to7XGSfHML
+I9e8ePpGEtDO/g+V3I6PlZ4bVgwBQ+D2IaBhDigF0ieY7nD+NG0kv4Exh7tvJfLqK2hlO/L7lzjG
+FI7KCDeXxrIgJsogzEPOPBcFGgUP01CiYL1tQJHyphY8/wA2iPuwuytluCxw/lhp0NyjxIipPbG0
+YggYAjcXAZUAqR5+B8nv7Wj6Sw0uS4RBDz77XyJf/I2uYWXh6dDB4n0HpJCFScYA64ID2Lj1aKis
+4uVkD9qjwuDXfyER71/rHJqkSns41biCXGkfR4LleSoDuO8+XGfzPSBGJD3ZLS9XC/enScvGxoba
++eHwzMIxNusNefn6DbTCKZjHrKlB+JmN7KIhYAiEhoAXnNU50jkYDUmoUQER7Usyk5cff7QmzUZd
+bQaXsLDYbTdlc2tTnj6jwe8FCAl2cNJ6dECag35bnj59rlrhZDIL05B7UkWAVpLPHoyMEzAxYfd0
+cKaGeW5hAW5l05GuSMqFQh52j9Bin1OIAd3ednd3oDVPw0NkCWYvtq53Dmx22RAIDQFVgpx595GW
+lsqOfdjT9CD10RWlXNmHKUdPJR2NcHIRbS5NS0b1fdKACxmi0OzSni5TQBCAZXn56pVKmvU63L4g
+EVLyoyqbxsEFaFpTMCGhIfE0yqSKCUqrOeRV+c1vfgPTFxLmdMY3DQzsHobAXUTgBOOO449JKajT
+bsnXf/oWCpHD6e6B1HcR8hvrnmtmCRDqo4cbiHayqqRKu7n1B+tSrVZBcvNqmkPn5zzCdPFWKQQK
+mJSUxm53/Ycga0auoV0fCdGNk9sDvM4cBaf91C77SwCsOt7O9ekL3b7kzXP+ed/ine2C9wzu+9do
+VXl+MAX+xvj38fsL9ss+uRxhxRC4rQiAACeUUjAdjWRLMAepw2wGa3Kwaxs2q3wr3vvZ+YI9f/EM
+7yMNg+tw+crAtm5Z/V7LNUSrzsHQGl4TK3D+j0MCVGJ577teTweMsL2zX5FiPoegBTX16U2Oor1Q
+YqUrW4OeIHhoEojHIAmwpWQssxjO0Ze4DTfDJOq1ERqL/JJCZBmGwWrBiJpkyHN7+2WNEpOCwXkc
+SwNN3IveODRYX8TyRBueJ236GxMv3IdrrLTRjGHpgFrrFq53wYE6RSdRYy0kDS8VxjHsQzFFAnYE
+TuNu/gjGYaRYrTYwC+ghAkcBBqa7srS8BA/Kjhp75/DMFq/wev6urNfrQeDIGuCptyDJIcRVZGEd
+hAcNJ9a58CbJ8OUf4esGK+j3KHyhW+o/jABWeEHnZmfVn5ZSVBIvfgkeFHQRo/cEqmr4qPe43bU2
+5fib9Yp88823iN4yJ5vvtnQdc35hSQrpuGzu1eTB/UX5DuudfB4qlGYXloWBpV9twlo9BV9qeIYQ
+E/oNt0GGxCFTKMn60px8/+IlrIbgcjdflM8++4MUSyUls8ePHiM22ibcExHGzEtJCZbYL1+9kD2Q
+FcVJ+ht3QFpULtFkKYFlhlwyAqIGQYMQ6c1DF8Unjx7Ki+fPsRzRxbpnViPWcOmBv5FxfBePH9zD
+D9VznB/I2tqSfPn1dxpF/AdkFKQy/3Emiz8LEPu1omydGwJXh8D5a4C8F2dZsAUc7L5REuI+1Zv0
+BfYnYJcfkEpBcBn75NNPDv1n0R3P03cvOMWiRHL1xfepJenwnty6wmN9YGy5e17hdD6dLchHjx8p
+aa+tP0ATBjHISTYFjTokXEpzq6v3oDnvQdLq6ZphBLmZFxHgkRIWo3EzlBYDR3iwkXQ5SNKQiheX
+FnEtI3lIxL/4xc+1PaW8FBQti4uLkkMg1j4UTHSzK5Vmcd8CpM2GHxQShMovslGvIiT4QO7dg89x
+qaWRaijNU1LMIHwQ+6H7UC6XhcILHimAg7AztJCG5YJih9IhpdqPnzzWcwxO2YUlAPuYAKbzYLTr
+hsDUEJhoDZBvAWPRedV3qozwiQgBD+BGxuClKiK8x5CdIfFJBHfSufe41VhTSJ8w42liaskApHRB
+8+AGRwKiNrdFH148IyUk5jsBCmPtjx6SMLmeubp6/xiRkhiKUN7weehxc1BIrugXM/4zir8uSGN1
+Yk3D9WAf7DMSKcj8iLzVVAia60My5939sVOyJJnzh0X7CBA++8nlfDfIk34MeG597fD6woI/TWYa
+AF7jx4ohcJsQmIgA+YcdwzrTo42Hsod1nwGlJfw3UyjID4h519C1qcs9dpgvDTgA0hIIUE1cBrKL
+8PMQY2Qe0hNjIzLkF6O66PociBG/Auc+JH2p2R+fS13kHPcQQ/RF4tFp5bk9Ha/A2agr432M43je
+D8dp18f7dfdz25Ouj9/b1bWtIXDTEZiIAClJ+Al9PKxZzSOqAiQZTN9oMN2o7kNBwXWri9vl8SWc
+linLSV/EkK59mJJmsHbFxXtKP5T2SFT9AaLNFjClA3Hx+ffgJYPdMwvNdRowD3r5+h0UGG1Jwb+a
+PxVUILDPPCS4xXmE5DmnnzNvYhcNAUPgyhCYiAD1bpgCP336HV7omLzLbmL9r6+xtqippG2KvtNO
+2jlpeCdeg0YT5BJmobkKi5IbhhLBlJf72Ggh0e8i9iHtIN000r9yyr94HobI4rSwRtJENa7lZdIJ
+NeqeRb4CruuZ1HQKfnbaEJgiAhNpgdXQGW8yJZkupob7+zDyxYsex7QwgsRFiRFbMBAqw89QYiKx
+kNto06eKDBxwesgXn2HtWXxbt3AJ0B+JPo7b1XHzgM/dbbTly2++kY1HT6j3ObNQKcRpbxomLFDz
+yjJi1jMgI5UDTHeJHmWvvKdSJ6PvWDEEDIFwEdBgCGcNgZLPPBbv21gre/LkiVQQvZjnuDZGFzHa
+7fHlZjDQFEiPuXFp21bA+iCThzNyNG3aOF2u1ZDPAsmWXr764dgt3VTz2IVLnjgqYZG5jmp4J+mW
+fcQx9nVEaWasRK57nlVoL1eH8Xa10ZIGnnVzE7k9oNmlMkWbQopmoISV1XX50cbajTbpOes57Zoh
+cFcQOH8KDBKgtpD2YsxzMTvHmHmYCHOdDNPDwkxRJcA9+O6msZ5WwLU07NkaWBekOcXsLKOwxhDK
+3dOMZy9gBDweAIaayf1yFQFBfamIWk5KjyyUwihZMZx8G+5yTDZOcwyaaKRgmkGvkHK5gn3YoEGp
+wUV6EvAAWlyGnKfigtNsZm3jM1yo4NmjyHH8+PEj2dze9qfJZ3TANc08fiyWYDaSuLesPxQkTho2
+UwqkeUoMNnk0GA5z7fOMR7BLhsAHhcC5BMhp6rPnz5RENre2dDpLyYjTQWz0RebLTdLiCa5/OU3n
+EOdUcgIBMS0SJSgSFA1yXeG0utdpyDfffislGEHTE0GnjbCZU68FtGXI+McfPZatN6/kzeaerq/R
+fIUEuL6+Ks/+/Ge1v2PaJE65Z2bnsFKJxOwwRCYJUzr99Kc/k4VZP4Weu/dkW9+8g896bkGlGJYF
+mK4yKIEemqP4PZDQjQDPRdMqGALXjsC5BMj3nmt8oDbVkvYRDKEFlytd18M1rvuR3OiCRZcoekNQ
+emOgZ3oy8OVnFrQOiIhlnAw4N2Ru3YW5OVwdShMERls8unel8KH0xNwZFAiL8IgYIIYgzVNmSkVp
+Q5qkdLm6uqrT8Bqkwnw+pQmTU0ji1Jv3CZeSGSXQqRSQ4EmmIlO5t93EEDAELoQAU1CcWSjJ0JWr
+B+UHp4LQZEiFibnRisRFL4IW1rviaWQy67UkTXcoTI/pwrWPaTEr/vDylexWaypFjt+M/cegJf3o
+oycjsoTxMTWzOB8sOr1EDMLFMemK7SMRF8qeBOs39ce9qF2QrGneolJqsFPbNwQMgQ8aAYhFpLLT
+C21/+/D/5dR0ZxfpG5Ehja5dnRac4rtw7gdX1RAjsAOCoz0dGYjKAEqCDJ3Vw4JfjDRLQiM7nVJI
+WPx4IFWS1UmFrmYnXWK7s4pJZGehY9cMgQ8XAYhwZ5MHp7jv4OwORtP8mlxPc0XpzJGakhDPjIiO
+x+4azrops2t72vY8MjutnZ03BAwBQ+CiCEy0MEZNLDWrC/OzavZC5QbX8khqjNnXwxrb4dreSMoL
+kN9FBzXN+rRN7ILUqZihpMgpPUNu9fFMmucX56NQ1PQPCH6ao7N7GQKGwHUi4GsXzrkDpbIozDce
+bTxSDxAmUGJgABLgF1/8QcoMu3RLCC/4qCRtRkupIgQVU1LSF9iDMmcGLmv9XlsaMIJmGH4qc2LI
+jxI5R1oO9m37hoAhcPMRONcQmo9AmY6BPp8jHl0uk9DoKbQBpMkJTVQuW0is4U55IcmCxJk3lLaF
+Jbip0WyGWm/4rECjDFU2Cr072jRmtmIIGAJ3CoGJpsCU7qiFffnyhU51uU/pibNCanyD63sXITRq
+ZcPWzFJxoyuXeJZ0KqX7HFMEEiELn5EU30FyJu5bMQQMgbuDwGQEiOdlBOP5uQV1gRtAGzuEpMTQ
++AzVXofrlzN9YZa4PghkkkID6ptS8CgHhcbfrvBJnlWHUoCkaMUQMATuFgITTYEp1dHDYQ15bpNw
+SWPo9jJd3yA9MTcw8wRzSsxAontICUnzl0OlyO0GjFxIiZekHiTJ2/1UNnpDwBAgApAAz5fWSGb0
+8vjm62+QiCctOYR2ere1A8UBvC1AfMw5QT9dKkroq3tR8tNpJghm3CqbIzuUxRBNhhVxgh69Ljj+
+gVyGMR7W5aNdXXky4yHnhj/lv7perSdDwBAIG4GJp8A0Qq4ivh0/WyBN+vA2kLeCpKNERfEIBEWl
+wkULc5I9rfZlLkVzExpeY8qN7qh0RUAZ6WE7mxLZbiBR0DAi+XhE6h3eKyIpsCH9jef8JbuL3nqi
++kkOxoohYAhMBQFVjo7u5N48UMCxMn7tpGPXzl0bF84mJkDe3ZHbeGfu+DJzRA4IQqRU4VXSQqio
+JtivC2kwDtJJYIJOhUQH4l4GdohdkN87kOAmxuLMsRlUYD6NMPYpP5DpMZSu4IQD8bSu+IWNA3ta
+XTtvCBgCZyPAWWRvFEfAvXsHYtVI0OJ5994dbHGO76HyESqwjgtiR55Iw5qDuopguRABBhte1T4H
+Dz2K/BjTTEpyNaRczGAuTKGLQ+2SXPAfgigjpFVMFkF2+vC4xugyWJ6TFFcyeTKkwgRKXWRnoxsf
+3QBVEsYXwWdjoZZcjaz55eFZuF7KLeMkWjEEDIFDBBi6rokYo3yPmJCsUt6HowI4AXEAInif+E5R
+H5GEfS5zaNdQt4hUFrTf3d3ewjap1+jEQJM2NXFDP21Ej9KweJnM4c2wFzoButHkE8rbkgX5Bbks
+CaLQMjqJZw+Uw2vBNoEK177rf2E12dbAryn90hjfMIn4hJEBYhIiYVQRScTrtSp+nZhgqedP7xHu
+iwnMlROvfZR2A0PgFiGAlyIDokqC1J5//xT5rRHlKZOCQwLeq0RMssVZefJwTQULEiBTttJW99uv
+/ihNmOt6sC5RSxVIR/fWHsrDVcbmPJkhbgwBuvGdPMzAl3duhUDdCXdJo+zWbV2z8WN3nlsqYTA7
+13bJdE5mETiVZEZplb9Smi4gAgkPHiSaEyTrp8L0QIDOdpLTeHMuIZpWDAEfAb6HsDLWgModLIkx
+wHAC+a3hgiZxHKcwa4ohtF0Voe+YeGxIXQTC4lFKnF+6pxkZu1DYQoSEUlVfSARraWoIPebp4Tvr
+FKi8oypeedMPtdDEhWHqaefIKDQayQZMRhLzfYMR7RDHahw9AonEyLn3ToOh7oEevoRIDFqaQOHU
+Hd8OEE5LVWe8o+ku1jLd+mWL7a0YAobAAQJUbDb7DJKMmVILVJVEJPcU3zgIFaNafLW2ay28grge
+gwtrC+9tB7FBU3lYpuQlwfOURlCR3LaFun3oFnpYneI7FwWZ+j3i9eQK24daaPBMEbqO0Pkp2DeW
+q2WsQ8Y110kfQVybzG+C9QMGTFDICOqo5D0QJ+pwkdWKIWAIXB0CcZh+xLBEdLQcvnv+eRxDaOES
+1Pj09jDi/GGbBOpGKOwM2pLnMv2oc9zF7R693TSOKGUpi0/jZifcY4jo0nz8OOwX6ZXCaeuBeAxy
+pH2jgolpLMPY+78nfkdZfj/8KbJiCBgCV4uA8tYheZ3f+YR13fuK6m4X+tMJG58/igvXIAGGWWjb
+mIJhdwoiNkVv+gJzTDT3GQ64pkds+BnKzj6iWweGG/LQw4TN7m0IXC8CgffsWm4U6D9UCZDG1Pg/
+1MLQ/SeW0XkmgH/6/XNJQYkR5o/FiWO0k4aAIfBeCIxPtN+rs4s2poAVnvw5wWhHa341mLDEMzld
+V52glVUxBAyBW4KAN3rHQx8u1wLHrbSDg9Kp6Wiw1M7SzicKuzoXucVNp902GKIr2M+F9kfT4ceP
+H0sdmfDGF1sv1JdVNgQMgRuHwETRYK531Ai00G3Li5evYTBcVEUD8wKTwDjlJCn2oIUtzZak224h
+GGsLkZvLmmozkUwjiGlBAzL04IlB62+2vb+2LtnkUYPqyz9DBFph3mMfaTlpj3T5nqylIWAI3CwE
+JgqJf51DplDHTHPbO7swVgTB1Rtqc+chNWYC/m/qCwxySyMTXR0huN5sbiEvSVOJcShV5CSp+HZ6
+cEejwSNJcW3twYEd0FWMnVIlzWGW5uaVoK+iT+vDEDAEwkcAEmD4Ik0M/nsbD9cVjXqmqeHpKfnR
+F7ALYqNdI33/opDAhjrtjYHo4AsIS/AWkqTTFYZ6bUanIVEmkwyMcLXPRY0wPTqsGAKGwN1BIFQz
+GMJIoorSL3ZxUSU5ru/5a4F0fKYg56tJuEZIN5gCEha5wrasT+mMhUEGqFm+vnK1pHp947SeDQFD
+YBIEQjWDORygT3YkNN/t7MAc+Ygkx+v8BAvJ0hlTMxn7+PVgXds3BAwBQyCIQKhmMMGBXHY/SHjB
+/Un7c22cpOnaufNg5JttquMGbFtDwBC4MAIekxt9yKWDdJ9NrCNyvbGJsP4xuL+l4R0ywHS65XyB
+Mc2ORqAvutFGix/yt2jPbghcDgGvBq1rmCLO2Iz2ck9xyVa0IWyD/FpQppDbfCzgYI1pNYMhtJAL
+mOGrGMMvA0PoIaO7WDEEDIE7g4ASYFiTPK7d0R83rALBDtrkhMRhcsP1wwUSHwKGJaCVHkIiTCPC
+lQZAgOjXR8gsHlkxBAyBu4OAR8Ph8AokqjDnleAzpvl0JYEItByOv/43Wh6FiFpGIijE4Q51qG6M
+tjUEDIGrQ8DjtC6siR2noKFOK0958EOFCAOhduTlq9dyf/3B1aFuPRkChsCNQADLXVflMvZ+z0PS
+OSSe44KhuzZe7/3uek5rJUik4SzkkZ4TONkM+BzA7LIhcLsQ8JhpKezCkFPbu/uSyyP8NdbeOA2l
+/y+1M76UeGjwzOjMbbjGFfK56x82sKFCZO3+fdUUX/8N7Q6GgCEwTQQQDu86PScmeRSmjGzLV19+
+hQQoRbl3f1XSSHz+4uUbjb5CMtR8Hb2BeMif2UZUlgTMVArFH2lejknu8H516AIHUoa22IohYAjc
+LQSiKkmFKARGkBaN09rZuZIf4ABSF707PA2E0IdWlq5xnqSokoWGlq5uTJln2dTu1h+iPY0hEAYC
+Xi4Dk48QzTuocfWQKY2hpmgQs7+7Iz0kOl5aWpbK/i7y6nYly2TGIMn51VVNgkKCDNN8Jowvyu5p
+CBgCV4/AjbDtYB7Pza0thMf3sPbXlSbyfMaQiIgZ22qNNvJ+1kGAMVlZWfFzfQKHA1e1q8fEejQE
+DIEPBAGvg/ybodnBAGROfweY5pLcYlhrYyY2RnvmNDcRX1HNKxUiERgqx1D3OoiPY2C/buu+e3fM
+7SkWM66qbQ0BQ+AWIuC1EGE5zELiiSdScu/ePSUgNxae59SX5OOKi/rijq9iS/LtQKvMabULxcVU
+mLwXI0yrkghjoYeIFUPAELhbCHjMmB62fOMkrZOku5POXdVXQBObaq0hlVpdsumMVJAYPQIJdAbr
+kZoYvQ1fYChjuvAJTqctKdJV4W79GAI3BQGPycDD8nGlIuM6pLpJwXVeMHSH8zxEmcYWwh4KfhIg
+BSYQhVqnvwkec91x0p6tniFgCNwGBEYOr4fTzGkOOmxCoXSZguTHiPokugx2eI77g2HyYN2PZNhA
+HhIrhoAhcLcQ8JhbIyzRhjZ9Ydthn2YGfuz8sRN36w/BnsYQ+BARiPZ7bSQaCufRA/qNcAYw4V11
+GnwgD07YyKoZAobAjUcgWt7bC10JwmknTV245ZogP8FzDNnF5TcSEcsA2llqaJWYRufcNa1g/xgC
+hoAhMAECXq/LQJ/hFoaff/78hUZnBqspAUYxPR5IVB6srUi5XFElBfXVNJpuI39wpzeUpcV5HGMf
+z5CEf/Ayjq0YAoaAITApAl4P5EOtZ1hFJTdIfmUkPa83YJPIdcHIwLe7g2fIyvI8TFVq0kWIehpD
+U/pjHg+mMuH6YQ2J0UmMKZipLC8thLaeGRZ+dl9DwBC4PAJeuwliCY//dGobhQcI8wKT0WiETIPk
+LoyTs5ms5LJZiS1HdYochY1eDLZ7NErmkBkogTZ7sOVRcrw8DNbSEDAEPkQEPEZaCbM47q3VqoKI
+V5IAGTIGHx0vlBQxEU6lEAlmgsJ1QyuGgCFgCEyKgFeYKcnw2QBSYGzSNldaz5FWAgbZAyYegjhK
+iS6K8UAlopKeq3OlN7bODAFD4INHwEukEko6oSIB0nuwsaGaXxIgpcIBpDknHV732EiwTovsts5D
+hce8HmbIsOt+fuvfEPhQEfDa8HfV4KLTYpsTkY5oMILgpWnIoyS3NpKhMzE6gyE0mqPE6PQI6Xf9
+vMCYknNNMgqFTJjKoiA2tm8IGAJXg4CXyaQw0UQU5qvp70K9hL1kx/tT2dKCaU0KuYFJgHR74xS8
+36O5Tc9XyMBGMaPBEGyN8UJfsFU2BG44Al6SGtSQXEEYDKEPo+ewCiVAJkUvQMqjBBhHZGpOfRkE
+oY9zjMLvlwi00H1Mhd2xbQ0BQ+AuIOB12u3QZnbgn6mt8534ZYHRPCRD13g4IDdmpGMh0bl9HtNn
+mdGprRgChsDdQsDrhyjW3IRgCO7rJBm7EtznOSXq8ZOusm0NAUPg1iLgDeF1EbqGE+QSPYVgVEML
+eE+bfZqJzK3927OBGwKhI+B5WAMLM8Uk1+H6cMfb2SsrGCQ05gSJwe2NAQ9migWp1xuI2ZeGJpYm
+KZDI6A2C5EnDYVRyuQy2p9Fj6PjaAAwBQ+AGIwBPEDjUniJ9TWvcQwZDePa91JANjoRIltMUHDA9
++fmnH8vT779XxUQPJ5Mg7B6iw9A0ZW5xWQqFnO5Pa6x2H0PAELg7CHiVXUhegfWvaT+aTnHhjlco
+FiUF31+uCw6Hvi8w8wXHoaRgzuBOty3NVhu+v3lhbOY4tNcZRIBxBsvTHrfdzxAwBG4/Al5lrxIm
+/wFBf/2PWtd4Ig3tK7xAcG4IaW9paQlpMqOysbGBKDBdaSPsVS6bAelh1VKnySRLm/7e/j9DewJD
+IBwEvEoNmdAQdy+0QukTpoDVWgUEN1DJLgHJDwt9IEQkJQLBMewVmTEJuzwSXizGRiGOOTSw7MaG
+gCFwlQh45UoVZEMpKqR5MAiNdtirq+tYy2NQBrjFIUMbBTuS30FhvYODq9vRNcdzupukzjld2GVD
+wBC4gQh4PqmERH4jQLjuVyqVjsFz3dNbEhtD8XfxYQJ0aqOpfWaIMCZMd4nROQ5bazz29dgJQ+DW
+I4AlNiT+Dj8qfmhreQyvT+1zEsqWPUSlZtBVmt704R/cxMfD2mQXJjf0BbZiCBgCdwsBeILFpdll
+6KnpS4FUZjDsVVjFf+KIBmEl0WXg/DsYUCmD9UVMw1ORFPZFo1TTUJsWOlYMAUPg7iCA9x5qV3JQ
+KC83bhwiAXJqm0S0aX74+C4xOr9eXDmEBMxXbzTDHCqHZMUQMASuGAEvhkjMYRV6dlDiIvs66Yqk
+pEoHEqM7ORqgr4ygCUxgxIF6B2318lFWZ1euHeu5Ms77TuERPM/1wdNc9Vw/tjUEDIHbh4CXy2dl
+axsDD77xU3sOEB/IZQivjgaMnDkdh2sKiIokByLkVscyVA0xs8ENoDLOZtI4y3OI5oKp6gBKDJIl
+Q1rRQ4Qkxk8H63sxmNSAZhHrr412GW1HQrNiCBgChoBXnCmCSsJZA1T4wXD0/Hj+7Bnc3TDtJDkh
+Jl9xbk66zYZUkBKTWlnmA2bAUqbDZPrLRr0GLe1AMrm8FLMp2d6ryr3lBXn79i3IEKSKPhqNhiTT
+WVleKMlT5B3OZXMyU5pD/uA50+ra374hYAhIlIqIcKQ/hz4NmxF8FMEOGAShXqurVtajdhra13ar
+o+YoJEYGKk0kPBBbUz80X9GQ/pBeOwhrT1MVSoAkPuYSZrDVOuP4gRCTkASbrdZIonT3tq0hYAh8
+yAh41f0qfCpCmf/6uGOqOoAkV4C/L4McMPF5FOuSjPZCYswj2EEKPr8Q6WCuM5A5SIYRSIwkbk5l
+SYx0o6Okl4QE+WhjQ+36qF2mNpckms/nVMFBiZEpNs2m70P+k7dnNwQOEfDSWE/jOltYFMj79uDn
+u7W1pUbJqm0FKVLKS2B9r91B0qZIFUSH8PWQ4laWV0B03uE6IepyvZDrh6rcoMvc4fPpHs97aRft
+2V9V5AWtP1bXDg0BQ+DDQQAuD4irF+IaIEkoiuluMplUyW8GeYo7nZau9fXgmVGaLR0oQ5KYJoPv
+pFKpwE84CcnPV3rw66I0SMmOW/ZJJUgLU15dV0QbHvvZ3SA1spNRG92xfwwBQ+CDRMDbRTgs6ExD
+e3iSET8kL8hyquighpcuansIkrqwCM0w9CIMhcVPEqS3vbOr015Oc7uYNnP4nO4ycRG5LYYp8fLS
+oryAYmUIcs2kMzg/BCGiPYiWbTJQiKyv3jMpMLRv3m5sCISPQHR+cSFUEnDTUK7pkbyo1GAoLCz5
+SRahr6j9pSKDpNWGooNhsCgxdhEfkBJeH0RJBUgXU+Uh/Hep6OjCt4+kTmJle5JrB9fp39uGKQ0T
+QTEdpt4Q3wHH4D78StjOHXNLouV/VgwBQ+BuIeBRIgq7UJFx//49HQb3Y/hQg8stJUGn0KCkx4jQ
+aUh0LKQkdVsDKbIdgyowoEEU9oAJrAluPHoEIkMkLWiPSYJKrGRWtkMdXqQvsNogQmpk5jdKj7QX
+HKCfJjTQfo7gHuwNEaKLA7BiCBgCdwYB7+Xz5z6JhPBIJCe/RCSjRsru+HCbAOEFCyWy0+r69fz6
+wXrcp1Q3Xnh7jQYD6ZJrh21Ii9Lp6brhoEvzG0iJaNsBCXsxGFSHmTxlfPB2bAgYAu+NAOIBhhcS
+n9NZSmahFZAiNcsFmN1Q2mQgVo6JZjV9aJPpb8JC8uyAGA8J2z9v/xoChsDtRsCLRHzzkDAe4wSh
+bLrDAKPRfIaF0iB4T4vu+7v6L6fWumYYOGe7hoAhcPsR8OJYA2z1YGcXwvoWiQWC140owQlycJ+D
+I1GfNIW+EQO3QRgChsClEYgy41r4Ck7E4AMTMjoMicZ9eM7tj29d3Us/uTU0BAyBDx4BrwRXs5ev
+T1YSTAMdEhvd3t5t7qp2l9FdqNnltongB3SHo3DKc6xLhYb/GUgC0ivX63hsxRAwBAyBiyLg9XrQ
+fI7P+S7ay3vWp8nJ939+KhGQHYOSMgH6xsM1efnihfY8BPkxZD3H2YYxM4Mg9FHnyUcfy9yMhap/
+T/ituSHwwSLg7e7tg1fCY0AKb8zDsbAwr3l/aWriRT2NC8jgBj1UoHaWEiFDXFFr3IIhcyqVwbkb
+soD4wf752IMbArcbAa8D97FwC4OaevDqQKw/BDtlOKw0PECq9SYMoPtS3q9pAFT6dvz0k5+AGEc+
+vTBkJm3b9Dfcb8/ubgjcZgS8KEWw8ARAXderNxi7Dz68mOaW5hD8AAG66MmBeP1SQsDW/oCGyB7W
+A7kOSHOV8Ex3bvOXbWM3BAyBowh4DEQqFZwMiQQpwSXiSfnoo4+U4Fw0F27zCNfPYfl+wtQOHx38
+VR0x3wfVKNr9SNHCvp3SRbXRV3Uz68cQMARuDAIeFRBhkZ9DgX656ROkOub4uM5CgutBA12uN+Dz
+G9eArCQ7ap5JiS24xqlXCIK0ImjXdQ7F+jYEDIEQEPAqezu47TWJVhM+EIkolIL70tSmjk8KWmXG
+IWQAhGw2KzEoY5otRKWGooVa5zxyj4Q1zFCwsZsaAh8AAl6jXZMIpqBhlD4W/hj1JbSCe9MXeKbg
++wIzMXou24cE6EeKSae5PgpyxoaxBq0YAobA3ULAKyY92QMHhSGD0ZtjCM1vmGU82kzyaPAZf2gg
+QUuMHua3ZPc2BK4HAa+InCB71bYv6VzPPU7t1Z/6hkuAB8xPLQgLh3OgEdEz8EIJ01LSH4P9awgY
+AlePgFdvVGQYSR3wwNXf4uwe3boalQ8uNJbTvnIbXB8M2vy58+4cj117d0ee43W35fngvqun2yAP
+B/ePVLIDQ8AQuEsIeB7zaISu4BxqoqNcvgDlg2C6iYTmSF/J0PWaKlOX4iLw/vDzeZAsNVI01vBi
+iOWHNEgatDSfyykJ8jqn18wBwiku6zLSM9hQz7EfR7iOQO/Sl2rPYggYApMh4HVo4gECDEvoYUis
+drMmf/zqa0khuAEJqYW8IL/8+U/l8z/8AcbRSYStb0p3EJWfPF6Tr797LvPzJdl881Yq8Bb58Sef
+yhCKnHK9BfKElwgDmsKkhdPWvf19+QTXd7feSio3I96gLX9+8QOUHgVofDtqd5ifmZWPHj04Jj1O
+Bp/VMgQMgduMgPcGZh9JPyZoKM+hU1QkOVq9d09q1YowN1wiifSXOLeAhE1NJDyidpY62DgSpC8t
+zKn0Njc/L+lcS9LQWiSys8jy1pWdvT1JInR9vYHz6YTk1HSFkqMf25k+x/l8XnOEINemRpNJoT1z
+jlgxBAyBDw8Br90dSBLSEqeH4RQ/KrPG98PUNZlISQqJzym90UQlhmREGrWZ2mJIq01Mi2mnV5op
+yGCfkusAtnw9ycFrZBHT3Ea9BqLMyPr9ZX0cus0V8xlMkn1FRml+wV8HhN0fp8FMuB7es4eDuN3V
+EDAEfAQ85sJQrWdIiKjyAsS2vb2jEV923r1TF7h6raHTWKay7GKdcmZ2TmZyCXn96rVkIdklIba2
+mi3Z3y8rf2XSSaTPbGDKnJAf//gnkPpSOp32H+vQo8S8iEP6ou22hsANRMCLaqazsKQ/Cl+4N6a7
+a2v31QVtGWTIwAddZGWDqIb0lAiBhXU9psKMIxjCP/0neeVrn7iHWPNjsFRqeweaVD0HRUieEt8F
+JFqnGXZb9z25Y26tGAKGwN1DAEmRwn8oKkKKxRklNjecSCQLEvPNVtwISWopBG8IkpsjKdYpYVrr
+5wd2LSbb0tXNJ9GheoHw54CxB/U+JGG3P1l3VssQMARuCQJetzeQ1A0YLInMkZ8bzjg5O0nMbQ/r
++S0jtKG5QGE/dSRD39zZgQtcTn2BOd2mtMlYqzUoUxJIqt6GIoYmOlYMAUPgbiHgPbi/JjvNLsiH
+cs90CyWs6d818Iy4P0mWgQ6S1CYjFzCToyeZjB3XclkEXYWSRCNSU2FyMX4N3Mh2DQFD4CYi4M1m
+U7LTCMcVjnH+BljzC7PEQXZF2Bo6cmN8RJUwD5iZSZhEQ2Nxa8UQMATuDgJeAooFvtdhCDeM8Bxc
+z7sJsB5xiiErQrny/PkLKZTmbsLwbAyGgCFwhQh4MoC2NcQyvp4X4lCO3xoEOICCZL9ckeIs7QeP
+V7EzhoAhcHsR8FpNTH9Dkf+Og0YypHEyi2phsXXHehL/9Kc5ZeYaITLUPX70SLXLNgV234JtDYG7
+gYBXQza2SOSkIHjTeUCSHsPSf/en79SDY6aYly6DIMBBeaGUl1c/vFU7wSzCdtEougGtbRua6x89
+eYxw9ZxCX+84aVZTKOSlBiNrK4aAIXC3EPBebG1LavYeRK7wHmyIaeb2zp4UZgby8vkziSIH8Mzs
+khRzSXiIbEsHxJeESxzt8ZLwC6btNs1VSIBWDAFDwBC4LAJeEYTSgp9tGGYwHDSVIFH462482pCZ
+YlFWlpekD0JkEqJoLC7r6+uYoUclnUr4CdERKKFWq8A0BYnSQyTtywJu7QwBQ+DmIOAtzJTkZRNM
+EtYCv677RWTr7Rt5gxBX9PEl8SEZpmxvbUIBUdbjYj4HV7eGrsWpzy/MV7bfvuMiodrufQz/30Im
+ZZFdbs7flo3EELjxCHj9IdJiSqjxsHD/iBSKBWkhMk0c3hxxxAXsd3tSblVkdg7hr0iSMJkpxlGn
+jVBXOMdM6qyXgPS4h4AIMfgT3zSTmhv/7dsADYEPHAGvjKCiSIobKgwMVbW2/mBEYAyD7y9JLkEZ
+wpBYvqmMP9/lOiAVEyTFublZbcPYgKkECPCST0FNsyNP3mt8f1wTfcnbWDNDwBC4YQh45Upd4nPw
+c70se1zBA5F0GLdvvDAp+SRlPLPbJG1YRzXQiDqzXali6p3U0PlcCfAYhxCalgZC6jNhOtckozCH
+sWIIGAJ3CwGvjZc7rguAITJgiJgywGoLH0qV/W4XpNeSTCYnMaxBtnDs4UOM8giGQMnUiiFgCNwd
+BDwGAAhL+tPE6FjLC7Nwij0LRZCfDH2AMPo5SHsMoDqQzChnMafAHUSEsWIIGAJ3CwFvLhWVCp4p
+DOHmRiRGj2L988wl0KHs7UHJAq2zmd3crT9+expDwFuEsEMCDKNwDY6fG12wMvDyxXNZWdvAMG/4
+WG80kDY4Q+DmIRCNIAXlaKYX6uiCmla3fzpBHgZPPYlA2f6k85d6QChD5hcWNFZgRNMHXKoXa2QI
+GAI3EIFoCwv8ocs1CDm1h5SWLBQIq7Wa7rehkGC4ep8I9ZTu9/s96cEchqWBJOrj6ptqtart/Bbv
+9+8Qvw4rKyvQUl+/3/H7jdRaGwKGwEUR8MA9oRbmA2m1GvL1t98iGRIW47DQ1oYR9K9//Sv54+f/
+KMX5+9JrlqXW7iE0VRf+wrOSS3ny+u2m3Ecu4fL+DlJl9kHiCK6KAKsLS8tSK+9IA/Ujw75kCyX5
+9OMn6kd8mQcl+apEeZnG1sYQMARuNAJejnk0xkWoKQ6ZRsfUwD6EITRz+vZwrMIdAiAsLi5LHFFg
+ulFM0/HpdqNKZHlEZ8kjbWYckZxL0OBGsZ+CkmIHrnOdTlfmSrOSQsL3ISTFOHydnWHzFB/LbmUI
+GAK3AAGvPUDgAc6BmV+STDh1pcQQ08uEhsTyYIycwvpdD6Yxm5tbsrRyD8mJEJQUSdBJYv5HNFHR
+k8dZdY+LDItYo/O9QxYX52HP5yGnh4d4gi7fyKFnxy34PmyIhoAhMEUEvCiTnWEanM0h7y6kqP29
+/SneHrci4cIfefPtW2nCFziJKC9JZGXj+dXEGqaxA8SFOV7i8NBwJQoJksXLZN0pBEk43LU9Q8AQ
+MAROQsArFEAe9SHCUK0gHWRSmo3mdKeMkOwEfhePP3qC+AbM0nYYFZrkN42iGmOOA/d202U9N7p5
+cH8a47F7GAKGwHQQ8JJQKAxrEV1/G4JwetC6MkXkVAuIh65moRQQXxvubjFMvUl+TpocIvQ+lSo0
+1mbhlNqKIWAI3C0EvA4WAGnftrm9g5d9d5Rzw3/pp/moYUhZvGe9wcTou5JFYvRuuykdaKDT2Gew
+6TqkYQZkYK7gfGFmmnDYvQwBQ2AKCHitLvPyIi8Hkw0xNOAUC0NbuSnnFG975FYkwWKhAMUKQu4n
+4kp2iQTyBEMhFMsxMTqjUad8hcv0fxeOjNUODAFD4GoR8AbODUTX4q6280l6G4R0Xx0b7k2yozkN
+eFCLJkbHng6LJ7ETwTS40Wz55/xq9q8hYAjcAQS8aAJmJnjJf/7Tn8g8Ii3/w+8+UzOUaTwbDYyj
+Ya+tOeY79YG5RHCFrnWn3scuGAKGwLQRiGaQZIjKj4X5BXmwtqZTQYg9UxsHp6A3/8NFAiuGgCFw
+1xCIfry6imeKyBdffil/87f/T/1wneYz7Id1xHjWOIJ1jKTOQsquGQKGwDgC0fUHDySdiCL/7q68
+evUa7mZd1JkelZDA+ghL/82336kzCsn3LbO9oXzxj5/JZ59/heEctWrm1LleLcufn72UWmVfvn/+
+Up49eyFdTKe3t7agyPADKGgn+If1d3e2Ee254ydYwnEDARc6UADx/ucV1mFSdiptrBgChsDdQeD/
+Ax7TQVF/KOtyAAAAAElFTkSuQmCC
+--Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091--
+
+--Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A--
diff --git a/src/core/templatetestdata/applehtmlwithattachmentsmixed.mbox b/src/core/templatetestdata/applehtmlwithattachmentsmixed.mbox
new file mode 100644
index 0000000..4c8d3bf
--- /dev/null
+++ b/src/core/templatetestdata/applehtmlwithattachmentsmixed.mbox
@@ -0,0 +1,74 @@
+Return-Path: <test1@kolab.org>
+Received: from imapb020.mykolab.com ([unix socket])
+ by imapb020.mykolab.com (Cyrus 2.5.11-41-gd53406f3f-Kolab-2.5.11-15.1.el7.kolab_16) with LMTPA;
+ Fri, 29 Jun 2018 17:10:33 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx003.mykolab.com (unknown [10.9.13.3])
+ by imapb020.mykolab.com (Postfix) with ESMTPS id DCFFB184
+ for <test1@kolab.org>; Fri, 29 Jun 2018 17:10:33 +0200 (CEST)
+Received: from ext-subm002.mykolab.com (unknown [10.9.6.2])
+ by int-mx003.mykolab.com (Postfix) with ESMTPS id C5438A48
+ for <test1@kolab.org>; Fri, 29 Jun 2018 17:10:33 +0200 (CEST)
+From: Kolab <test1@kolab.org>
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3"
+Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
+Subject: Apple attachment + signature
+Message-Id: <0EDA7426-FD89-4C6D-8B28-9ACA7544FA6C@kolab.org>
+Date: Fri, 29 Jun 2018 08:10:32 -0700
+To: John Doe <test1@kolab.org>
+
+
+--Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain;
+ charset=us-ascii
+
+Hello
+
+
+
+Regards
+
+Fsdfsdf
+--Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3
+Content-Type: multipart/mixed;
+ boundary="Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87"
+
+
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><strike class="">Hello</strike><div class=""><br class=""></div><div class=""></div></body></html>
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87
+Content-Disposition: attachment;
+ filename=rebuildkube.sh
+Content-Type: application/octet-stream;
+ x-unix-mode=0755;
+ name="rebuildkube.sh"
+Content-Transfer-Encoding: 7bit
+
+set -e
+
+export CMAKE_LIBRARY_PATH=/usr/local/Cellar/gettext/0.19.8.1/lib:/usr/local/Cellar/readline/7.0.3_1/lib
+export CMAKE_INCLUDE_PATH=/usr/local/Cellar/gettext/0.19.8.1/include:/usr/local/Cellar/readline/7.0.3_1/include
+export PATH=/usr/local/Cellar/gettext/0.19.8.1/bin:$PATH
+export MACOSX_DEPLOYMENT_TARGET=10.9.0 #Minimum version to find the required type_traits header
+export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/
+
+. craft/craftenv.sh
+
+craft --install-deps --fetch --unpack --compile --install extragear/sink
+craft --install-deps --fetch --unpack --compile --install --package extragear/kube
+
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""></div><div class=""><br class=""></div><div class=""><b class="">Regards</b></div><div class=""><b class=""><br class=""></b></div><div class="">Fsdfsdf</div></body></html>
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87--
+
+--Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3--
diff --git a/src/core/templatetestdata/attachment.mbox b/src/core/templatetestdata/attachment.mbox
new file mode 100644
index 0000000..9c3610a
--- /dev/null
+++ b/src/core/templatetestdata/attachment.mbox
@@ -0,0 +1,1384 @@
+Message-ID: <851f01d15e53$31734730$790bc9ad@info>
+From: "OculusLab" <info@findermanze.co.ua>
+To: <info@example.org>
+Subject: CID links for images
+Date: Wed, 03 Feb 2016 07:19:17 +0200
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ type="multipart/alternative";
+ boundary="----=_NextPart_000_000F_01D15E52.0BD654A0"
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Windows Live Mail 14.0.8117.416
+X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
+
+ This is a multi-part message in MIME format.
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0010_01D15E52.0BD654A0"
+
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/plain;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+=0D=0A=0D=0A=0D=0A=0D=0ASuperkombipackung f&#252;r nur 45 Euro=0D=
+=0A=0D=0A
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/html;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+<HTML><HEAD>=0D=0A<META http-equiv=3D"Content-Type" content=3D"te=
+xt/html; charset=3Dwindows-1251">=0D=0A</HEAD>=0D=0A<BODY bgColor=
+=3D#ffffff>=0D=0A<DIV align=3Dcenter><FONT size=3D2 face=3DArial>=
+<A =0D=0Ahref=3D"http://intenices.co.ua/drugs-store/index.html"><=
+STRONG><FONT =0D=0Asize=3D4>Superkombipackung f&#252;r nur 45 Eur=
+o</FONT></STRONG></A><BR><BR><A =0D=0Ahref=3D"http://intenices.co=
+.ua/drugs-store/index.html"><IMG border=3D0 hspace=3D0 alt=3D""=20=
+src=3D"cid:9359201d15e53f31a68c307b3369b6@info" width=3D650 heigh=
+t=3D763></A></FONT></DIV></BODY></HTML>
+
+------=_NextPart_000_0010_01D15E52.0BD654A0--
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: image/jpeg;
+ name="aqnaozisxya.jpeg"
+Content-Transfer-Encoding: base64
+Content-ID: <9359201d15e53f31a68c307b3369b6@info>
+
+/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMqaHR0cDov
+L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl
+aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4
+OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6
+MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5
+OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht
+bG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6
+Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUu
+Y29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBo
+b3Rvc2hvcCBDQyAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjdCRTg5MTBD
+OUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjdCRTg5
+MTFDOUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5z
+dGFuY2VJRD0ieG1wLmlpZDpCN0JFODkwRUM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIgc3RSZWY6
+ZG9jdW1lbnRJRD0ieG1wLmRpZDpCN0JFODkwRkM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIvPiA8
+L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0i
+ciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwM
+DAwMEAwODxAPDgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH//AABEIAvsCigMBEQACEQED
+EQH/xADJAAEAAgMBAQEAAAAAAAAAAAAAAwQBAgUGBwgBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYQ
+AAEEAgEDAgQCBAgKCQMACwIAAQMEEQUSIRMGMUFRIjIUYXGBQhUHkaGxUiMzFhfB0WJy0+OkZZVW
+8ILSsyQ0lFU24UN1U4MlssJzhLQ1djcRAQABAgMEBQkFBwQBBAIDAAABEQIhMQNBUWEScYGRoQTw
+scHRIjJSYhPhQpKyFfFygqIzUwXCI2Nzk9JDsxSDNPLD0//aAAwDAQACEQMRAD8A/VKAgICAgICA
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgICAgICAgICAgICAg1y6Bl0DLoGXQMugZdBrIZMBOz9WZBpWkM68Zk+SIWd3QS8nQOTo
+HJ0Dk6BydA5OgcnQOToGXQMugZdAy6Bl0DLoGXQMugOT4dAYnwyA7ughaWTPqgkIyaNnz16INQkN
+3bL+6BJIbHhn6INozJ2fL+6DbLoI5JDYmZn6KDJGTR8s9VQiM39Xyg1GWRy6v0ygkMiYXdn6sghG
+aRxd8/yItGAnldupfxMoUZ70nx/kQO9J8f5EKAzSO3r/ABMhRnuyfH+RCg0snXqgNNI/v/Igd2T4
+/wAiDLSyfFCjDSyfH+RUZ7snx/kUBpTz6oMd2TPr/Igz3JPj/Igy0knx/kQY7smX6oMd2T4/yIMj
+Kb+6B3T5O2eiVKHdP4oUO5J8UqtGHlk5Yz/IpUoz3ZPiqUO7J8UKDynluqIy8h/FA7h/FKlApDZv
+VAaU/ilSjPcP4oDyHjOUGO4eG6oUZ5l8UGeZY9VUatIePVRR5Dz6pUoyxnn1QBkN3fqgy5l8UQYy
++KDcXd2fPxVGUBBqgICAgICDSb+qL8nQR0//ACkP+YyEpkBAQEBAQEBEEBAQEBAQEBAL0dAb0ZFH
+9HQQD6oJJP6pv0INY/Vvz/wIMS/1n8CCSL6X/N0G6CKT62UGS/qv0/4VQhQRh9Tfmglm/qyQQD9D
+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
+6/oo2w6Iy3oisug1QYRGW9UVsiCKwgwgICDCAgwgyyCnfiCRmYxYhJsOzrF00lu3Fw7Ol6u8J4b+
+aX+NI1Fmxz5YZIvkkbBN8PgukTViYom1sxMfa9Xd8MuV8OlsvSRBxFh+H8qwqYWVgSMqyytDUzYR
+cnfDN1d/wZQeQ2Ft7Vo5f1fQG/yW9F2tjBiZVSdlWXpfH6ghSad2/pJny7v8GfDKDqY9kG3p0Qbe
+35oCDP4INmUBAd8MgrkOCz8VpGweuP4FBszoMOzKg3wRWRfOVEbCitmUGyAoMICAgINx9EVlAQao
+CAgwgICDDogisIMOyDCDCBhBhAQYwgYQZwgccoMPGLoNeyPwZBloRb2QSMDMg2ZsIMogg1k+h0FM
+v6+D/Of+R1Wdq6/oo2wiMt6IrLoNVRhRGW9UVsiCKwgwgwgygwgwgINZJBBsv1z6MpMrEOfanPPM
+vpb1b4MuV0u1sNc8myyzRXK2kfUT/Q66acsakMaOtztFM/pE2G/zn/xLWpLNr0IsuTaRmWkbsqg6
+DjeQX+3C1YH+eX6/wD/6rdsJMudrNTLaxJJmOv8AH3L/ADf8a6ObuHq6nZEBiBhB+RM45d2/P1QW
+w6C2McW6fL6N+hBI2PX+BQFUG9VFbfigMg2woDvhkGj/ABVRgmz/AIFRoPq6Df2yorHtj4KoIp+s
+ojLP1RWzOg3ZQZ9lBrl1FMqh1QMug3D0/Sg2QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQRWbVWpAdi1MEFeNsyTS
+kwALZx1InZmQYK5TG2FMp42tyAUsddzFpCAHZiMQzycWcmZ3SPMSji2urmnGCK5BJOTyCMQSARu8
+BMMrMLPn+jJ2Yvg/qkYk4eXX5sVpSZpFRW12zo7LXwbGlL3adgGkhlwQZB/fBsJN+llq6KZm2nGn
+Zglq2q1uvHZqzBYryixRTRExgQv6OJDlnZJigRWq0ss0MUwSS13YZ4xJnKMiFiZjZuou4uztn2U2
+VEiAg5Nvy3xinParWNrVG3SiOe1TaUDsBHGHcMngF3l6B830+ibK7PKPOR70W7ZdSKWOWIJY35Ry
+CxA/plibLeqt1sxNJS26JisbWyiiAgIIq1uraAjrTRzgBlEZRkxsxxvxMHcXfBCTYdvZNlTglQEB
+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
+gkD6gLD9CH3Z0nKuw20ZrWq1qvHZqyhPXlFiimiJjAhf0cSHLOysxQSKAgIK02ypQ7Ctr5JONy2E
+sleLiT8hh49x+TNxbj3B9XSMa8CcIrxp559CygICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgION5nsL2u8V2l6g/G3Xrmc
+R45cMN1k4v68GyWPwUwmYicIm62J6JmInuWK40is0mkb5phHXLx/kwjrquz19C/Zu07vjuxtWgs2
+JLeCjABhmE5SNwaRpDbiLsL46N0V1MromKcs29VZnDu27uLWh71k1xm7tjfwph2tNtJd00FiGnet
+8bfjF66by2JZHCzVGFo5YeRYhfEz9I+LenToumvnqcLre+bq+aHLwsf0p34T2W+XnN1sdx48xy62
+3ZszWtBZvSNamksM1iucAtMAydwY8DOTkICwvj6VdSI5r4yiL7I6IuuuiceiOpnSmZtsuzmYu66W
+xMd+HGubt+JU9/X2wzTzwfsu1UeRoW2tnaSSysYOE8b2YYe2HEiYmB+PUejJdSImJzrGzLOvHdnu
+IrNJ8p9H7XK8mtWNLutvqKhPHL5dHC+rJv1bhENS0Tf5kJRy/od1zssi+OScou/kmt135buu6HW6
+7kmNThT+KPd7a06LUVvlU1HkloL9ija8ZJq2mpxTyRwxxw14yrCdcSaOfvkX/wBwSznA4wt88zy3
+Zzffj+OlOHs0nfjXczZZETyThbbbGP8ADWbuqa8PZ6Vye92rXl+z2dq+0GreLs1q1iSNou7Qi59s
+GIQzykd255ES+bo/VZiPZimMzfNvfbTy3LF2MTOyyLp6pvr5striW9hvtZftUCmlpwsOqtFD+07G
+xkjaTYhHIRzTsJxscb4IGJwx+lb06TdSdl8Rlvtuw44xGbN2Vd9l89lMeGc5eh293a3F7yPyHXan
+YM0kFfU4qlZKAXI5rBTwhIHJ4ZZohZuQjy9PwdYs92JnH257OS3zTjTpavwmNnsf6vKHm9luNpBs
+aBaitdju0G2cF+G5O9+esDDSOc60hnL9w4RnzASP6untxWraYzM+zNueX36eeM8cMcUpNKRHtRfF
+I2TPJdMfsw6s3U8kvxyUrRaK1bsNqNVFabZzbexVhYZBkOGZmBpfupC45LujwfDD8Vi+Zt5rqUpd
+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
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBBpPPBXgknnkGGCIXOWWR2EAAWyRET9GZm9XdJlYiuEI5r9GGsNqax
+FHWNwYJzMRB3kdhDBO+H5OTMPxVpNabWYmJiuxOoqhqt7rdqU7UDklCuXApnhmCEny4v2pTAY5cO
+Ls7xkWFaYRO8nCaL6gICAghu3qVGsdq7Yiq1o+sk8xjHGLfiROzMlViHP/tf4k1H9oftuh9hzaL7
+v7qHs9x2d2DucuPLDP0yrNswzE16l6hsdfsao29faiuVTzwsQGMsb46Pgwd2dJiYzImJyVZvJvG4
+KA7GbbU4tecjwhcOxEMLyM7s4NI5ceTcX6Z9lN3Fd/DPgqD574MYmQ+RawhjblI7Xa7sI5Ycv8/R
+skzK8spzQsz+V+LV6le7PuKMNO3n7WzJZhGKXD4ftm5cSx+DpNs1ptImJiux0YZoZogmhMZIpGYo
+5AdiEhfqzs7dHZ0mKZrE1Qa3aUdnXezRk71djONpeJCJFGTiTg5M3Ict0Iej+zpTCJ34m2Y3LSgI
+Kmz2+p1VdrO0uwUK5EwDNZlCEHN2d2FiNxbOGfonAba/Z67ZVmta61DcrE7sM9eQZY3dvXBA7srM
+TGaRMSsqKjmtVoCiGeYIinPtQMZMLnI7OXAM/UWBd8N8EjcJEFbY7Klrar27snarsccbnxIvmmkG
+IGwLO/UzZkjGYjbJsmd0V7DY7Klrar27snarsccbnxIvmmkGIGwLO/UzZkjGYjbJsmd0V7FlAQVr
+OypVrVSpPJwsXjOOqHEn5lGDyE2WZ2bAC79UiK4cK+aPTBM0ivGnl2LKAgIKG13+h1DRvttlV17T
+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
+0bkDbJqkdTZ3ZTijEasgQyWP/CyGfIjL5my4ceTlhlrTnGZjPl3fPuyypE8eLN9s8tNnNG35Lq49
+VY3Y0b2r22raDZbSK5Odo95PrnkntyxQQVD2Hbdmw0oRszNxaXtkQM/TDLFkVjTj4ox405qds0jj
+ludL5pN8/Dy067bK9lZnvpnWeCPybVb7VQXLQwa+xsYWClHsrOxkHnUtcmlmsxwyPHIYA4AXJuTP
+hbtmJmm2l2z93vjGd9GJieWZ/d/Nn30bQbq5L5IbR35JKY+TvUdhlJ42jbUs/Z6Px49/rx9Of4qa
+cYW8bb/zzTu7l1MJu4fT9FUU+yuXtvPWi2Vhqp+UjScq85jiFtWxHAJC/wAo91nyzehdehdVNOKx
+ZXbbqfmup9i3zSb+EaffNtW0Fu8+0fxqS9aDVftuWn9y9iX7nsjrwtx1/unLvfNKb/Nz5YbjlW2O
+aImfhvnri/lj+XzY7Wb55ZmI32dVbce+Ij+Lodrw7YVarbuGzsikrQ7gqVKS5ZKZ8vDCwQDJMRET
+8ydmHOc/ipnZbvnm66XXeiOwmKX3bo5fy2+l65YaEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBpPBBYgkgnjGaCUXCWKRmIDAmwQkL9HZ29WdJh
+YmmMIj1uukKsUlWEyp5+0Ioxd4cjwft5b5Pl6dPZWZrNdssxFIpsV6njvj9OCzXqaypXr3Mtbhig
+jAJmJnZ+4IizHlnduqkzWKbFjCa7Vn7Cj3Hk+3i7jxdhz4Dnst17ecfR1+n0Sca1258SMKU2ZcPK
+jiTeDaGzvW2VunVs14qcFOpRlrRmEPYkkMTj5ZYeknFmYWxhatvmKztma1SYikRsivfTzUdXY6TS
+7PtftKhWvdh+UH3MMcvAviHNi4v09lImk1jNdlNjYtRqT2AbI6UBbGMHijuvEDzCD5yDSY5sPX0y
+pGFeOfEmMuGSGt4147VjmiraqnBFYMZbAR14gGSSMuQGbCLMRCTZZ39HVrOHDImMZnesTazWzvYe
+apDK9uNobTnGJd2IeXEJMt8wtzLDP06upsoVxqqy+L+MzVa1SXUUpKtN81K514ijhd3z/Rg44Dr/
+ADVeaa1rikRFKbF61UqW4HgtQx2IHcXeKUWMHcCYhfiTO3ykzO34qbarwRWtTqrcry2qcFiUoirl
+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
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBBX2Owqa6hYv3JGiqVYymnlfL8QBuRPhuvoykysRWXJi8qleGeezp
+b9KvFAdkJrL1AjMI25O3NrBDE7t1/puH44w61dFM/L0Jb7UxTb5dPcvyb/SQ2KtWxfrV7lwRKrUl
+miGWTl6cA5ZP/q5V5ZrMRsZi7CJ2Ss3b1KjWO1dsR1asTZlnmMY4xb0yRE7MyzVuIVD8l8cCpFcP
+a0xqTAUkNh7ETRmEbsJkJ8uLiLkzO7emVeWa02+vJImsVhuO+0ZSyQjsapSwjJJLG00bkAQlwlIm
+zlmAvlJ39H9VNldh6f2oYvJtNZjqy0LUF+vbsfahPWnrnG0nAjxl5B5PgfpDkX4Yy7XlmtOFexKx
+SZ3fsVdz5jqaNK1NVnr37FKevBbqRThziexOEGZGHm4ceecO3XCWxWbd100qs4V3xbM9kVdGpu9L
+cqzW6d+tZq13IZ7EM0ZxxuDZJjMXcR4t65UnCKzkRjNNqKLybxuamN2La05KZG8Q2QsRFE8gi5uD
+GxceTCLu7Z9FZiYzIxyW6GwobCqFuhZit1ZM9uxAYyxlh8PgwdxfDpMTGaRMS1/ams7Pf+7h7Pd+
+37vcDj3ufa7XLOOfc+Tj68unqkRlxWcK8EIeQaE7wUA2VUr0jmIVGnjeUiid2kZo+XJ3Bxdi6dEi
+K5E4Zsx77Ry7I9XFsap7OPLyURmjecWZsvmJn5t/AkRWKxkTNJpKz93U78lfvR9+IGllh5NzGMnd
+hMhzlhdxfD/g6lcK7Fp3qNjyjxqtFHNY21KGKUI5YpJLEQiUcue2Yu5MzifF+L+/sryzWm1K4V2K
+5+ZeOx+Sf2dluxRbJ4opowkliHuPMRCMYM58yk+Xlx4+js/ults3Vps/b3bUumLaV+99nnrh0Sth
+5F4+c9qANnUKeiJSXomnjc4AD6ilHlkGH3clNldi0xptbRb3STEIxbCtIRzPWARmjJ3nYO48TYfq
+fD5uPrjqryz5cM+xKx5u/Lt2LyiiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgp7mOrLqrcVuqV2rJEQT1AHmUgE2CFhy2css3RE5tWz
+MTg+eXK20OltaOgfb2dGeovR2KmzgsM4WHiYa0dV7cYWpCL5mdmchxj3wt31m2ebhTfWuOWym80a
+RfZTD2sd1P20yRj47dkl2ut21jcwR7Y4jgjoVa8sM0X28YAJWDqzFXkiKNx/pJQZuhMu3NHNhnbf
+M/zTdE8cKccKbnCyJi2K5TZEfy0mKdNZ3Y76vTeeUNjMekt15LYVKFspbhUYorFkGKE4wlCGWKw0
+nAi6sMblh8t6LjZNL6z8Mx11j0RMfZV0mPYpG+OyK+mk9W+jl6XQDF5XqdhCOwuV5v2lamubGuEJ
+DNMFUGfthDX7PPtlhijEnfk/XOVu2aVjCPY/119KXYxX5o7rbo9XcgtaHbSeKbMK9eeGZ/IJr08c
+McbWJqwXnk5RjOJBI/BmIGIXYsYWbJpGnXZGPD3vTMTv2w3fFZviNsW0/DZWOvGN2/ahtaGzat09
+jrrG2uWrV+EZ7mwqjV7XZqWwCTshXqGzCUosUhhh/lZn6KXRNKRSK239s2xHoS2YznGnL2RfbPrT
+WKr2f3f1NGGnsjsNf+z4bcB1ZOLOFqDv8JHHhMJcCMijcmx1LC63XROrbfHu80dUbursYtibbLrZ
+xu5buueWcevtxZ8u0e5s7ndHRhsDWcNLPI9eMHKYa1icpxhaYThkkAGAuLs+cM2OrLnpzSImf7l0
+9tkRE/i82GMNXxXCPgp/NWnXFY68cGv7CazttZtIS2uzebaVSuTbKoFZhGtWtMJ9ka1Qm4vILPIY
+Yf5WYui3ZPLdGUR7c9c2xHoScbZ30tj+eJ9b0/ilWzX2Xk3dhOGGbaPLWchcRMCqV+RhlvmZ5GLq
+3vlYj+nbH7357lu9+Z4W+Z5axFsIta2kbXXZLgeSRXDkCvK8DVj2jWWmabHbIe2/zMLuQ/rMzM7r
+WjnZPw2zE9PJdHl6zWyv+aIp/KmfT3h0U3CjKNovKht9IiaR4f2oLvN0bPDs5fl6cfwU0p/p12W3
+flv+w1cfqcYtp1RZ6YWNBFfp+Rw0deNqxqHs2rFuDY0DhemUvcNzr3XGMJecp8eLOZcS+rDJpzW3
+HZbERv2YTHR5jU97DObsd3T5b9i9tTsa7yzYWypWrMOx1kNeo9WCSZnngknIozIGcYstMOCkcR/F
+cborp327Zx/lp5bdzrbPtWTsivnhyPDtJcjep95QkBx8UoUyeaImxKzy92H5m6G2W5B6+mV38XNY
+1qbbsOOEuXh8J067Ju89rXxqttqRatrNe3BPe8ao0IrH280nZuQ9xyGdwEuy491nzJhvXqr4mOad
+WLc7prHZdtTRpbGnMxhbN1eubaeZyg8ctTeKfZznu5dvqdZbiDWyVII6wTSU5ICGOeKrF9wJkXys
+ExkT8XJvVTWuia3W7cONKxNKcKbqbmtCJi62Lpyuiftr1znNccX0FhpVKugrzaqSwbFHHWKOuJjT
+kaAv6U3fHZHDOHJvd8e6upNdWafNj6OvvcdOKaVtY+HDjv6ncXJ2EBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEHLk8m00E1kLdqGpHWk7Tzzz1xApBi70gt/SOQlGHzExiL46+nVemPCakxE2
+xN1caRE76Rs2zlSu7NOaK08q506aY9DleSfvH8X02toXG2VGd9sbR6lztwxQTZ9ZO+7kLRB+sbM/
+szM5OzP6fC/4rX1b7reW6OT3vZmZjhTfOyMOyJlJvti3mrh5R+3dDqavyGhasNrbFyiO/jj7lzVV
+bY2Dib44cYZXH/KKMV5tbwt1sc8Rf9KuF020r5475SLt9Kyjv+SjDLLX1+vt7m1XdhsQ0WhZo3fr
+xKWzLWg5Y6uDScmbDu2HZXS8LzRE33W6ds5TdXHqti67rpTi1M7NqTXeS6u5rJ9hIb0YqZnFfC5x
+hKvJHhzGbLuLYZ2fkxOLs7Ozuz5U1fC323xbHtc3u8uPNXd5Vrglt1ZmNseqvmxUtf51othsrMVS
+3Wm1VaKs/wC1wsRlAdi0ZiFcCbIkXEGf6v1mbC7av+O1dOyJui6L5m72eWa0tiK3eW6U+pbWkT5V
+pHbNfKXVrbzSWoJJ6uwrTwQxtNLLFNGYBEXLEhELuzC/Aur9Oj/Bea/w+pbNLrbomZplOe7vatmJ
+mkZ+UeeJjqRX/J/G9f8Ab/tDbU6f3bcqnfsRRd0cZzHzJubY69FrT8JraleSy67lzpEzTp3HNFIn
+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
+uv1Zw1tS2JjdZE804ZxHuxHCJoxFl0W2x712N08bojCv7113c5uy8ad/EgnoXPIdjDSb7aCtaoRV
+pIBuO1S3OEMNGrdmkjrzSHluXJ+vzEvTpeK/36XW6Nk3YzMXzdE8vtW21nUusiJuiI2U4QzbbPLW
+JnmtrdH71JiJxzzrtq+s0Pt/sa/2wFFW7QdmMwKIhDi3EXjNhMHZv1SZnZfmNSvNPNjNenv2uunE
+RbERknWGxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEFbZavWbSlJQ2dSG9Rm496rZjCaI+JMY8gNiF8ELO2W9V00ta/Tui6yZtujbE
+0nthJiubhf3Yfu1/5S03/D6v+jXt/WPGf3tX8d3rZ+nbug/uw/dr/wApab/h9X/Rp+seM/vav47v
+WfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07
+d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3QP+6/
+92js7P4npsP06a+q38kafrHjP72r+O71n07d0Iav7pf3X1gIY/FNUTE+X7tSGZ8/g8gm7Ld/+b8b
+dnran4pjzH0rdyb+7D92v/KWm/4fV/0ax+seM/vav47vWfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3t
+X8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3r
+Pp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3Qf3Yfu1/5S03/AA+r/o0/WPGf3tX8d3rPp27o
+P7sP3a/8pab/AIfV/wBGn6x4z+9q/ju9Z9O3dB/dh+7X/lLTf8Pq/wCjT9Y8Z/e1fx3es+nbuhf0
+/h3iGlsla02j1+stGDxHPTqwwSPG7sTg5RiLuLuLPj8Fx1/H6+tHLqal98Z0uumfPKxbEZQ668jQ
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgqjttUQAY3IHCScqoE0oOxWAJxKFnz1kEgJnH1yzrp9G/wCGcq5bN/RxJmnV5emGo7rT
+FLahG/XKWgPO9G0oOUAdfmlbOQb5C6l8HVnQ1KRPLNLssM+jeRjNNvl647QtzqAsVq5Xq42Lrcqc
+LygxzNxcsxDnJtxF3+X2SNDUmJnlmlueGXTuZ5opE1z8vTHa3baax2y1uF2ab7V37gf1+cdn1/rM
+9OPqp9G/dOVctm/o4rMxHV6cvPHaj2m70uoiCba7Ctr4pTaOOS1NHCJG/oIvI4s7/gtaPh9TVmll
+t10xuiZ8xM0is5OZqPNtNd17Xrdivr4ZpZ2pd+xGLzV4p/twsDy4/LKXFx9fqHr1Xo1vAall3LbE
+3TERWkThM283L0x6JZ+pGOOEV/l97snDv2uuO01hRRTDcgeKeV4IJGkBxOVncXjB84I+QE3FuvR1
+5fo31mKTWIrls39DXNHZ66efDpVv7TeN/tMtV+1af7UF2EqH3EX3DOX0s8XLnl/boun/ANTW5Ofk
+u5PipNO3Im6IwlvV8g0NvYz6yrsqtjZVmzZpRTxnPG2cfPGJOY9fiyl/htW2yL7rbosnKaTSeiSb
+oiabTa7/AEWoaJ9tsquvacuED25o4GMv5odwh5P19GU0fDaurX6dt11M6RM+YmYiKzk52p898T2u
+62Wmo7KvLf1T4sxDNC7vgWKRwFjc3GLkwmXHDF09WdejW/xuvpadupdbMW35YT1bKY7N8YpzRzcu
+39uHTgvVPJfHLlGe/U2tOzRqu42bcViI4onH6mkkEnEXb3y643+E1bLotusui67KJiaz0Qc8Y45Z
+8GtryvxepUe5a3FGvUaV672JbMIRtML4KLmRMPNvcfVWzwetddy22XTdStItmtN/RxXmjHgvT3ad
+eodyxPHDUAe4diQxGMQxnk5u7CzfiuNundddyxEzdu2nNFK7EFHd6XYPZahfrW3pn27jQTRydk2b
+PGTg78Hx7Et6nh9SynNbdbzZViYr0byJrNNrjbb95Xg+t057c9zTsUgsBU517MBs88hMLR8ubAxC
+z8iyXQWd36MvXo/4nxOpqRpxZdF1K42zlvy6uM4JN0Umfh8qdM7HoadypdqxW6c8dmpODSQWISGS
+MwJsiQGLuJM7ejsvDqad1l023RMXRnE5rExOSVYUQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQfH6+m8obU6vZx6yb7+LdWS1tKYH
+/ovvJ7MklywOP6MXOQer9Wjbp1NxX6m7X0ee6yb45Z0reaY28ttkRbbvnCf4uFtXGYml9fapfWOP
+t4dXLSInZ7U5UWLvht4bfkuvgqWD1oamAZrZA7lfsRjZn7YiLZkeSxZeSbDYd8D15Ozc9Px1vLpX
+zMc/1JpHwR7FteFLbaW9uyG9O2fqxWaxMRX8V3N2+zHC3D4Up6DyOSz4xsGpShubk5STTOLOOurx
+0Za9cZXfLM8QWDPh15Sk7fT1aR4jSiNWzmj6dsfjmb7brqdPLEV2WRE5uFsXcls7ptinCLbs8vvU
+uu/DnEJ/HdbY081izZ1V2XXanaTwaanFC8k8012ftFedicfkCKT+tJ/R5SfPR35+J1Y1YiIvti+/
+TibpmaREWxXk6ZmPdjdZDrdbSbt0Uu/enljt9c7OVJtru4jt+VlHrLtjyC0ceu0krVJTrxU5o444
+5Rn49ngM8hyzMxcunVsCymjp6c26VbrY0ordf7UVm6JmZimdeWIttwpunFZvm2+bqV5Y9njhXqmb
+sJ4RGaSppb2po+SbTV6wyt6jXjp/F6xA7SFBRruTPExMz/01g3bp9TAP4LOpr26t2nZfd7Opfz6k
+8brtvRbHVWTR04tuiJxiyIjpnOZ68LZrtiXLvQ7UtRTq+Pa++NbxfTST66xYqywyzX5onqxFHFMw
+SFLFH3yISFnciH4r02XWfUuu1brK62rEXRF0TEWRPNNZjCkzyxExOUTuYtm7kikVuxumuFbojCJ/
+eumu7DDhbafU2NjSipa/YBo/GKJTNwpWBuPav5rBIEJg1h5I4e8cmY+T8mLr78uW+2y6brrPqa11
+Pet5eW32piZieWkzyxGNMKYLb92Ixp7c14ViK76zMz0wueF6HyAtTJrm2dqpqqIQQ6Da/YwU9l2W
+H+mjlhtwSiwZEG5FABE7P09Hfl4/xOl9Tn5Lbr7qzfbzzdZXZMTbdHH70xHcacTGEe7TbnWs16cN
+vGVeWvty8s7+pkv3LBtX12+rbfXca01OsUnOeK00deHlIxk7DE5C5O2QFs43F1n0KXxZbGN1k2X+
+1F00pE21unCmd1JpHvTtt0TExSfaikcKVxyymk9dIzVKB2S8V0Ut/W7D7Wzs5bnllT7G0c7TSDJY
+GJ4Gi7s0AWCjDlGBC4i36uV11LbY174tusrbpxbpzz20pFLa1rS26beaaTMTWd7M1mLsM7sf3dlN
++EW2zStba5rl/QX9zvClsa+SGhv7lQLcJg7M2t1InOD2GZnESs2DYOBde30fqzi3LS8TbpadIuib
+tK26Y/f1KW+z+7bjWPvZbJm3xWsxti2zqrN108ImK2+qrWfVbS75lugtXt1rJZXCrrI6FKrNTPXj
+CD9LVmnZiiIpSk5g8oO+G+V8MrbrWWeHspbpXxndzXXRdz1n7tt9szhSk8s9OazMxfXKlOWnf0TX
+DZhEL1imO00ui8aqay7Bpo7rVbn30Tg70tS7uJH65CzLDGI8scwd3xhcbdT6epqa111s6nLzRyz9
+7U9NsTNae7MJFnJp/Ttrst6ts9FIm2u+cN7h+R6va2rdzYyQX6WrvbWOpckoVO/bHXayCRq7/anD
+ZeSOS65F0hLIOPTj1Xr8JrWW222RNl19unN0c11Lee+Yr7XNbSYs+aPartNW2azSPht/hxumY655
+ZjGsRK4OkOr5ho7lqTb7OveN7E+wtVQd2mqRvDRhlio1oBhD/wAZLJzmAcODcnbouf8A9jm0NS22
+NOybYpFsXbLprfMTfdPNPsWxS2ZwnDazdbldjNZiJw2W1ujClfemOzc+mL889AgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgrbLV6
+zaUpKGzqQ3qM3HvVbMYTRHxJjHkBsQvghZ2y3qumlrX6d0XWTNt0bYmk9sJMVzcL+7D92v8Aylpv
++H1f9Gvb+seM/vav47vWz9O3dB/dh+7X/lLTf8Pq/wCjT9Y8Z/e1fx3es+nbug/uw/dr/wApab/h
+9X/Rp+seM/vav47vWfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/wDKWm/4fV/0
+afrHjP72r+O71n07d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3rPp27oR2P3UfuxsRPFJ4pqRF/V46U
+ERdP8qMBL+Nat/zXjLZrGtqfiun0n07d0Nov3WfuzijGMfE9O4i2Gc6NYy/SRA5P+l1J/wAz4yZr
+9bU/Hd6yNO3c2/uw/dr/AMpab/h9X/RqfrHjP72r+O71n07d0H92H7tf+UtN/wAPq/6NP1jxn97V
+/Hd6z6du6D+7D92v/KWm/wCH1f8ARp+seM/vav47vWfTt3Qf3Yfu1/5S03/D6v8Ao0/WPGf3tX8d
+3rPp27oP7sP3a/8AKWm/4fV/0afrHjP72r+O71n07d0H92H7tf8AlLTf8Pq/6NP1jxn97V/Hd6z6
+du6D+7D92v8Aylpv+H1f9Gn6x4z+9q/ju9Z9O3dCWr+7r931SzDaq+MamvarmMsE8VGsEkcgPyEw
+IQZxIXbLOyzf/lfFXRNt2rqTE4TE33Y968lu56FeBoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEHwOx5Z5NPMcpbS0Lm7u4xzGAtn2YRdmZl+ijw+nEU5YfBnXvmc5R/wBpvJP/AHa5/wCo
+l/7Sv0NP4Y7E+tf8U9p/abyT/wB2uf8AqJf+0n0NP4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D6
+1/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8A
+drn/AKiX/tJ9DT+GOw+tf8U9p/abyT/3a5/6iX/tJ9DT+GOw+tf8U9p/abyT/wB2uf8AqJf+0n0N
+P4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D61/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2
+m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8Adrn/AKiX/tJ9DT+GOw+tf8U9q/s7PneraMr9u/XG
+XrGRTyOz++MsTtn8Fzst0b/di2ep0vnVtzme1VLd+WjWGyWwvtXMnAJnmm4OTerMXLGVv6WlWlLa
+9EMfU1KVrNEX9pvJP/drn/qJf+0r9DT+GOxPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8
+k/8Adrn/AKiX/tJ9DT+GOw+tf8U9r0n7vfI95N5RWqWb09ivYGQZI5pCkb5YyNnbk74fI+y8vjNG
+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
+pf3c/wDzPX//AK7/ALiReTxv9KerzvT4T+pHlsfbV8F9oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEHzqf9z0JTGUG0KOJ3dwjKHm4t
+7M5dwc/wL6cf5KaY29750/4+K4Sj/ub/AN7/AOz/AOtV/Uvl7/sT9P8Am7vtP7m/97/7P/rU/Uvl
+7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v
+/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P
++bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU
+/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77
+T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/
+7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtdbxj928O
+k2obE7z2pIhJogaPtszmLi7v8x5+V3XHX8bOpby0o7aPg4surWr2a8L2CAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAg81e2k4bO1Bc2MmpjEhGiXaB4ZGcWdzOWQDbPJ8cWIVLcemq3YTwWp/IJ42tzQ1WsUte/C3Y7n
+A3cWYpHij4kxcGfrkm/BWu2cImfs86RGzOaObb2F79sSDBMZB+0K4RxvIQg4lTc+D4zgSLq/T8VL
+axH/AJO6PQzM17LfzJaHk9uHSUbGxaD7i5gYJDnaICwzuRyu8YjGzM36vLK3dnEcPRDUbZ4+mU1b
+yyW5NDWp1Yp7EhzAZDYZ4WeFgLIyiBchIZG/Vz+CzGPZXvokzTy4OrrNi9/XDaGLhI/MShd84kjJ
+wIeXTLch9VLpwrG6rUZ0nZLj6baTWZoQtbSSHYvkrGrlhjib0fIxcgE34+vLmSXTERMxjgzPHDFF
+B5pG1ODrCU/24zzfd2Y4CflniIYjZjN+P80W9Fq7Du81ViPPPno7w3pbGthu0YwkaYBlAZzeJmAm
+5dSEJerN+Cl8csls1UNV5FPdsV4pagwjaGY4ZQleQSCFxFjbIRvg+XT8PzVjHsie1JmnbRQs+TMN
+3W2jY44j+9h+1AnJ5ZIpBijZm+VnIn9PhlZsmteNsU65W7CZj4bvRLo/tC5PalrSMdOavUaxIMRx
+yNyl5Mw5OJ+ocOjt0+LOpdNIun4f2/YtsVutjf8AsQQ+SXZghatSGUyox3jeSbhhj5Nw6Rvkvl+D
+N+S1dNOadlv7WbMaRtmvc5m122ztzy2qeQrQ6wb1dvuJInZz5FzMABxkceGOBPx/hUuw5uExC2zW
+kb6+h0ZfILNIaUuxHg0leaYxgNjEu2MbjnlEBcic8MzOzN+Ptu6PauiNn/qozZNYifLKq7T2189m
+FC5TCucld7AkEzy4ZiEeJM4B1+b2d1N/Bd072m12ttjuVKEDSyVoHksTHK8TBzZ+DBgDciwLv7N+
+K53T7My6WR7UcXNr+S/Y1az2jKR3oVJGeSQBEpZicMkRDyb0yREbtj2XW7O796ndMuVuUdE+j1pG
+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
+7BdijszgMdtngcoj4O/AhDusQEzPj6nb8FPMstZ/Hilr7WIrTuWzEReRwbIOMTR5dmcWLPHPsmyI
++avfE+hbZpNeFPP613Za8b2smpEfDuhwGTGeJN9JYy3o7ZUuxZsikU4Uc5vFK3foSFK5BUgeCWNx
+6TO4kLGT56O3cN/0qzSZndMU6PKMFjZvia+XXikq6GxGdMbFzv1dfn7SJo+B54uAvKfIufEHdmwI
+pdjWZzmKJTCmxUi8OEIoh+8dpa8EMUEogzOMkEhSDJhyJn+rDj/GrX0d1vL3lPT3zXuX5NTesHVk
+t3AM6tgZxaOHtg7CBDjDmZZfn1fl7eiRhNenvJisU8s6oz1uxr2DelNhrt0bFmTiP9HCMbCQMxcu
+Tk8bNlm91LcKRsx/Z39y3Y1nbSI+1Z22pi2TVRldu1XmaY4yHkxswEDg/VvXmpTGvCe82eW9zj8U
+kOAK5XnKKGGzWr8o8kMVgREWIuXzdvj+lJxrXOYjumpGE4ZVqtUtLZpSm1W2wVZnE54ii5F3GFhI
+oz5YFj4tlnEvwVv9qvGvekRSI6PMpQeGQQ1RrDYdopIPt7zCDD3uOXjkbr8hg/v16dFZn0dsUxX7
+eydi3Y02yt0nq3L4yNmJxIIOGe3IMmTyZZJ+GPl4t19Eifaid01SYwpwXIdf29pZv9zP3McUfbxj
+j2nN85z1zz+CkYV6fQt2Mxwj0q2x1ezuR2Kz3gGlZZxMHg5SiBNghCTmw/k7g6lK5rWmSu/i7BaK
+3Vs9mwMkclYnDmwMELQEBtybmxC3xZ1qs9899PUzEYU4R3V9br1orQRO1mZppSd3cgDtg34COSfH
+5k6zdFYosOTrvHLFcKMNm4M9bXZKvGEXbdzcXFiMnM88WJ8MzMrdj00okx56+lnW+OT6+WqcFsS7
+Ncathjid+4Am5s44NuBfM/ryVnGsbJp3RQp5575aweN2oKtWKO6LSa83KhN2eogTOxBK3PEjOL46
+cUrOE7aU83qXf01dMfvYKkhzO92x1fhCIRZ9uICZ4b/rH+lZvisUIeaqUNhXq6aD9mXS/ZBEXL/w
+TdzlGcfp92/H68+6t/tT/Dy+b1GyY33V75lX1ms3mqCL9nU7YSdgILXdjpyBJ2nfgYi10HAmYnb6
+nb8FZmvd5oj0H2981drRRXYtlemnp2o2vPGZSz/aswvFEMfXszSO7lxz0BmSMLacZntSmNeHr9bu
+qKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+D//Z
+------=_NextPart_000_000F_01D15E52.0BD654A0--
+
+
diff --git a/src/core/templatetestdata/cid-links-forwarded-inline.mbox b/src/core/templatetestdata/cid-links-forwarded-inline.mbox
new file mode 100644
index 0000000..dd8090e
--- /dev/null
+++ b/src/core/templatetestdata/cid-links-forwarded-inline.mbox
@@ -0,0 +1,763 @@
+Return-Path: <dude@dude.com>
+Received: from imapb020.mykolab.com ([unix socket])
+ by imapb020.mykolab.com (Cyrus 2.5.10-49-g2e214b4-Kolab-2.5.10-8.1.el7.kolab_14) with LMTPA;
+ Mon, 29 May 2017 13:42:50 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from mx03.mykolab.com (unknown [10.20.7.101])
+ by imapb020.mykolab.com (Postfix) with ESMTPS id E4E1A158687A1
+ for <test1@kolab.org>; Mon, 29 May 2017 13:42:50 +0200 (CEST)
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="=_27fc263db229c1c3abb1f95bbef8358d"
+Date: Mon, 29 May 2017 13:42:50 +0200
+From: "Dude, The" <dude@dude.com>
+To: test1@kolab.org
+Subject: Fwd: Html Hello (inlin)
+In-Reply-To: <a1777ec781546ccc5dcd4918a5e4e03d@info>
+References: <a1777ec781546ccc5dcd4918a5e4e03d@info>
+Message-ID: <46b164308eb6056361c866932a740a3c@info>
+X-Sender: dude@dude.com
+
+--=_27fc263db229c1c3abb1f95bbef8358d
+Content-Type: multipart/alternative;
+ boundary="=_b3e300e5b818a05994848f3575fd7d36"
+
+--=_b3e300e5b818a05994848f3575fd7d36
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain; charset=US-ASCII
+
+Hi
+
+-------- Original Message --------
+
+ SUBJECT:
+ Html Hello
+
+ DATE:
+ 2017-05-28 15:13
+
+ FROM:
+ "Dude, The" <dude@dude.com>
+
+ TO:
+ dude@dude.com
+
+THIS is a test.
+--=_b3e300e5b818a05994848f3575fd7d36
+Content-Type: multipart/related;
+ boundary="=_7bed2b6150a4de304dd8cd8fd523f674"
+
+--=_7bed2b6150a4de304dd8cd8fd523f674
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html; charset=UTF-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
+=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
+eva,sans-serif'>
+<p>Hi</p>
+<p>-------- Original Message --------</p>
+<table border=3D"0" cellspacing=3D"0" cellpadding=3D"0">
+<tbody>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">Subject:</th>
+<td>Html Hello</td>
+</tr>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">Date:</th>
+<td>2017-05-28 15:13</td>
+</tr>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">From:</th>
+<td>"Dude, The" &lt;dude@dude.ch&gt;</td>
+</tr>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">To:</th>
+<td>dude@dude.ch</td>
+</tr>
+</tbody>
+</table>
+<p>&nbsp;</p>
+<!-- html ignored --><!-- head ignored --><!-- meta ignored -->
+<p><strong>This</strong> is a test.</p>
+<p>&nbsp;</p>
+<p><img src=3D"cid:1496058170592c093a661dd956000502@info" alt=3D"" =
+width=3D"612" height=3D"600" /></p>
+<div>&nbsp;</div>
+<div>&nbsp;</div>
+</body></html>
+
+--=_7bed2b6150a4de304dd8cd8fd523f674
+Content-Transfer-Encoding: base64
+Content-ID: <1496058170592c093a661dd956000502@info>
+Content-Type: image/jpeg;
+ name=aEwOdgN_700b_v1.jpg
+Content-Disposition: inline;
+ filename=aEwOdgN_700b_v1.jpg;
+ size=84625
+
+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
diff --git a/src/core/templatetestdata/cid-links.mbox b/src/core/templatetestdata/cid-links.mbox
new file mode 100644
index 0000000..40ff528
--- /dev/null
+++ b/src/core/templatetestdata/cid-links.mbox
@@ -0,0 +1,1384 @@
+Message-ID: <851f01d15e53$31734730$790bc9ad@info>
+From: "OculusLab" <info@findermanze.co.ua>
+To: <info@example.org>
+Subject: CID links for images
+Date: Wed, 03 Feb 2016 07:19:17 +0200
+MIME-Version: 1.0
+Content-Type: multipart/related;
+ type="multipart/alternative";
+ boundary="----=_NextPart_000_000F_01D15E52.0BD654A0"
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Windows Live Mail 14.0.8117.416
+X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
+
+ This is a multi-part message in MIME format.
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0010_01D15E52.0BD654A0"
+
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/plain;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+=0D=0A=0D=0A=0D=0A=0D=0ASuperkombipackung f&#252;r nur 45 Euro=0D=
+=0A=0D=0A
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/html;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+<HTML><HEAD>=0D=0A<META http-equiv=3D"Content-Type" content=3D"te=
+xt/html; charset=3Dwindows-1251">=0D=0A</HEAD>=0D=0A<BODY bgColor=
+=3D#ffffff>=0D=0A<DIV align=3Dcenter><FONT size=3D2 face=3DArial>=
+<A =0D=0Ahref=3D"http://intenices.co.ua/drugs-store/index.html"><=
+STRONG><FONT =0D=0Asize=3D4>Superkombipackung f&#252;r nur 45 Eur=
+o</FONT></STRONG></A><BR><BR><A =0D=0Ahref=3D"http://intenices.co=
+.ua/drugs-store/index.html"><IMG border=3D0 hspace=3D0 alt=3D""=20=
+src=3D"cid:9359201d15e53f31a68c307b3369b6@info" width=3D650 heigh=
+t=3D763></A></FONT></DIV></BODY></HTML>
+
+------=_NextPart_000_0010_01D15E52.0BD654A0--
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: image/jpeg;
+ name="aqnaozisxya.jpeg"
+Content-Transfer-Encoding: base64
+Content-ID: <9359201d15e53f31a68c307b3369b6@info>
+
+/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMqaHR0cDov
+L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl
+aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4
+OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6
+MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5
+OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht
+bG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6
+Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUu
+Y29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBo
+b3Rvc2hvcCBDQyAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjdCRTg5MTBD
+OUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjdCRTg5
+MTFDOUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5z
+dGFuY2VJRD0ieG1wLmlpZDpCN0JFODkwRUM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIgc3RSZWY6
+ZG9jdW1lbnRJRD0ieG1wLmRpZDpCN0JFODkwRkM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIvPiA8
+L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0i
+ciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwM
+DAwMEAwODxAPDgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH//AABEIAvsCigMBEQACEQED
+EQH/xADJAAEAAgMBAQEAAAAAAAAAAAAAAwQBAgUGBwgBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYQ
+AAEEAgEDAgQCBAgKCQMACwIAAQMEEQUSIRMGMUFRIjIUYXGBQhUHkaGxUiMzFhfB0WJy0+OkZZVW
+8ILSsyQ0lFU24UN1U4MlssJzhLQ1djcRAQABAgMEBQkFBwQBBAIDAAABEQIhMQNBUWEScYGRoQTw
+scHRIjJSYhPhQpKyFfFygqIzUwXCI2Nzk9JDsxSDNPLD0//aAAwDAQACEQMRAD8A/VKAgICAgICA
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgICAgICAgICAgICAg1y6Bl0DLoGXQMugZdBrIZMBOz9WZBpWkM68Zk+SIWd3QS8nQOTo
+HJ0Dk6BydA5OgcnQOToGXQMugZdAy6Bl0DLoGXQMugOT4dAYnwyA7ughaWTPqgkIyaNnz16INQkN
+3bL+6BJIbHhn6INozJ2fL+6DbLoI5JDYmZn6KDJGTR8s9VQiM39Xyg1GWRy6v0ygkMiYXdn6sghG
+aRxd8/yItGAnldupfxMoUZ70nx/kQO9J8f5EKAzSO3r/ABMhRnuyfH+RCg0snXqgNNI/v/Igd2T4
+/wAiDLSyfFCjDSyfH+RUZ7snx/kUBpTz6oMd2TPr/Igz3JPj/Igy0knx/kQY7smX6oMd2T4/yIMj
+Kb+6B3T5O2eiVKHdP4oUO5J8UqtGHlk5Yz/IpUoz3ZPiqUO7J8UKDynluqIy8h/FA7h/FKlApDZv
+VAaU/ilSjPcP4oDyHjOUGO4eG6oUZ5l8UGeZY9VUatIePVRR5Dz6pUoyxnn1QBkN3fqgy5l8UQYy
++KDcXd2fPxVGUBBqgICAgICDSb+qL8nQR0//ACkP+YyEpkBAQEBAQEBEEBAQEBAQEBAL0dAb0ZFH
+9HQQD6oJJP6pv0INY/Vvz/wIMS/1n8CCSL6X/N0G6CKT62UGS/qv0/4VQhQRh9Tfmglm/qyQQD9D
+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
+6/oo2w6Iy3oisug1QYRGW9UVsiCKwgwgICDCAgwgyyCnfiCRmYxYhJsOzrF00lu3Fw7Ol6u8J4b+
+aX+NI1Fmxz5YZIvkkbBN8PgukTViYom1sxMfa9Xd8MuV8OlsvSRBxFh+H8qwqYWVgSMqyytDUzYR
+cnfDN1d/wZQeQ2Ft7Vo5f1fQG/yW9F2tjBiZVSdlWXpfH6ghSad2/pJny7v8GfDKDqY9kG3p0Qbe
+35oCDP4INmUBAd8MgrkOCz8VpGweuP4FBszoMOzKg3wRWRfOVEbCitmUGyAoMICAgINx9EVlAQao
+CAgwgICDDogisIMOyDCDCBhBhAQYwgYQZwgccoMPGLoNeyPwZBloRb2QSMDMg2ZsIMogg1k+h0FM
+v6+D/Of+R1Wdq6/oo2wiMt6IrLoNVRhRGW9UVsiCKwgwgwgygwgwgINZJBBsv1z6MpMrEOfanPPM
+vpb1b4MuV0u1sNc8myyzRXK2kfUT/Q66acsakMaOtztFM/pE2G/zn/xLWpLNr0IsuTaRmWkbsqg6
+DjeQX+3C1YH+eX6/wD/6rdsJMudrNTLaxJJmOv8AH3L/ADf8a6ObuHq6nZEBiBhB+RM45d2/P1QW
+w6C2McW6fL6N+hBI2PX+BQFUG9VFbfigMg2woDvhkGj/ABVRgmz/AIFRoPq6Df2yorHtj4KoIp+s
+ojLP1RWzOg3ZQZ9lBrl1FMqh1QMug3D0/Sg2QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQRWbVWpAdi1MEFeNsyTS
+kwALZx1InZmQYK5TG2FMp42tyAUsddzFpCAHZiMQzycWcmZ3SPMSji2urmnGCK5BJOTyCMQSARu8
+BMMrMLPn+jJ2Yvg/qkYk4eXX5sVpSZpFRW12zo7LXwbGlL3adgGkhlwQZB/fBsJN+llq6KZm2nGn
+Zglq2q1uvHZqzBYryixRTRExgQv6OJDlnZJigRWq0ss0MUwSS13YZ4xJnKMiFiZjZuou4uztn2U2
+VEiAg5Nvy3xinParWNrVG3SiOe1TaUDsBHGHcMngF3l6B830+ibK7PKPOR70W7ZdSKWOWIJY35Ry
+CxA/plibLeqt1sxNJS26JisbWyiiAgIIq1uraAjrTRzgBlEZRkxsxxvxMHcXfBCTYdvZNlTglQEB
+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
+gkD6gLD9CH3Z0nKuw20ZrWq1qvHZqyhPXlFiimiJjAhf0cSHLOysxQSKAgIK02ypQ7Ctr5JONy2E
+sleLiT8hh49x+TNxbj3B9XSMa8CcIrxp559CygICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgION5nsL2u8V2l6g/G3Xrmc
+R45cMN1k4v68GyWPwUwmYicIm62J6JmInuWK40is0mkb5phHXLx/kwjrquz19C/Zu07vjuxtWgs2
+JLeCjABhmE5SNwaRpDbiLsL46N0V1MromKcs29VZnDu27uLWh71k1xm7tjfwph2tNtJd00FiGnet
+8bfjF66by2JZHCzVGFo5YeRYhfEz9I+LenToumvnqcLre+bq+aHLwsf0p34T2W+XnN1sdx48xy62
+3ZszWtBZvSNamksM1iucAtMAydwY8DOTkICwvj6VdSI5r4yiL7I6IuuuiceiOpnSmZtsuzmYu66W
+xMd+HGubt+JU9/X2wzTzwfsu1UeRoW2tnaSSysYOE8b2YYe2HEiYmB+PUejJdSImJzrGzLOvHdnu
+IrNJ8p9H7XK8mtWNLutvqKhPHL5dHC+rJv1bhENS0Tf5kJRy/od1zssi+OScou/kmt135buu6HW6
+7kmNThT+KPd7a06LUVvlU1HkloL9ija8ZJq2mpxTyRwxxw14yrCdcSaOfvkX/wBwSznA4wt88zy3
+Zzffj+OlOHs0nfjXczZZETyThbbbGP8ADWbuqa8PZ6Vye92rXl+z2dq+0GreLs1q1iSNou7Qi59s
+GIQzykd255ES+bo/VZiPZimMzfNvfbTy3LF2MTOyyLp6pvr5striW9hvtZftUCmlpwsOqtFD+07G
+xkjaTYhHIRzTsJxscb4IGJwx+lb06TdSdl8Rlvtuw44xGbN2Vd9l89lMeGc5eh293a3F7yPyHXan
+YM0kFfU4qlZKAXI5rBTwhIHJ4ZZohZuQjy9PwdYs92JnH257OS3zTjTpavwmNnsf6vKHm9luNpBs
+aBaitdju0G2cF+G5O9+esDDSOc60hnL9w4RnzASP6untxWraYzM+zNueX36eeM8cMcUpNKRHtRfF
+I2TPJdMfsw6s3U8kvxyUrRaK1bsNqNVFabZzbexVhYZBkOGZmBpfupC45LujwfDD8Vi+Zt5rqUpd
+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
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBBpPPBXgknnkGGCIXOWWR2EAAWyRET9GZm9XdJlYiuEI5r9GGsNqax
+FHWNwYJzMRB3kdhDBO+H5OTMPxVpNabWYmJiuxOoqhqt7rdqU7UDklCuXApnhmCEny4v2pTAY5cO
+Ls7xkWFaYRO8nCaL6gICAghu3qVGsdq7Yiq1o+sk8xjHGLfiROzMlViHP/tf4k1H9oftuh9hzaL7
+v7qHs9x2d2DucuPLDP0yrNswzE16l6hsdfsao29faiuVTzwsQGMsb46Pgwd2dJiYzImJyVZvJvG4
+KA7GbbU4tecjwhcOxEMLyM7s4NI5ceTcX6Z9lN3Fd/DPgqD574MYmQ+RawhjblI7Xa7sI5Ycv8/R
+skzK8spzQsz+V+LV6le7PuKMNO3n7WzJZhGKXD4ftm5cSx+DpNs1ptImJiux0YZoZogmhMZIpGYo
+5AdiEhfqzs7dHZ0mKZrE1Qa3aUdnXezRk71djONpeJCJFGTiTg5M3Ict0Iej+zpTCJ34m2Y3LSgI
+Kmz2+p1VdrO0uwUK5EwDNZlCEHN2d2FiNxbOGfonAba/Z67ZVmta61DcrE7sM9eQZY3dvXBA7srM
+TGaRMSsqKjmtVoCiGeYIinPtQMZMLnI7OXAM/UWBd8N8EjcJEFbY7Klrar27snarsccbnxIvmmkG
+IGwLO/UzZkjGYjbJsmd0V7DY7Klrar27snarsccbnxIvmmkGIGwLO/UzZkjGYjbJsmd0V7FlAQVr
+OypVrVSpPJwsXjOOqHEn5lGDyE2WZ2bAC79UiK4cK+aPTBM0ivGnl2LKAgIKG13+h1DRvttlV17T
+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
+0bkDbJqkdTZ3ZTijEasgQyWP/CyGfIjL5my4ceTlhlrTnGZjPl3fPuyypE8eLN9s8tNnNG35Lq49
+VY3Y0b2r22raDZbSK5Odo95PrnkntyxQQVD2Hbdmw0oRszNxaXtkQM/TDLFkVjTj4ox405qds0jj
+ludL5pN8/Dy067bK9lZnvpnWeCPybVb7VQXLQwa+xsYWClHsrOxkHnUtcmlmsxwyPHIYA4AXJuTP
+hbtmJmm2l2z93vjGd9GJieWZ/d/Nn30bQbq5L5IbR35JKY+TvUdhlJ42jbUs/Z6Px49/rx9Of4qa
+cYW8bb/zzTu7l1MJu4fT9FUU+yuXtvPWi2Vhqp+UjScq85jiFtWxHAJC/wAo91nyzehdehdVNOKx
+ZXbbqfmup9i3zSb+EaffNtW0Fu8+0fxqS9aDVftuWn9y9iX7nsjrwtx1/unLvfNKb/Nz5YbjlW2O
+aImfhvnri/lj+XzY7Wb55ZmI32dVbce+Ij+Lodrw7YVarbuGzsikrQ7gqVKS5ZKZ8vDCwQDJMRET
+8ydmHOc/ipnZbvnm66XXeiOwmKX3bo5fy2+l65YaEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBpPBBYgkgnjGaCUXCWKRmIDAmwQkL9HZ29WdJh
+YmmMIj1uukKsUlWEyp5+0Ioxd4cjwft5b5Pl6dPZWZrNdssxFIpsV6njvj9OCzXqaypXr3Mtbhig
+jAJmJnZ+4IizHlnduqkzWKbFjCa7Vn7Cj3Hk+3i7jxdhz4Dnst17ecfR1+n0Sca1258SMKU2ZcPK
+jiTeDaGzvW2VunVs14qcFOpRlrRmEPYkkMTj5ZYeknFmYWxhatvmKztma1SYikRsivfTzUdXY6TS
+7PtftKhWvdh+UH3MMcvAviHNi4v09lImk1jNdlNjYtRqT2AbI6UBbGMHijuvEDzCD5yDSY5sPX0y
+pGFeOfEmMuGSGt4147VjmiraqnBFYMZbAR14gGSSMuQGbCLMRCTZZ39HVrOHDImMZnesTazWzvYe
+apDK9uNobTnGJd2IeXEJMt8wtzLDP06upsoVxqqy+L+MzVa1SXUUpKtN81K514ijhd3z/Rg44Dr/
+ADVeaa1rikRFKbF61UqW4HgtQx2IHcXeKUWMHcCYhfiTO3ykzO34qbarwRWtTqrcry2qcFiUoirl
+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
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBBX2Owqa6hYv3JGiqVYymnlfL8QBuRPhuvoykysRWXJi8qleGeezp
+b9KvFAdkJrL1AjMI25O3NrBDE7t1/puH44w61dFM/L0Jb7UxTb5dPcvyb/SQ2KtWxfrV7lwRKrUl
+miGWTl6cA5ZP/q5V5ZrMRsZi7CJ2Ss3b1KjWO1dsR1asTZlnmMY4xb0yRE7MyzVuIVD8l8cCpFcP
+a0xqTAUkNh7ETRmEbsJkJ8uLiLkzO7emVeWa02+vJImsVhuO+0ZSyQjsapSwjJJLG00bkAQlwlIm
+zlmAvlJ39H9VNldh6f2oYvJtNZjqy0LUF+vbsfahPWnrnG0nAjxl5B5PgfpDkX4Yy7XlmtOFexKx
+SZ3fsVdz5jqaNK1NVnr37FKevBbqRThziexOEGZGHm4ceecO3XCWxWbd100qs4V3xbM9kVdGpu9L
+cqzW6d+tZq13IZ7EM0ZxxuDZJjMXcR4t65UnCKzkRjNNqKLybxuamN2La05KZG8Q2QsRFE8gi5uD
+GxceTCLu7Z9FZiYzIxyW6GwobCqFuhZit1ZM9uxAYyxlh8PgwdxfDpMTGaRMS1/ams7Pf+7h7Pd+
+37vcDj3ufa7XLOOfc+Tj68unqkRlxWcK8EIeQaE7wUA2VUr0jmIVGnjeUiid2kZo+XJ3Bxdi6dEi
+K5E4Zsx77Ry7I9XFsap7OPLyURmjecWZsvmJn5t/AkRWKxkTNJpKz93U78lfvR9+IGllh5NzGMnd
+hMhzlhdxfD/g6lcK7Fp3qNjyjxqtFHNY21KGKUI5YpJLEQiUcue2Yu5MzifF+L+/sryzWm1K4V2K
+5+ZeOx+Sf2dluxRbJ4opowkliHuPMRCMYM58yk+Xlx4+js/ults3Vps/b3bUumLaV+99nnrh0Sth
+5F4+c9qANnUKeiJSXomnjc4AD6ilHlkGH3clNldi0xptbRb3STEIxbCtIRzPWARmjJ3nYO48TYfq
+fD5uPrjqryz5cM+xKx5u/Lt2LyiiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgp7mOrLqrcVuqV2rJEQT1AHmUgE2CFhy2css3RE5tWz
+MTg+eXK20OltaOgfb2dGeovR2KmzgsM4WHiYa0dV7cYWpCL5mdmchxj3wt31m2ebhTfWuOWym80a
+RfZTD2sd1P20yRj47dkl2ut21jcwR7Y4jgjoVa8sM0X28YAJWDqzFXkiKNx/pJQZuhMu3NHNhnbf
+M/zTdE8cKccKbnCyJi2K5TZEfy0mKdNZ3Y76vTeeUNjMekt15LYVKFspbhUYorFkGKE4wlCGWKw0
+nAi6sMblh8t6LjZNL6z8Mx11j0RMfZV0mPYpG+OyK+mk9W+jl6XQDF5XqdhCOwuV5v2lamubGuEJ
+DNMFUGfthDX7PPtlhijEnfk/XOVu2aVjCPY/119KXYxX5o7rbo9XcgtaHbSeKbMK9eeGZ/IJr08c
+McbWJqwXnk5RjOJBI/BmIGIXYsYWbJpGnXZGPD3vTMTv2w3fFZviNsW0/DZWOvGN2/ahtaGzat09
+jrrG2uWrV+EZ7mwqjV7XZqWwCTshXqGzCUosUhhh/lZn6KXRNKRSK239s2xHoS2YznGnL2RfbPrT
+WKr2f3f1NGGnsjsNf+z4bcB1ZOLOFqDv8JHHhMJcCMijcmx1LC63XROrbfHu80dUbursYtibbLrZ
+xu5buueWcevtxZ8u0e5s7ndHRhsDWcNLPI9eMHKYa1icpxhaYThkkAGAuLs+cM2OrLnpzSImf7l0
+9tkRE/i82GMNXxXCPgp/NWnXFY68cGv7CazttZtIS2uzebaVSuTbKoFZhGtWtMJ9ka1Qm4vILPIY
+Yf5WYui3ZPLdGUR7c9c2xHoScbZ30tj+eJ9b0/ilWzX2Xk3dhOGGbaPLWchcRMCqV+RhlvmZ5GLq
+3vlYj+nbH7357lu9+Z4W+Z5axFsIta2kbXXZLgeSRXDkCvK8DVj2jWWmabHbIe2/zMLuQ/rMzM7r
+WjnZPw2zE9PJdHl6zWyv+aIp/KmfT3h0U3CjKNovKht9IiaR4f2oLvN0bPDs5fl6cfwU0p/p12W3
+flv+w1cfqcYtp1RZ6YWNBFfp+Rw0deNqxqHs2rFuDY0DhemUvcNzr3XGMJecp8eLOZcS+rDJpzW3
+HZbERv2YTHR5jU97DObsd3T5b9i9tTsa7yzYWypWrMOx1kNeo9WCSZnngknIozIGcYstMOCkcR/F
+cborp327Zx/lp5bdzrbPtWTsivnhyPDtJcjep95QkBx8UoUyeaImxKzy92H5m6G2W5B6+mV38XNY
+1qbbsOOEuXh8J067Ju89rXxqttqRatrNe3BPe8ao0IrH280nZuQ9xyGdwEuy491nzJhvXqr4mOad
+WLc7prHZdtTRpbGnMxhbN1eubaeZyg8ctTeKfZznu5dvqdZbiDWyVII6wTSU5ICGOeKrF9wJkXys
+ExkT8XJvVTWuia3W7cONKxNKcKbqbmtCJi62Lpyuiftr1znNccX0FhpVKugrzaqSwbFHHWKOuJjT
+kaAv6U3fHZHDOHJvd8e6upNdWafNj6OvvcdOKaVtY+HDjv6ncXJ2EBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEHLk8m00E1kLdqGpHWk7Tzzz1xApBi70gt/SOQlGHzExiL46+nVemPCakxE2
+xN1caRE76Rs2zlSu7NOaK08q506aY9DleSfvH8X02toXG2VGd9sbR6lztwxQTZ9ZO+7kLRB+sbM/
+szM5OzP6fC/4rX1b7reW6OT3vZmZjhTfOyMOyJlJvti3mrh5R+3dDqavyGhasNrbFyiO/jj7lzVV
+bY2Dib44cYZXH/KKMV5tbwt1sc8Rf9KuF020r5475SLt9Kyjv+SjDLLX1+vt7m1XdhsQ0WhZo3fr
+xKWzLWg5Y6uDScmbDu2HZXS8LzRE33W6ds5TdXHqti67rpTi1M7NqTXeS6u5rJ9hIb0YqZnFfC5x
+hKvJHhzGbLuLYZ2fkxOLs7Ozuz5U1fC323xbHtc3u8uPNXd5Vrglt1ZmNseqvmxUtf51othsrMVS
+3Wm1VaKs/wC1wsRlAdi0ZiFcCbIkXEGf6v1mbC7av+O1dOyJui6L5m72eWa0tiK3eW6U+pbWkT5V
+pHbNfKXVrbzSWoJJ6uwrTwQxtNLLFNGYBEXLEhELuzC/Aur9Oj/Bea/w+pbNLrbomZplOe7vatmJ
+mkZ+UeeJjqRX/J/G9f8Ab/tDbU6f3bcqnfsRRd0cZzHzJubY69FrT8JraleSy67lzpEzTp3HNFIn
+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
+uv1Zw1tS2JjdZE804ZxHuxHCJoxFl0W2x712N08bojCv7113c5uy8ad/EgnoXPIdjDSb7aCtaoRV
+pIBuO1S3OEMNGrdmkjrzSHluXJ+vzEvTpeK/36XW6Nk3YzMXzdE8vtW21nUusiJuiI2U4QzbbPLW
+JnmtrdH71JiJxzzrtq+s0Pt/sa/2wFFW7QdmMwKIhDi3EXjNhMHZv1SZnZfmNSvNPNjNenv2uunE
+RbERknWGxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEFbZavWbSlJQ2dSG9Rm496rZjCaI+JMY8gNiF8ELO2W9V00ta/Tui6yZtujbE
+0nthJiubhf3Yfu1/5S03/D6v+jXt/WPGf3tX8d3rZ+nbug/uw/dr/wApab/h9X/Rp+seM/vav47v
+WfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07
+d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3QP+6/
+92js7P4npsP06a+q38kafrHjP72r+O71n07d0Iav7pf3X1gIY/FNUTE+X7tSGZ8/g8gm7Ld/+b8b
+dnran4pjzH0rdyb+7D92v/KWm/4fV/0ax+seM/vav47vWfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3t
+X8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3r
+Pp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3Qf3Yfu1/5S03/AA+r/o0/WPGf3tX8d3rPp27o
+P7sP3a/8pab/AIfV/wBGn6x4z+9q/ju9Z9O3dB/dh+7X/lLTf8Pq/wCjT9Y8Z/e1fx3es+nbuhf0
+/h3iGlsla02j1+stGDxHPTqwwSPG7sTg5RiLuLuLPj8Fx1/H6+tHLqal98Z0uumfPKxbEZQ668jQ
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgqjttUQAY3IHCScqoE0oOxWAJxKFnz1kEgJnH1yzrp9G/wCGcq5bN/RxJmnV5emGo7rT
+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
+3rPp27oP7sP3a/8AKWm/4fV/0afrHjP72r+O71n07d0H92H7tf8AlLTf8Pq/6NP1jxn97V/Hd6z6
+du6D+7D92v8Aylpv+H1f9Gn6x4z+9q/ju9Z9O3dCWr+7r931SzDaq+MamvarmMsE8VGsEkcgPyEw
+IQZxIXbLOyzf/lfFXRNt2rqTE4TE33Y968lu56FeBoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEHwOx5Z5NPMcpbS0Lm7u4xzGAtn2YRdmZl+ijw+nEU5YfBnXvmc5R/wBpvJP/AHa5/wCo
+l/7Sv0NP4Y7E+tf8U9p/abyT/wB2uf8AqJf+0n0NP4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D6
+1/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8A
+drn/AKiX/tJ9DT+GOw+tf8U9p/abyT/3a5/6iX/tJ9DT+GOw+tf8U9p/abyT/wB2uf8AqJf+0n0N
+P4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D61/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2
+m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8Adrn/AKiX/tJ9DT+GOw+tf8U9q/s7PneraMr9u/XG
+XrGRTyOz++MsTtn8Fzst0b/di2ep0vnVtzme1VLd+WjWGyWwvtXMnAJnmm4OTerMXLGVv6WlWlLa
+9EMfU1KVrNEX9pvJP/drn/qJf+0r9DT+GOxPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8
+k/8Adrn/AKiX/tJ9DT+GOw+tf8U9r0n7vfI95N5RWqWb09ivYGQZI5pCkb5YyNnbk74fI+y8vjNG
+yNOZiIiYenwmtdN8RM1fXF8Z9YQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEH5tX6l+cEBB6zUeI07/iFrbs8534pHiggBx4E+RYWdnF
+y9T+K8Ov4m6zUttilJp53q8PoRfZdM521/LVH5R47pvH9fUrzTSz+QWRY5IAMGhiDPUybg5Y/VHr
+1f8AJNHxN2pqTFsexG3y8qNanh7dPTrd707PLc69b929WXxRtiUs37VOuViOuxAwP05C3Fx5fTj3
+9Vy1fHTbqcuHLE4+lvQ8HF9lds5ehx/GvGdfs9DuNjZOVpddEUkIRkIiTjGR/NyEn9R9l38V4i7T
+m2I2z6nPwPh41tSbZ+Xvr6jR+Ma+94lt9zOczWNeMpRRgQsD8ImNuWRJ/X4Omv4i6zUttjK6Y89G
+dDRi+y6Z2R6F69414nqvHdZttg+xmO+MeY6hV+hnHzfpKwfL0/nLnPiNSdWbLYjCvdLrGhpxpxfd
+M4tNB454ttqe32TtsIKGuFjjAyr98hGJzPLCxhnIvx+ZNbxGppxbWI5pXw/h9PW1Jttmcre2Zu7s
+I73Np1fEtntdfQ10WziezOIWJLZVWZo3Z/o7Tm/LOPVsLrz6sRM3cuET2vNfGnhy1rN1sdUzR6De
+fu3pUthrBqyzyULU417REQOYET9HZ2Bm6/i3qvPoeOm6taVpWOp6fEeEiyIm34oieuY8ux5XyvVV
+dTv7eurEZQ13BhKV2cn5Rib54sLfrfBevwurOpZzS4+K0Y07oiNzsa6ebY+CbWtNIUp6+aGxFzdy
+dgL5SZs+2MrlfEW61sx97BqyZu0ronY6u0teIv8Au+qwQzSE4G516/Ie60755MfT6R5rjp26v1pm
+Y/Y633af0Yh47baKzrKtCawY878TzDA2eYBn5XLP872Xt09WL5mI2PHfpTbETO1zV2cxB6X93P8A
+8z1//wCu/wC4kXk8b/Snq870+E/qR5bH21fBfaEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBB+bV+pfnBAQfT/CtmWr/AHf3NgMbSvXn
+I+2Xo/UGf+VfI8dbXVtjfSO99DwE00753Vnsthr5H4lX8iv6/fat+5X2BxDe69WBsNz/AA4i3F2+
+KeH1vo81l2zGOn7W/Eaf1rYvt6O/0bXVbyfRj52OtFrn3UcbUWx2WpM7s0v87u8vQfTHsvPZo3Xa
+U3YUnHjhWPW76mrZZfbbtjD8VPVDnaahXp3PKPGe4ME10Sejz6MQTRkw8fjx5suurdN+lZfny59V
+PPRNCml4mZn73LMds18/cphTl8X/AHfberuCCC3se5FVrsYkZlJG0Y44u+f5z/BvVb1dSNXWs5Ma
+THnq46WlOnp382GE+ZY8j3e41Pg3j0urtFUllGEJJBCM3cew5YxKMjerfBLdK3U8RfF2WM98LOpN
+mhbMZ1j0sfu+u7q9qfIrYzlY3EzM8MxNGLvM0RNH0YQjbqze2PinjdO2yLLYyx88M/46/n1rpv8A
+kr/MowQefD5BpJPJpjkrtbEYBL7Rm7js7v0riJeg+66W/RpdyZ8s78nHWnW9nny57d2dXoNXvwbz
+rc6K2/KGWaKany9BkCCMnFvzxyb8WXm+jXQtvjOK9nNL1fVpr3WzldTt5YeD/eH/APMtl+cX/cAv
+f/j/AOlHTPncP8j78fu+tjwrYdjYy0Dqncr7SJ600ETsxuz9eQ5dm6dVvxVlba1pNuLh4e+k0pXm
+d+rofDH3D0I6Wzlv135yVD7WMDh/mfLNxfp7rz3a2ry81baS726WnzUpdV5PybbWtpurNmyDwkxP
+GED/AP2xB8MH6Pf8V7NDTiyyIh5da+brpmXLXZyEHpf3c/8AzPX/AP67/uJF5PG/0p6vO9PhP6ke
+Wx9tXwX2hAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQfm1fqX5wQEGhxRGQkYCRA+Qd2Z3Z/wypQqxJXgkJikjEybozkLO/8alIWstgj
+jjHgAsIN6CLMzfwMqjEcMMYuMYCAv6iLMzP/AAJQqxHXgjd3jjEHf1cRZv5EiKEyz2ou53eA9x2x
+zw3LH5pQqSQxSszSgJs3VmJmds/pSYqRLWOrWjLlHCAF6ZEWZ8foSkLWWwRRRhwABAP5oszN1/Bk
+ojMcUUY8YwEB9cCzM38SCxSu2qVqO1VkeKxE/KOQfVn/AEqXWxdFJyW26bZrC5F5Hu4tpJtI7Zjf
+lZ2knwLu7OzNh2duOOjeyxOjZNvLTBuNa6LuauLnyyyTSnLKTnJITkZv1dyd8u7rpEUwc5mrVUEH
+pf3c/wDzPX//AK7/ALiReTxv9KerzvT4T+pHlsfbV8F9oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEHzqf9z0JTGUG0KOJ3dwjKHm4t
+7M5dwc/wL6cf5KaY29750/4+K4Sj/ub/AN7/AOz/AOtV/Uvl7/sT9P8Am7vtP7m/97/7P/rU/Uvl
+7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v
+/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P
++bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU
+/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77
+T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/
+7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtdbxj928O
+k2obE7z2pIhJogaPtszmLi7v8x5+V3XHX8bOpby0o7aPg4surWr2a8L2CAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAg81e2k4bO1Bc2MmpjEhGiXaB4ZGcWdzOWQDbPJ8cWIVLcemq3YTwWp/IJ42tzQ1WsUte/C3Y7n
+A3cWYpHij4kxcGfrkm/BWu2cImfs86RGzOaObb2F79sSDBMZB+0K4RxvIQg4lTc+D4zgSLq/T8VL
+axH/AJO6PQzM17LfzJaHk9uHSUbGxaD7i5gYJDnaICwzuRyu8YjGzM36vLK3dnEcPRDUbZ4+mU1b
+yyW5NDWp1Yp7EhzAZDYZ4WeFgLIyiBchIZG/Vz+CzGPZXvokzTy4OrrNi9/XDaGLhI/MShd84kjJ
+wIeXTLch9VLpwrG6rUZ0nZLj6baTWZoQtbSSHYvkrGrlhjib0fIxcgE34+vLmSXTERMxjgzPHDFF
+B5pG1ODrCU/24zzfd2Y4CflniIYjZjN+P80W9Fq7Du81ViPPPno7w3pbGthu0YwkaYBlAZzeJmAm
+5dSEJerN+Cl8csls1UNV5FPdsV4pagwjaGY4ZQleQSCFxFjbIRvg+XT8PzVjHsie1JmnbRQs+TMN
+3W2jY44j+9h+1AnJ5ZIpBijZm+VnIn9PhlZsmteNsU65W7CZj4bvRLo/tC5PalrSMdOavUaxIMRx
+yNyl5Mw5OJ+ocOjt0+LOpdNIun4f2/YtsVutjf8AsQQ+SXZghatSGUyox3jeSbhhj5Nw6Rvkvl+D
+N+S1dNOadlv7WbMaRtmvc5m122ztzy2qeQrQ6wb1dvuJInZz5FzMABxkceGOBPx/hUuw5uExC2zW
+kb6+h0ZfILNIaUuxHg0leaYxgNjEu2MbjnlEBcic8MzOzN+Ptu6PauiNn/qozZNYifLKq7T2189m
+FC5TCucld7AkEzy4ZiEeJM4B1+b2d1N/Bd072m12ttjuVKEDSyVoHksTHK8TBzZ+DBgDciwLv7N+
+K53T7My6WR7UcXNr+S/Y1az2jKR3oVJGeSQBEpZicMkRDyb0yREbtj2XW7O796ndMuVuUdE+j1pG
+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
+7BdijszgMdtngcoj4O/AhDusQEzPj6nb8FPMstZ/Hilr7WIrTuWzEReRwbIOMTR5dmcWLPHPsmyI
++avfE+hbZpNeFPP613Za8b2smpEfDuhwGTGeJN9JYy3o7ZUuxZsikU4Uc5vFK3foSFK5BUgeCWNx
+6TO4kLGT56O3cN/0qzSZndMU6PKMFjZvia+XXikq6GxGdMbFzv1dfn7SJo+B54uAvKfIufEHdmwI
+pdjWZzmKJTCmxUi8OEIoh+8dpa8EMUEogzOMkEhSDJhyJn+rDj/GrX0d1vL3lPT3zXuX5NTesHVk
+t3AM6tgZxaOHtg7CBDjDmZZfn1fl7eiRhNenvJisU8s6oz1uxr2DelNhrt0bFmTiP9HCMbCQMxcu
+Tk8bNlm91LcKRsx/Z39y3Y1nbSI+1Z22pi2TVRldu1XmaY4yHkxswEDg/VvXmpTGvCe82eW9zj8U
+kOAK5XnKKGGzWr8o8kMVgREWIuXzdvj+lJxrXOYjumpGE4ZVqtUtLZpSm1W2wVZnE54ii5F3GFhI
+oz5YFj4tlnEvwVv9qvGvekRSI6PMpQeGQQ1RrDYdopIPt7zCDD3uOXjkbr8hg/v16dFZn0dsUxX7
+eydi3Y02yt0nq3L4yNmJxIIOGe3IMmTyZZJ+GPl4t19Eifaid01SYwpwXIdf29pZv9zP3McUfbxj
+j2nN85z1zz+CkYV6fQt2Mxwj0q2x1ezuR2Kz3gGlZZxMHg5SiBNghCTmw/k7g6lK5rWmSu/i7BaK
+3Vs9mwMkclYnDmwMELQEBtybmxC3xZ1qs9899PUzEYU4R3V9br1orQRO1mZppSd3cgDtg34COSfH
+5k6zdFYosOTrvHLFcKMNm4M9bXZKvGEXbdzcXFiMnM88WJ8MzMrdj00okx56+lnW+OT6+WqcFsS7
+Ncathjid+4Am5s44NuBfM/ryVnGsbJp3RQp5575aweN2oKtWKO6LSa83KhN2eogTOxBK3PEjOL46
+cUrOE7aU83qXf01dMfvYKkhzO92x1fhCIRZ9uICZ4b/rH+lZvisUIeaqUNhXq6aD9mXS/ZBEXL/w
+TdzlGcfp92/H68+6t/tT/Dy+b1GyY33V75lX1ms3mqCL9nU7YSdgILXdjpyBJ2nfgYi10HAmYnb6
+nb8FZmvd5oj0H2981drRRXYtlemnp2o2vPGZSz/aswvFEMfXszSO7lxz0BmSMLacZntSmNeHr9bu
+qKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+D//Z
+------=_NextPart_000_000F_01D15E52.0BD654A0--
+
+
diff --git a/src/core/templatetestdata/crlf-encrypted-with-signature-multipart.mbox b/src/core/templatetestdata/crlf-encrypted-with-signature-multipart.mbox
new file mode 100644
index 0000000..c8a3bdb
--- /dev/null
+++ b/src/core/templatetestdata/crlf-encrypted-with-signature-multipart.mbox
@@ -0,0 +1,35 @@
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQgAgXLGaohf4ZPJVDkpmpNsyXL/nccd+SyY3/deHQ8d8vp9
+Ye9Hr30Yz65+CAI7JCHKjIOaXjw1Nf1qqEDSyghKR0c16dLBGK37GlqOLaqScifZ
+/bC5WQu4V1a+dv1qnNOh3JNp5ynVpg22b5XaBggpAGCxCSrUsWWkRxTR+kBuPdn8
+EPMOlN3xKU1LFQfI+a3HMGpWo3PokVb4nrtuuwi261woSgKUSYjG86MJF1E28y+g
+bMC6rmRV+Jp0wpEmr7aogx4gELe17tglD41oLvNL9yZeEh/V8cMnnEDbO/oG+xba
+UjyM73V+TO2kXk0CTqItVbx6Q7kNWR/DfaJqGnzcy9KMAT1B8EpVCK/nN81mF8ia
+4KFKQ1OGHhcQ2tT5ZXs6m1vJ5/sz/6g0n0CMtSsWUSvPzpM5F+LK+B7dzOeJEQee
+3/S0wUFYpbAh1PyMPYobNLsEQCGtQ1PhsUXM7t1ai6jfM4k/lvbnIzUM11Q6vsnR
+LWS77CELfcW9WlQ755sNcwo3a/WySyU1C1gZdLw=
+=Fijx
+-----END PGP MESSAGE-----
+
+--nextPart1357031.ppLHckZtsp--
diff --git a/src/core/templatetestdata/crlf-encrypted-with-signature.mbox b/src/core/templatetestdata/crlf-encrypted-with-signature.mbox
new file mode 100644
index 0000000..519b730
--- /dev/null
+++ b/src/core/templatetestdata/crlf-encrypted-with-signature.mbox
@@ -0,0 +1,24 @@
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset=UTF-8;
+ format=flowed
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQgAgXLGaohf4ZPJVDkpmpNsyXL/nccd+SyY3/deHQ8d8vp9
+Ye9Hr30Yz65+CAI7JCHKjIOaXjw1Nf1qqEDSyghKR0c16dLBGK37GlqOLaqScifZ
+/bC5WQu4V1a+dv1qnNOh3JNp5ynVpg22b5XaBggpAGCxCSrUsWWkRxTR+kBuPdn8
+EPMOlN3xKU1LFQfI+a3HMGpWo3PokVb4nrtuuwi261woSgKUSYjG86MJF1E28y+g
+bMC6rmRV+Jp0wpEmr7aogx4gELe17tglD41oLvNL9yZeEh/V8cMnnEDbO/oG+xba
+UjyM73V+TO2kXk0CTqItVbx6Q7kNWR/DfaJqGnzcy9KMAT1B8EpVCK/nN81mF8ia
+4KFKQ1OGHhcQ2tT5ZXs6m1vJ5/sz/6g0n0CMtSsWUSvPzpM5F+LK+B7dzOeJEQee
+3/S0wUFYpbAh1PyMPYobNLsEQCGtQ1PhsUXM7t1ai6jfM4k/lvbnIzUM11Q6vsnR
+LWS77CELfcW9WlQ755sNcwo3a/WySyU1C1gZdLw=
+=Fijx
+-----END PGP MESSAGE-----
diff --git a/src/core/templatetestdata/details/forward-openpgp-signed-encrypted.mbox.html b/src/core/templatetestdata/details/forward-openpgp-signed-encrypted.mbox.html
new file mode 100644
index 0000000..9a81f10
--- /dev/null
+++ b/src/core/templatetestdata/details/forward-openpgp-signed-encrypted.mbox.html
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">bla bla bla</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:2.1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att2.1"/>
+ <div id="attachmentDiv2.1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-encoded.mbox.html b/src/core/templatetestdata/details/openpgp-encoded.mbox.html
new file mode 100644
index 0000000..65d5f95
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-encoded.mbox.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed on 12/21/15 3:46 PM with unknown key <a href="kmail:showCertificate#gpg ### OpenPGP ### E68031D299A6527C">0xE68031D299A6527C</a>.<br/>The validity of the signature cannot be verified.<br/>Status:<i>No public key to verify the signature</i></td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis. Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros. Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-encrypted+signed.mbox.html b/src/core/templatetestdata/details/openpgp-encrypted+signed.mbox.html
new file mode 100644
index 0000000..96361c3
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-encrypted+signed.mbox.html
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/details/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..cc6bf03
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:1:e0:1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>file.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-encrypted-attachment.mbox.html b/src/core/templatetestdata/details/openpgp-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..61bf5d2
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-encrypted-attachment.mbox.html
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:e0:1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>file.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-encrypted-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/details/openpgp-encrypted-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..8d8bde0
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-encrypted-non-encrypted-attachment.mbox.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-encrypted-partially-signed-attachments.mbox.html b/src/core/templatetestdata/details/openpgp-encrypted-partially-signed-attachments.mbox.html
new file mode 100644
index 0000000..1716b84
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-encrypted-partially-signed-attachments.mbox.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the main body.</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment1.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">This is a signed attachment.</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">This is an unsigned attachment.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-inline-charset-encrypted.mbox.html b/src/core/templatetestdata/details/openpgp-inline-charset-encrypted.mbox.html
new file mode 100644
index 0000000..c2fa2fe
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-inline-charset-encrypted.mbox.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">asdasd asd asd asdf sadf sdaf sadf öäü</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-inline-signed.mbox.html b/src/core/templatetestdata/details/openpgp-inline-signed.mbox.html
new file mode 100644
index 0000000..00a9dc5
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-inline-signed.mbox.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">ohno öäü</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-signed-base64-mailman-footer.mbox.html b/src/core/templatetestdata/details/openpgp-signed-base64-mailman-footer.mbox.html
new file mode 100644
index 0000000..c10cecd
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-signed-base64-mailman-footer.mbox.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed on 8/22/15 9:31 AM with unknown key <a href="kmail:showCertificate#gpg ### OpenPGP ### 7F96CCD64D12D247">0x7F96CCD64D12D247</a>.<br/>The validity of the signature cannot be verified.<br/>Status:<i>No public key to verify the signature</i></td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">Hi,</div>
+ <br/>
+ <div dir="ltr">I've talked to Ben, the current Phabricator test setup would actually be&nbsp;</div>
+ <div dir="ltr">usable for "production" use for task/project management for us, without&nbsp;</div>
+ <div dir="ltr">causing the sysadmins unreasonable trouble when migrating to the full&nbsp;</div>
+ <div dir="ltr">production deployment of Phabricator eventually.</div>
+ <br/>
+ <div dir="ltr">Phabricator project layout it orthogonal to repo layout, so we can structure&nbsp;</div>
+ <div dir="ltr">this however we want. Among other teams I see at least the following layouts:</div>
+ <div dir="ltr">- single project for everything</div>
+ <div dir="ltr">- a project per release</div>
+ <div dir="ltr">- a project per component/module (ie. close to the repo layout)</div>
+ <br/>
+ <div dir="ltr">How do we want to structure this?</div>
+ <br/>
+ <div dir="ltr">I would start with a single project to not fragment this too much, as we have&nbsp;</div>
+ <div dir="ltr">a relatively small team actually looking into this, so everyone is looking at&nbsp;</div>
+ <div dir="ltr">most sub-projects anyway. And should we eventually hit scaling limits, we can&nbsp;</div>
+ <div dir="ltr">always expand this I think.</div>
+ <br/>
+ <div dir="ltr">We of course should also talk about what we actually want to put in there. My&nbsp;</div>
+ <div dir="ltr">current motivation is having a place to collect the tasks for getting more of&nbsp;</div>
+ <div dir="ltr">the former pimlibs into KF5, and anything else I run into on the way there&nbsp;</div>
+ <div dir="ltr">that we eventually should clean up/improve.</div>
+ <br/>
+ <div dir="ltr">regards,</div>
+ <div dir="ltr">Volker</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">KDE PIM mailing list <a href="mailto:kde-pim@kde.org">kde-pim@kde.org</a></div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/kde-pim">https://mail.kde.org/mailman/listinfo/kde-pim</a>
+ </div>
+ <div dir="ltr">KDE PIM home page at <a href="http://pim.kde.org/">http://pim.kde.org/</a></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-signed-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/details/openpgp-signed-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..2c02a22
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-signed-encrypted-two-attachments.mbox.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment1.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is one attachment</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment2.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is the second attachment</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-signed-encrypted.mbox.html b/src/core/templatetestdata/details/openpgp-signed-encrypted.mbox.html
new file mode 100644
index 0000000..d3a7a0c
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-signed-encrypted.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-signed-mailinglist+old.mbox.html b/src/core/templatetestdata/details/openpgp-signed-mailinglist+old.mbox.html
new file mode 100644
index 0000000..e7da94d
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-signed-mailinglist+old.mbox.html
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">Oh man a header :)</div>
+ <br/>
+ </div>
+ </div>
+ </div>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:e1:1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed on 4/8/13 9:51 AM with unknown key <a href="kmail:showCertificate#gpg ### OpenPGP ### D6B72EB1A7F1DB43">0xD6B72EB1A7F1DB43</a>.<br/>The validity of the signature cannot be verified.<br/>Status:<i>No public key to verify the signature</i></td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-signed-mailinglist.mbox.html b/src/core/templatetestdata/details/openpgp-signed-mailinglist.mbox.html
new file mode 100644
index 0000000..f5b20b6
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-signed-mailinglist.mbox.html
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed on 4/8/13 9:51 AM with unknown key <a href="kmail:showCertificate#gpg ### OpenPGP ### D6B72EB1A7F1DB43">0xD6B72EB1A7F1DB43</a>.<br/>The validity of the signature cannot be verified.<br/>Status:<i>No public key to verify the signature</i></td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/openpgp-signed-two-attachments.mbox.html b/src/core/templatetestdata/details/openpgp-signed-two-attachments.mbox.html
new file mode 100644
index 0000000..1432aa4
--- /dev/null
+++ b/src/core/templatetestdata/details/openpgp-signed-two-attachments.mbox.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment1.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is attachment one</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment2.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is attachment two</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/signed-forward-openpgp-signed-encrypted.mbox.html b/src/core/templatetestdata/details/signed-forward-openpgp-signed-encrypted.mbox.html
new file mode 100644
index 0000000..b960f31
--- /dev/null
+++ b/src/core/templatetestdata/details/signed-forward-openpgp-signed-encrypted.mbox.html
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">bla bla bla</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:1.2.1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test@kolab.org">test@kolab.org</a> (Key ID: <a href="kmail:showCertificate#gpg ### OpenPGP ### 8D9860C58F246DE6">0x8D9860C58F246DE6</a>).<br/>The signature is valid and the key is fully trusted.</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/smime-opaque-enc+sign.mbox.html b/src/core/templatetestdata/details/smime-opaque-enc+sign.mbox.html
new file mode 100644
index 0000000..d6345a7
--- /dev/null
+++ b/src/core/templatetestdata/details/smime-opaque-enc+sign.mbox.html
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test%40example.com">test@example.com</a> on 1/10/13 3:48 PM with key <a href="kmail:showCertificate#gpgsm ### SMIME ### 4CC658E3212B49DC">0x4CC658E3212B49DC</a><br/>&nbsp;<br/>Status:<i>Good signature.</i><br/>&nbsp;<br/><u>Warning:</u> Sender's mail address is not stored in the <a href="kmail:showCertificate#gpgsm ### SMIME ### 4CC658E3212B49DC">certificate</a> used for signing.<br/>sender: <br/>stored: test@example.com</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">Encrypted and signed mail.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/smime-opaque-sign.mbox.html b/src/core/templatetestdata/details/smime-opaque-sign.mbox.html
new file mode 100644
index 0000000..248b93f
--- /dev/null
+++ b/src/core/templatetestdata/details/smime-opaque-sign.mbox.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test%40example.com">test@example.com</a> on 1/10/13 3:48 PM with key <a href="kmail:showCertificate#gpgsm ### SMIME ### 4CC658E3212B49DC">0x4CC658E3212B49DC</a><br/>&nbsp;<br/>Status:<i>Good signature.</i></td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">A simple signed only test.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/details/smime-signed-encrypted.mbox.html b/src/core/templatetestdata/details/smime-signed-encrypted.mbox.html
new file mode 100644
index 0000000..6e81163
--- /dev/null
+++ b/src/core/templatetestdata/details/smime-signed-encrypted.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td rowspan="2">Message was signed by <a href="mailto:test%40example.com">test@example.com</a> on 9/8/10 3:51 PM with key <a href="kmail:showCertificate#gpgsm ### SMIME ### 4CC658E3212B49DC">0x4CC658E3212B49DC</a><br/>&nbsp;<br/>Status:<i>Good signature.</i><br/>&nbsp;<br/><u>Warning:</u> Sender's mail address is not stored in the <a href="kmail:showCertificate#gpgsm ### SMIME ### 4CC658E3212B49DC">certificate</a> used for signing.<br/>sender: <br/>stored: test@example.com</td>
+ <td align="right" valign="top" nowrap="nowrap">
+ <a href="kmail:hideSignatureDetails">Hide Details</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right" valign="bottom" nowrap="nowrap"/>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/encapsulated-with-attachment.mbox b/src/core/templatetestdata/encapsulated-with-attachment.mbox
new file mode 100644
index 0000000..885b9d1
--- /dev/null
+++ b/src/core/templatetestdata/encapsulated-with-attachment.mbox
@@ -0,0 +1,53 @@
+From: Thomas McGuire <dontspamme@gmx.net>
+Subject: Fwd: Test with attachment
+Date: Wed, 5 Aug 2009 10:58:27 +0200
+MIME-Version: 1.0
+Content-Type: Multipart/Mixed;
+ boundary="Boundary-00=_zmUeKB+A8hGfCVZ"
+
+
+--Boundary-00=_zmUeKB+A8hGfCVZ
+Content-Type: text/plain;
+ charset="iso-8859-15"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+This is the first encapsulating message.
+
+--Boundary-00=_zmUeKB+A8hGfCVZ
+Content-Type: message/rfc822;
+ name="forwarded message"
+Content-Transfer-Encoding: 7bit
+Content-Description: Thomas McGuire <dontspamme@gmx.net>: Test with attachment
+Content-Disposition: inline
+
+From: Thomas McGuire <dontspamme@gmx.net>
+Subject: Test with attachment
+Date: Wed, 5 Aug 2009 10:57:58 +0200
+MIME-Version: 1.0
+Content-Type: Multipart/Mixed;
+ boundary="Boundary-00=_WmUeKQpGb0DHyx1"
+
+--Boundary-00=_WmUeKQpGb0DHyx1
+Content-Type: text/plain;
+ charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+
+
+
+This is the second encapsulated message.
+
+--Boundary-00=_WmUeKQpGb0DHyx1
+Content-Type: text/plain;
+ name="attachment.txt"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment;
+ filename="attachment.txt"
+
+This is an attachment.
+
+--Boundary-00=_WmUeKQpGb0DHyx1--
+
+--Boundary-00=_zmUeKB+A8hGfCVZ--
diff --git a/src/core/templatetestdata/encapsulated-with-attachment.mbox.html b/src/core/templatetestdata/encapsulated-with-attachment.mbox.html
new file mode 100644
index 0000000..aa3d109
--- /dev/null
+++ b/src/core/templatetestdata/encapsulated-with-attachment.mbox.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">This is the first encapsulating message.</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:2.1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att2.1"/>
+ <div id="attachmentDiv2.1">
+ <a name="att2.1.1"/>
+ <div id="attachmentDiv2.1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the second encapsulated message.</div>
+ </div>
+ </div>
+ <a name="att2.1.2"/>
+ <div id="attachmentDiv2.1.2">
+ <hr/>
+ <div>
+ <a href="attachment:2.1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/encapsulated-with-attachment.mbox.tree b/src/core/templatetestdata/encapsulated-with-attachment.mbox.tree
new file mode 100644
index 0000000..050414a
--- /dev/null
+++ b/src/core/templatetestdata/encapsulated-with-attachment.mbox.tree
@@ -0,0 +1,10 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::EncapsulatedRfc822MessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox b/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox
new file mode 100644
index 0000000..1c16694
--- /dev/null
+++ b/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox
@@ -0,0 +1,69 @@
+From test@kolab.org Wed, 08 Sep 2010 17:52:37 +0200
+From: OpenPGP Test <test@kolab.org>
+Subject: Fwd: OpenPGP signed and encrypted
+Date: Wed, 08 Sep 2010 17:52:37 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart2148910.9CGjQOYhYJ"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart2148910.9CGjQOYhYJ
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+bla bla bla
+--nextPart2148910.9CGjQOYhYJ
+Content-Type: message/rfc822
+Content-Disposition: inline; filename="forwarded message"
+Content-Description: OpenPGP Test <test@kolab.org>: OpenPGP signed and encrypted
+
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP signed and encrypted
+Date: Tue, 07 Sep 2010 18:08:44 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart25203163.0xtB501Z4V"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf7BFYWaGiCTGtXY59bSh3LCXNnWZejblYALxIUNXOFEXbm
+y/YA95FmQsy3U5HRCAJV/DY1PEaJz1RTm9bcdIpDC3Ab2YzSwmOwV5fcoUOB2df4
+KjX19Q+2F3JxpPQ0N1gHf4dKfIu19LH+CKeFzUN13aJs5J4A5wlj+NjJikxzmxDS
+kDtNYndynPmo9DJQcsUFw3gpvx5HaHvx1cT4mAB2M5cd2l+vN1jYbaWb0x5Zq41z
+mRNI89aPieC3rcM2289m68fGloNbYvi8mZJu5RrI4Tbi/D7Rjm1y63lHgVV6AN88
+XAzRiedOeF99LoTBulrJdtT8AAgCs8nCetcWpIffdtLpAZiZkzHmYOU7nqGxqpRk
+OVeUTrCn9DW2SMmHjaP4IiKnMvzEycu5F4a72+V1LeMIhMSjTRTq+ZE2PTaqH59z
+QsMn7Nb6GlOICbTptRKNNtyJKO7xXlpT7YtvNKnCyEOkH2XrYH7GvpYCiuQ0/o+7
+SxV436ZejiYIg6DQDXJCoa2DXimGp0C10Jh0HwX0BixpoNtwEjkGRYcX6P/JzkH0
+oBood4Ly+Tiu6iVDisrK3AVGYpIzCrKkE9qULTw4R/jFKR2tcCqGb7Fxtk2LV7Md
+3S+DyOKrvKQ5GNwbp9OE97pwk+Lr1JS3UAvj5f6BR+1PVNcC0i0wWkgwDjPh1eGD
+enMQmorE6+N0uHtH2F4fOxo/TbbA3+zhI25kVW3bO03xyUl/cmQZeb52nvfOvtOo
+gSb2j6bPkzljDMPEzrtJjbFtGHJbPfUQYJgZv9OE2EQIqpg6goIw279alBq6GLIX
+pkO+dRmztzjcDyhcLxMuQ4cTizel/0J/bU7U6lvwHSyZVbT4Ev+opG5K70Hbqbwr
+NZcgdWXbSeesxGM/oQaMeSurOevxVl+/zrTVAek61aRRd1baAYqgi2pf2V7y4oK3
+qkdxzmoFpRdNlfrQW65NZWnHOi9rC9XxANIwnVn3kRcDf+t2K4PrFluI157lXM/o
+wX91j88fazysbJlQ6TjsApO9ETiPOFEBqouxCTtCZzlUgyVG8jpIjdHWFnagHeXH
++lXNdYjxnTWTjTxMOZC9ySMpXkjWdFI1ecxVwu6Ik6RX51rvBJAAXWP75yUjPKJ4
+rRi5oQl/VLl0QznO7lvgMPtUwgDVNWO/r7Kn9B387h9fAJZ/kWFAEDW2yhAzABqO
+rCNKDzBPgfAwCnikCpMoCbOL7SU8BdbzQHD8/Lkv4m0pzliHQ/KkGF710koBzTmF
+N7+wk9pwIuvcrEBQj567
+=GV0c
+-----END PGP MESSAGE-----
+
+--nextPart25203163.0xtB501Z4V--
+
+--nextPart2148910.9CGjQOYhYJ--
diff --git a/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox.html b/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox.html
new file mode 100644
index 0000000..7632ec3
--- /dev/null
+++ b/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">bla bla bla</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:2.1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att2.1"/>
+ <div id="attachmentDiv2.1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox.tree b/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox.tree
new file mode 100644
index 0000000..324156d
--- /dev/null
+++ b/src/core/templatetestdata/forward-openpgp-signed-encrypted.mbox.tree
@@ -0,0 +1,9 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::EncapsulatedRfc822MessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/gmail-invitation.mbox b/src/core/templatetestdata/gmail-invitation.mbox
new file mode 100644
index 0000000..18f914e
--- /dev/null
+++ b/src/core/templatetestdata/gmail-invitation.mbox
@@ -0,0 +1,222 @@
+Return-Path: <doe@gmail.com>
+MIME-Version: 1.0
+Reply-To: doe@gmail.com
+Sender: Google Calendar <calendar-notification@google.com>
+Message-ID: <0000000000000d116705904d4868@google.com>
+Date: Sat, 17 Aug 2019 10:07:59 +0000
+Subject: Invitation: test1 @ Sat 17 Aug 2019 15:00 - 16:00 (CEST) (test1@kolab.org)
+From: doe@gmail.com
+To: test1@kolab.org
+Content-Type: multipart/mixed; boundary="0000000000000d114f05904d4867"
+
+--0000000000000d114f05904d4867
+Content-Type: multipart/alternative; boundary="0000000000000d114c05904d4865"
+
+--0000000000000d114c05904d4865
+Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes
+Content-Transfer-Encoding: base64
+
+WW91IGhhdmUgYmVlbiBpbnZpdGVkIHRvIHRoZSBmb2xsb3dpbmcgZXZlbnQuDQoNClRpdGxlOiB0
+ZXN0MQ0KV2hlbjogU2F0IDE3IEF1ZyAyMDE5IDE1OjAwIOKAkyAxNjowMCBDZW50cmFsIEV1cm9w
+ZWFuIFRpbWUgLSBadXJpY2gNCkNhbGVuZGFyOiB0ZXN0MUBrb2xhYi5vcmcNCldobzoNCiAgICAg
+KiBjbW9sbGVrb3BmQGdtYWlsLmNvbS0gb3JnYW5pc2VyDQogICAgICogdGVzdDFAa29sYWIub3Jn
+DQoNCkV2ZW50IGRldGFpbHM6ICANCmh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vY2FsZW5kYXIvZXZl
+bnQ/YWN0aW9uPVZJRVcmZWlkPU1IVTFjRE15Tm5ab00yeGxOemt3ZEdGeWJuRnZkREEyZGpJZ2RH
+VnpkREZBYTI5c1lXSXViM0puJnRvaz1NakFqWTIxdmJHeGxhMjl3WmtCbmJXRnBiQzVqYjIwNE5U
+aGhOamN5TUdFd05UWTJZVFpsWW1VNFpEUTVZak0yWm1Fd05EUmtabVZrTlRWa1lqTmwmY3R6PUV1
+cm9wZSUyRlp1cmljaCZobD1lbl9HQiZlcz0wDQoNCkludml0YXRpb24gZnJvbSBHb29nbGUgQ2Fs
+ZW5kYXI6IGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vY2FsZW5kYXIvDQoNCllvdSBhcmUgcmVjZWl2
+aW5nIHRoaXMgY291cnRlc3kgZW1haWwgYXQgdGhlIGFjY291bnQgdGVzdDFAa29sYWIub3JnICAN
+CmJlY2F1c2UgeW91IGFyZSBhbiBhdHRlbmRlZSBvZiB0aGlzIGV2ZW50Lg0KDQpUbyBzdG9wIHJl
+Y2VpdmluZyBmdXR1cmUgdXBkYXRlcyBmb3IgdGhpcyBldmVudCwgZGVjbGluZSB0aGlzIGV2ZW50
+LiAgDQpBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNpZ24gdXAgZm9yIGEgR29vZ2xlIEFjY291bnQg
+YXQgIA0KaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci8gYW5kIGNvbnRyb2wgeW91ciBu
+b3RpZmljYXRpb24gc2V0dGluZ3MgZm9yICANCnlvdXIgZW50aXJlIGNhbGVuZGFyLg0KDQpGb3J3
+YXJkaW5nIHRoaXMgaW52aXRhdGlvbiBjb3VsZCBhbGxvdyBhbnkgcmVjaXBpZW50IHRvIHNlbmQg
+YSByZXNwb25zZSB0byAgDQp0aGUgb3JnYW5pc2VyIGFuZCBiZSBhZGRlZCB0byB0aGUgZ3Vlc3Qg
+bGlzdCwgaW52aXRlIG90aGVycyByZWdhcmRsZXNzIG9mICANCnRoZWlyIG93biBpbnZpdGF0aW9u
+IHN0YXR1cyBvciB0byBtb2RpZnkgeW91ciBSU1ZQLiBMZWFybiBtb3JlIGF0ICANCmh0dHBzOi8v
+c3VwcG9ydC5nb29nbGUuY29tL2NhbGVuZGFyL2Fuc3dlci8zNzEzNSNmb3J3YXJkaW5nDQo=
+--0000000000000d114c05904d4865
+Content-Type: text/html; charset="UTF-8"
+Content-Transfer-Encoding: quoted-printable
+
+<span itemscope itemtype=3D"http://schema.org/InformAction"><span style=3D"=
+display:none" itemprop=3D"about" itemscope itemtype=3D"http://schema.org/Pe=
+rson"><meta itemprop=3D"description" content=3D"Invitation from pading doe@=
+gmail.com"/></span><span itemprop=3D"object" itemscope itemtype=3D"http://s=
+chema.org/Event"><div style=3D""><table cellspacing=3D"0" cellpadding=3D"8"=
+ border=3D"0" summary=3D"" style=3D"width:100%;font-family:Arial,Sans-serif=
+;border:1px Solid #ccc;border-width:1px 2px 2px 1px;background-color:#fff;"=
+><tr><td><meta itemprop=3D"eventStatus" content=3D"http://schema.org/EventS=
+cheduled"/><h4 style=3D"padding:6px 0;margin:0 0 4px 0;font-family:Arial,Sa=
+ns-serif;font-size:13px;line-height:1.4;border:1px Solid #fff;background:#f=
+ff;color:#090;font-weight:normal"><strong>You have been invited to the foll=
+owing event.</strong></h4><div style=3D"padding:2px"><span itemprop=3D"publ=
+isher" itemscope itemtype=3D"http://schema.org/Organization"><meta itemprop=
+=3D"name" content=3D"Google Calendar"/></span><meta itemprop=3D"eventId/goo=
+gleCalendar" content=3D"0u5p326vh3le790tarnqot06v2"/><div style=3D"float:ri=
+ght;font-weight:bold;font-size:13px"> <a href=3D"https://www.google.com/cal=
+endar/event?action=3DVIEW&amp;eid=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGV=
+zdDFAa29sYWIub3Jn&amp;tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY=
+2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&amp;ctz=3DEurope%2FZurich&amp;hl=3Den=
+_GB&amp;es=3D0" style=3D"color:#20c;white-space:nowrap" itemprop=3D"url">mo=
+re details &raquo;</a><br></div><h3 style=3D"padding:0 0 6px 0;margin:0;fon=
+t-family:Arial,Sans-serif;font-size:16px;font-weight:bold;color:#222"><span=
+ itemprop=3D"name">test1</span></h3><table cellpadding=3D"0" cellspacing=3D=
+"0" border=3D"0" summary=3D"Event details"><tr><td style=3D"padding:0 1em 1=
+0px 0;font-family:Arial,Sans-serif;font-size:13px;color:#888;white-space:no=
+wrap;width:90px" valign=3D"top"><div><i style=3D"font-style:normal">When</i=
+></div></td><td style=3D"padding-bottom:10px;font-family:Arial,Sans-serif;f=
+ont-size:13px;color:#222" valign=3D"top"><div style=3D"text-indent:-1px"><t=
+ime itemprop=3D"startDate" datetime=3D"20190817T130000Z"></time><time itemp=
+rop=3D"endDate" datetime=3D"20190817T140000Z"></time>Sat 17 Aug 2019 15:00 =
+=E2=80=93 16:00 <span style=3D"color:#888">Central European Time - Zurich</=
+span></div></td></tr><tr><td style=3D"padding:0 1em 10px 0;font-family:Aria=
+l,Sans-serif;font-size:13px;color:#888;white-space:nowrap;width:90px" valig=
+n=3D"top"><div><i style=3D"font-style:normal">Calendar</i></div></td><td st=
+yle=3D"padding-bottom:10px;font-family:Arial,Sans-serif;font-size:13px;colo=
+r:#222" valign=3D"top"><div style=3D"text-indent:-1px">test1@kolab.org</div=
+></td></tr><tr><td style=3D"padding:0 1em 10px 0;font-family:Arial,Sans-ser=
+if;font-size:13px;color:#888;white-space:nowrap;width:90px" valign=3D"top">=
+<div><i style=3D"font-style:normal">Who</i></div></td><td style=3D"padding-=
+bottom:10px;font-family:Arial,Sans-serif;font-size:13px;color:#222" valign=
+=3D"top"><table cellspacing=3D"0" cellpadding=3D"0"><tr><td style=3D"paddin=
+g-right:10px;font-family:Arial,Sans-serif;font-size:13px;color:#222;width:1=
+0px"><div style=3D"text-indent:-1px"><span style=3D"font-family:Courier New=
+,monospace">&#x2022;</span></div></td><td style=3D"padding-right:10px;font-=
+family:Arial,Sans-serif;font-size:13px;color:#222"><div style=3D"text-inden=
+t:-1px"><div><div style=3D"margin:0 0 0.3em 0"><span itemprop=3D"attendee" =
+itemscope itemtype=3D"http://schema.org/Person"><span itemprop=3D"name" cla=
+ss=3D"notranslate">doepadinng@gmail.com</span><meta itemprop=3D"email" cont=
+ent=3D"doepadding@gmail.com"/></span><span itemprop=3D"organizer" itemscope=
+ itemtype=3D"http://schema.org/Person"><meta itemprop=3D"name" content=3D"c=
+doe@gmail.com"/><meta itemprop=3D"email" content=3D"doepadddddddding@gmail.=
+com"/></span><span style=3D"font-size:11px;color:#888">- organiser</span></=
+div></div></div></td></tr><tr><td style=3D"padding-right:10px;font-family:A=
+rial,Sans-serif;font-size:13px;color:#222;width:10px"><div style=3D"text-in=
+dent:-1px"><span style=3D"font-family:Courier New,monospace">&#x2022;</span=
+></div></td><td style=3D"padding-right:10px;font-family:Arial,Sans-serif;fo=
+nt-size:13px;color:#222"><div style=3D"text-indent:-1px"><div><div style=3D=
+"margin:0 0 0.3em 0"><span itemprop=3D"attendee" itemscope itemtype=3D"http=
+://schema.org/Person"><span itemprop=3D"name" class=3D"notranslate">test1@k=
+olab.org</span><meta itemprop=3D"email" content=3D"test1@kolab.org"/></span=
+></div></div></div></td></tr></table></td></tr></table></div><p style=3D"co=
+lor:#222;font-size:13px;margin:0"><span style=3D"color:#888">Going (test1@k=
+olab.org)?&nbsp;&nbsp;&nbsp;</span><wbr><strong><span itemprop=3D"potential=
+action" itemscope itemtype=3D"http://schema.org/RsvpAction"><meta itemprop=
+=3D"attendance" content=3D"http://schema.org/RsvpAttendance/Yes"/><span ite=
+mprop=3D"handler" itemscope itemtype=3D"http://schema.org/HttpActionHandler=
+"><link itemprop=3D"method" href=3D"http://schema.org/HttpRequestMethod/GET=
+"/><a href=3D"https://www.google.com/calendar/event?action=3DRESPOND&amp;ei=
+d=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&amp;rst=3D1&am=
+p;tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY2YTZlYmU4ZDQ5YjM2ZmE=
+wNDRkZmVkNTVkYjNl&amp;ctz=3DEurope%2FZurich&amp;hl=3Den_GB&amp;es=3D0" styl=
+e=3D"color:#20c;white-space:nowrap" itemprop=3D"url">Yes</a></span></span><=
+span style=3D"margin:0 0.4em;font-weight:normal"> - </span><span itemprop=
+=3D"potentialaction" itemscope itemtype=3D"http://schema.org/RsvpAction"><m=
+eta itemprop=3D"attendance" content=3D"http://schema.org/RsvpAttendance/May=
+be"/><span itemprop=3D"handler" itemscope itemtype=3D"http://schema.org/Htt=
+pActionHandler"><link itemprop=3D"method" href=3D"http://schema.org/HttpReq=
+uestMethod/GET"/><a href=3D"https://www.google.com/calendar/event?action=3D=
+RESPOND&amp;eid=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&=
+amp;rst=3D3&amp;tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY2YTZlY=
+mU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&amp;ctz=3DEurope%2FZurich&amp;hl=3Den_GB&am=
+p;es=3D0" style=3D"color:#20c;white-space:nowrap" itemprop=3D"url">Maybe</a=
+></span></span><span style=3D"margin:0 0.4em;font-weight:normal"> - </span>=
+<span itemprop=3D"potentialaction" itemscope itemtype=3D"http://schema.org/=
+RsvpAction"><meta itemprop=3D"attendance" content=3D"http://schema.org/Rsvp=
+Attendance/No"/><span itemprop=3D"handler" itemscope itemtype=3D"http://sch=
+ema.org/HttpActionHandler"><link itemprop=3D"method" href=3D"http://schema.=
+org/HttpRequestMethod/GET"/><a href=3D"https://www.google.com/calendar/even=
+t?action=3DRESPOND&amp;eid=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa2=
+9sYWIub3Jn&amp;rst=3D2&amp;tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMG=
+EwNTY2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&amp;ctz=3DEurope%2FZurich&amp;hl=
+=3Den_GB&amp;es=3D0" style=3D"color:#20c;white-space:nowrap" itemprop=3D"ur=
+l">No</a></span></span></strong>&nbsp;&nbsp;&nbsp;&nbsp;<wbr><a href=3D"htt=
+ps://www.google.com/calendar/event?action=3DVIEW&amp;eid=3DMHU1cDMyNnZoM2xl=
+NzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&amp;tok=3DMjAjY21vbGxla29wZkBnbWFp=
+bC5jb204NThhNjcyMGEwNTY2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&amp;ctz=3DEuro=
+pe%2FZurich&amp;hl=3Den_GB&amp;es=3D0" style=3D"color:#20c;white-space:nowr=
+ap" itemprop=3D"url">more options &raquo;</a></p></td></tr><tr><td style=3D=
+"background-color:#f6f6f6;color:#888;border-top:1px Solid #ccc;font-family:=
+Arial,Sans-serif;font-size:11px"><p>Invitation from <a href=3D"https://www.=
+google.com/calendar/" target=3D"_blank" style=3D"">Google Calendar</a></p><=
+p>You are receiving this courtesy email at the account test1@kolab.org beca=
+use you are an attendee of this event.</p><p>To stop receiving future updat=
+es for this event, decline this event. Alternatively, you can sign up for a=
+ Google Account at https://www.google.com/calendar/ and control your notifi=
+cation settings for your entire calendar.</p><p>Forwarding this invitation =
+could allow any recipient to send a response to the organiser and be added =
+to the guest list, invite others regardless of their own invitation status =
+or to modify your RSVP. <a href=3D"https://support.google.com/calendar/answ=
+er/37135#forwarding">Learn more</a>.</p></td></tr></table></div></span></sp=
+an>
+--0000000000000d114c05904d4865
+Content-Type: text/calendar; charset="UTF-8"; method=REQUEST
+Content-Transfer-Encoding: 7bit
+
+BEGIN:VCALENDAR
+PRODID:-//Google Inc//Google Calendar 70.9054//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:REQUEST
+BEGIN:VEVENT
+DTSTART:20190817T130000Z
+DTEND:20190817T140000Z
+DTSTAMP:20190817T100759Z
+ORGANIZER;CN=doe@gmail.com:mailto:doe@gmail.com
+UID:0u5p326vh3le790tarnqot06v2@google.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE
+ ;CN=doe@gmail.com;X-NUM-GUESTS=0:mailto:doe@gmail.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
+ TRUE;CN=test1@kolab.org;X-NUM-GUESTS=0:mailto:test1@kolab.org
+X-MICROSOFT-CDO-OWNERAPPTID:-750968860
+CREATED:20190817T100754Z
+DESCRIPTION:-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
+ :~:~:~:~:~:~:~:~::~:~::-\nPlease do not edit this section of the descriptio
+ n.\n\nView your event at https://www.google.com/calendar/event?action=VIEW&
+ eid=MHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&tok=MjAjY21vbG
+ xla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&
+ ctz=Europe%2FZurich&hl=en_GB&es=1.\n-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
+ :~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~::~:~::-
+LAST-MODIFIED:20190817T100754Z
+LOCATION:
+SEQUENCE:0
+STATUS:CONFIRMED
+SUMMARY:test1
+TRANSP:OPAQUE
+END:VEVENT
+END:VCALENDAR
+
+--0000000000000d114c05904d4865--
+--0000000000000d114f05904d4867
+Content-Type: application/ics; name="invite.ics"
+Content-Disposition: attachment; filename="invite.ics"
+Content-Transfer-Encoding: base64
+
+QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFyIDcw
+LjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6UkVRVUVT
+VA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMTkwODE3VDEzMDAwMFoNCkRURU5EOjIwMTkwODE3
+VDE0MDAwMFoNCkRUU1RBTVA6MjAxOTA4MTdUMTAwNzU5Wg0KT1JHQU5JWkVSO0NOPWNtb2xsZWtv
+cGZAZ21haWwuY29tOm1haWx0bzpjbW9sbGVrb3BmQGdtYWlsLmNvbQ0KVUlEOjB1NXAzMjZ2aDNs
+ZTc5MHRhcm5xb3QwNnYyQGdvb2dsZS5jb20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JP
+TEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9VFJVRQ0KIDtDTj1jbW9s
+bGVrb3BmQGdtYWlsLmNvbTtYLU5VTS1HVUVTVFM9MDptYWlsdG86Y21vbGxla29wZkBnbWFpbC5j
+b20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JPTEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRT
+VEFUPU5FRURTLUFDVElPTjtSU1ZQPQ0KIFRSVUU7Q049dGVzdDFAa29sYWIub3JnO1gtTlVNLUdV
+RVNUUz0wOm1haWx0bzp0ZXN0MUBrb2xhYi5vcmcNClgtTUlDUk9TT0ZULUNETy1PV05FUkFQUFRJ
+RDotNzUwOTY4ODYwDQpDUkVBVEVEOjIwMTkwODE3VDEwMDc1NFoNCkRFU0NSSVBUSU9OOi06On46
+fjo6fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46
+fg0KIDp+On46fjp+On46fjp+On46On46fjo6LVxuUGxlYXNlIGRvIG5vdCBlZGl0IHRoaXMgc2Vj
+dGlvbiBvZiB0aGUgZGVzY3JpcHRpbw0KIG4uXG5cblZpZXcgeW91ciBldmVudCBhdCBodHRwczov
+L3d3dy5nb29nbGUuY29tL2NhbGVuZGFyL2V2ZW50P2FjdGlvbj1WSUVXJg0KIGVpZD1NSFUxY0RN
+eU5uWm9NMnhsTnprd2RHRnlibkZ2ZERBMmRqSWdkR1Z6ZERGQWEyOXNZV0l1YjNKbiZ0b2s9TWpB
+alkyMXZiRw0KIHhsYTI5d1prQm5iV0ZwYkM1amIyMDROVGhoTmpjeU1HRXdOVFkyWVRabFltVTRa
+RFE1WWpNMlptRXdORFJrWm1Wa05UVmtZak5sJg0KIGN0ej1FdXJvcGUlMkZadXJpY2gmaGw9ZW5f
+R0ImZXM9MS5cbi06On46fjo6fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fg0KIDp+On46
+fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46On46fjo6LQ0KTEFTVC1NT0RJRklF
+RDoyMDE5MDgxN1QxMDA3NTRaDQpMT0NBVElPTjoNClNFUVVFTkNFOjANClNUQVRVUzpDT05GSVJN
+RUQNClNVTU1BUlk6dGVzdDENClRSQU5TUDpPUEFRVUUNCkVORDpWRVZFTlQNCkVORDpWQ0FMRU5E
+QVINCg==
+--0000000000000d114f05904d4867--
diff --git a/src/core/templatetestdata/headeronly/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/headeronly/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..73c4d2d
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-encrypted-attachment.mbox.html b/src/core/templatetestdata/headeronly/openpgp-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..d5e4550
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-encrypted-attachment.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-encrypted-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/headeronly/openpgp-encrypted-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..73c4d2d
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-encrypted-non-encrypted-attachment.mbox.html
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-encrypted-partially-signed-attachments.mbox.html b/src/core/templatetestdata/headeronly/openpgp-encrypted-partially-signed-attachments.mbox.html
new file mode 100644
index 0000000..ebad735
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-encrypted-partially-signed-attachments.mbox.html
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the main body.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">This is an unsigned attachment.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/headeronly/openpgp-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..4cdeaa6
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-encrypted-two-attachments.mbox.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body part</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-signed-apple.mbox.html b/src/core/templatetestdata/headeronly/openpgp-signed-apple.mbox.html
new file mode 100644
index 0000000..330b02a
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-signed-apple.mbox.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">
+ <div class="">pre attachment</div>
+ </div>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-signed-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/headeronly/openpgp-signed-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..83b7a66
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-signed-encrypted-two-attachments.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-signed-mailinglist+additional-children.mbox.html b/src/core/templatetestdata/headeronly/openpgp-signed-mailinglist+additional-children.mbox.html
new file mode 100644
index 0000000..25b1ad0
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-signed-mailinglist+additional-children.mbox.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2?place=body"><img align="center" height="48" width="48" src="file:application-pgp-signature.svg" border="0" style="max-width: 100%" alt=""/>signature.asc</a>
+ </div>
+ <div>This is a digitally signed message part.</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-signed-no-protocol.mbox.html b/src/core/templatetestdata/headeronly/openpgp-signed-no-protocol.mbox.html
new file mode 100644
index 0000000..bdac52b
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-signed-no-protocol.mbox.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/openpgp-signed-two-attachments.mbox.html b/src/core/templatetestdata/headeronly/openpgp-signed-two-attachments.mbox.html
new file mode 100644
index 0000000..027097f
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/openpgp-signed-two-attachments.mbox.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/headeronly/smime-signed-apple.mbox.html b/src/core/templatetestdata/headeronly/smime-signed-apple.mbox.html
new file mode 100644
index 0000000..9554bb3
--- /dev/null
+++ b/src/core/templatetestdata/headeronly/smime-signed-apple.mbox.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signErr">
+ <tr class="signErrH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Invalid signature.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signErrB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">Olá Konqui,<div class="">Here is the pdf you asked for!</div><div class="">Cheers,</div><div class="">Quaack</div></div>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <blockquote type="cite" class="">
+ <div class="">On 20 Jan 2017, at 10:35, Konqui &lt;<a href="mailto:Konqui@kdab.com">Konqui</a></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signErrH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/encapsulated-with-attachment.mbox.html b/src/core/templatetestdata/hidden/encapsulated-with-attachment.mbox.html
new file mode 100644
index 0000000..42f5ecd
--- /dev/null
+++ b/src/core/templatetestdata/hidden/encapsulated-with-attachment.mbox.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">This is the first encapsulating message.</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:2.1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att2.1"/>
+ <div id="attachmentDiv2.1">
+ <a name="att2.1.1"/>
+ <div id="attachmentDiv2.1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the second encapsulated message.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/hidden/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..73c4d2d
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-encrypted-attachment.mbox.html b/src/core/templatetestdata/hidden/openpgp-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..d5e4550
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-encrypted-attachment.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-encrypted-noData.mbox.html b/src/core/templatetestdata/hidden/openpgp-encrypted-noData.mbox.html
new file mode 100644
index 0000000..166812f
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-encrypted-noData.mbox.html
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv"/>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-encrypted-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/hidden/openpgp-encrypted-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..73c4d2d
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-encrypted-non-encrypted-attachment.mbox.html
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-encrypted-partially-signed-attachments.mbox.html b/src/core/templatetestdata/hidden/openpgp-encrypted-partially-signed-attachments.mbox.html
new file mode 100644
index 0000000..ebad735
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-encrypted-partially-signed-attachments.mbox.html
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the main body.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">This is an unsigned attachment.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/hidden/openpgp-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..4cdeaa6
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-encrypted-two-attachments.mbox.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body part</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-signed-apple.mbox.html b/src/core/templatetestdata/hidden/openpgp-signed-apple.mbox.html
new file mode 100644
index 0000000..330b02a
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-signed-apple.mbox.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">
+ <div class="">pre attachment</div>
+ </div>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-signed-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/hidden/openpgp-signed-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..83b7a66
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-signed-encrypted-two-attachments.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-signed-mailinglist+additional-children.mbox.html b/src/core/templatetestdata/hidden/openpgp-signed-mailinglist+additional-children.mbox.html
new file mode 100644
index 0000000..1f0da38
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-signed-mailinglist+additional-children.mbox.html
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-signed-no-protocol.mbox.html b/src/core/templatetestdata/hidden/openpgp-signed-no-protocol.mbox.html
new file mode 100644
index 0000000..bdac52b
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-signed-no-protocol.mbox.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/openpgp-signed-two-attachments.mbox.html b/src/core/templatetestdata/hidden/openpgp-signed-two-attachments.mbox.html
new file mode 100644
index 0000000..027097f
--- /dev/null
+++ b/src/core/templatetestdata/hidden/openpgp-signed-two-attachments.mbox.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/hidden/smime-signed-apple.mbox.html b/src/core/templatetestdata/hidden/smime-signed-apple.mbox.html
new file mode 100644
index 0000000..9554bb3
--- /dev/null
+++ b/src/core/templatetestdata/hidden/smime-signed-apple.mbox.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signErr">
+ <tr class="signErrH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Invalid signature.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signErrB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">Olá Konqui,<div class="">Here is the pdf you asked for!</div><div class="">Cheers,</div><div class="">Quaack</div></div>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <blockquote type="cite" class="">
+ <div class="">On 20 Jan 2017, at 10:35, Konqui &lt;<a href="mailto:Konqui@kdab.com">Konqui</a></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signErrH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/html-with-signature.mbox b/src/core/templatetestdata/html-with-signature.mbox
new file mode 100644
index 0000000..5fa7d96
--- /dev/null
+++ b/src/core/templatetestdata/html-with-signature.mbox
@@ -0,0 +1,26 @@
+From foo@example.com Thu, 26 May 2011 01:16:54 +0100
+From: Thomas McGuire <foo@example.com>
+Subject: HTML test
+Date: Thu, 26 May 2011 01:16:54 +0100
+Message-ID: <1501334.pROlBb7MZF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/html; charset="windows-1252"
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
+=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
+eva,sans-serif'>
+<div class=3D"pre" style=3D"margin: 0; padding: 0; font-family: monospace">=
+This is some <strong>formatted</strong> funky text.<br /><br /><span class=
+=3D"sig">--&nbsp;<br />This is a signature.<br />Senior Software Engineer<br=
+ /><br />Kolab Systems AG<br />Z&uuml;rich, Switzerland<br /><br />e: <a hr=
+ef=3D"mailto:mollekopf@kolabsystems.com">mollekopf@kolabsystems.com</a><br =
+/>w: <a href=3D"https://kolabsystems.com" target=3D"_blank" rel=3D"noopener=
+ noreferrer">https://kolabsystems.com</a><br /><br />pgp: EA657400 Christia=
+n Mollekopf</span></div>
+</body></html>
diff --git a/src/core/templatetestdata/html.mbox b/src/core/templatetestdata/html.mbox
new file mode 100644
index 0000000..bf5c685
--- /dev/null
+++ b/src/core/templatetestdata/html.mbox
@@ -0,0 +1,15 @@
+From foo@example.com Thu, 26 May 2011 01:16:54 +0100
+From: Thomas McGuire <foo@example.com>
+Subject: HTML test
+Date: Thu, 26 May 2011 01:16:54 +0100
+Message-ID: <1501334.pROlBb7MZF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/html; charset="windows-1252"
+
+<html><body><p><span>HTML</span> text</p></body></html>
\ No newline at end of file
diff --git a/src/core/templatetestdata/html.mbox.html b/src/core/templatetestdata/html.mbox.html
new file mode 100644
index 0000000..2fe886f
--- /dev/null
+++ b/src/core/templatetestdata/html.mbox.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/html.mbox.tree b/src/core/templatetestdata/html.mbox.tree
new file mode 100644
index 0000000..0de0728
--- /dev/null
+++ b/src/core/templatetestdata/html.mbox.tree
@@ -0,0 +1,2 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::AlternativeMessagePart
diff --git a/src/core/templatetestdata/htmlonly.mbox b/src/core/templatetestdata/htmlonly.mbox
new file mode 100644
index 0000000..e45b1c4
--- /dev/null
+++ b/src/core/templatetestdata/htmlonly.mbox
@@ -0,0 +1,21 @@
+From foo@example.com Thu, 26 May 2011 01:16:54 +0100
+From: Thomas McGuire <foo@example.com>
+Subject: HTML test
+Date: Thu, 26 May 2011 01:16:54 +0100
+Message-ID: <1501334.pROlBb7MZF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Type: text/html
+Content-Transfer-Encoding: 7Bit
+
+<html>
+<head>
+</head>
+<body>
+<b>SOME</b> HTML text.
+</body>
+</html>
diff --git a/src/core/templatetestdata/htmlonly.mbox.html b/src/core/templatetestdata/htmlonly.mbox.html
new file mode 100644
index 0000000..1143f2c
--- /dev/null
+++ b/src/core/templatetestdata/htmlonly.mbox.html
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div style="position: relative"><b>SOME</b> HTML text.</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/htmlonly.mbox.tree b/src/core/templatetestdata/htmlonly.mbox.tree
new file mode 100644
index 0000000..a4c3191
--- /dev/null
+++ b/src/core/templatetestdata/htmlonly.mbox.tree
@@ -0,0 +1,2 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::HtmlMessagePart
diff --git a/src/core/templatetestdata/htmlonlyexternal.mbox b/src/core/templatetestdata/htmlonlyexternal.mbox
new file mode 100644
index 0000000..4eb3e2c
--- /dev/null
+++ b/src/core/templatetestdata/htmlonlyexternal.mbox
@@ -0,0 +1,21 @@
+From foo@example.com Thu, 26 May 2011 01:16:54 +0100
+From: Thomas McGuire <foo@example.com>
+Subject: HTML test
+Date: Thu, 26 May 2011 01:16:54 +0100
+Message-ID: <1501334.pROlBb7MZF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Type: text/html
+Content-Transfer-Encoding: 7Bit
+
+<html>
+<head>
+</head>
+<body>
+<b>SOME</b> HTML text. <img src="http://example.org/test.img" >
+</body>
+</html>
diff --git a/src/core/templatetestdata/iconic/openpgp-encrypted-partially-signed-attachments.mbox.html b/src/core/templatetestdata/iconic/openpgp-encrypted-partially-signed-attachments.mbox.html
new file mode 100644
index 0000000..b6f734c
--- /dev/null
+++ b/src/core/templatetestdata/iconic/openpgp-encrypted-partially-signed-attachments.mbox.html
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the main body.</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:1:e0:1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment1.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">This is an unsigned attachment.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/iconic/openpgp-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/iconic/openpgp-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..7f0b7ab
--- /dev/null
+++ b/src/core/templatetestdata/iconic/openpgp-encrypted-two-attachments.mbox.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body part</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:e0:2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment1.txt</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att3"/>
+ <div id="attachmentDiv3">
+ <hr/>
+ <div>
+ <a href="attachment:e0:3?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment2.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/iconic/openpgp-signed-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/iconic/openpgp-signed-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..8d6b581
--- /dev/null
+++ b/src/core/templatetestdata/iconic/openpgp-signed-encrypted-two-attachments.mbox.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:e0:1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment1.txt</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <hr/>
+ <div>
+ <a href="attachment:e0:1.3?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment2.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/iconic/openpgp-signed-two-attachments.mbox.html b/src/core/templatetestdata/iconic/openpgp-signed-two-attachments.mbox.html
new file mode 100644
index 0000000..73dbc5f
--- /dev/null
+++ b/src/core/templatetestdata/iconic/openpgp-signed-two-attachments.mbox.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment1.txt</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <hr/>
+ <div>
+ <a href="attachment:1.3?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>attachment2.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlined/encapsulated-with-attachment.mbox.html b/src/core/templatetestdata/inlined/encapsulated-with-attachment.mbox.html
new file mode 100644
index 0000000..26d3dd6
--- /dev/null
+++ b/src/core/templatetestdata/inlined/encapsulated-with-attachment.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">This is the first encapsulating message.</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:2.1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att2.1"/>
+ <div id="attachmentDiv2.1">
+ <a name="att2.1.1"/>
+ <div id="attachmentDiv2.1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the second encapsulated message.</div>
+ </div>
+ </div>
+ <a name="att2.1.2"/>
+ <div id="attachmentDiv2.1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">This is an attachment.</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlined/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/inlined/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..49e503f
--- /dev/null
+++ b/src/core/templatetestdata/inlined/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">file.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">some plain ascii text...</div>
+ <br/>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:2?place=body">
+ <img align="center" src="file:image.png" border="0" style="max-width: 100%"/>
+ </a>
+ </div>
+ <div>
+ <a href="attachment:2?place=body">image.png</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlined/openpgp-encrypted-attachment.mbox.html b/src/core/templatetestdata/inlined/openpgp-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..6789749
--- /dev/null
+++ b/src/core/templatetestdata/inlined/openpgp-encrypted-attachment.mbox.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">file.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">some plain ascii text...</div>
+ <br/>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlined/openpgp-encrypted-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/inlined/openpgp-encrypted-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..6091ee5
--- /dev/null
+++ b/src/core/templatetestdata/inlined/openpgp-encrypted-non-encrypted-attachment.mbox.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:2?place=body">
+ <img align="center" src="file:image.png" border="0" style="max-width: 100%"/>
+ </a>
+ </div>
+ <div>
+ <a href="attachment:2?place=body">image.png</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlined/openpgp-signed-apple.mbox.html b/src/core/templatetestdata/inlined/openpgp-signed-apple.mbox.html
new file mode 100644
index 0000000..092d5e1
--- /dev/null
+++ b/src/core/templatetestdata/inlined/openpgp-signed-apple.mbox.html
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">
+ <div class="">pre attachment</div>
+ </div>
+ </div>
+ <a name="att1.2.2"/>
+ <div id="attachmentDiv1.2.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2.2?place=body">
+ <img align="center" src="file:image.png" border="0" style="max-width: 100%"/>
+ </a>
+ </div>
+ <div>
+ <a href="attachment:1.2.2?place=body">image.png</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlined/openpgp-signed-mailinglist+additional-children.mbox.html b/src/core/templatetestdata/inlined/openpgp-signed-mailinglist+additional-children.mbox.html
new file mode 100644
index 0000000..cc49cbc
--- /dev/null
+++ b/src/core/templatetestdata/inlined/openpgp-signed-mailinglist+additional-children.mbox.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2?place=body"><img align="center" height="48" width="48" src="file:application-pgp-signature.svg" border="0" style="max-width: 100%" alt=""/>signature.asc</a>
+ </div>
+ <div>This is a digitally signed message part.</div>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">broken.attachment</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">Let's break a signed message - This messageblock should not be here :D</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlined/smime-signed-apple.mbox.html b/src/core/templatetestdata/inlined/smime-signed-apple.mbox.html
new file mode 100644
index 0000000..d3f3eeb
--- /dev/null
+++ b/src/core/templatetestdata/inlined/smime-signed-apple.mbox.html
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signErr">
+ <tr class="signErrH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Invalid signature.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signErrB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">Olá Konqui,<div class="">Here is the pdf you asked for!</div><div class="">Cheers,</div><div class="">Quaack</div></div>
+ </div>
+ <a name="att1.2.2"/>
+ <div id="attachmentDiv1.2.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2.2?place=body">
+ <img align="center" src="file:image.png" border="0" style="max-width: 100%"/>
+ </a>
+ </div>
+ <div>
+ <a href="attachment:1.2.2?place=body">image.png</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <blockquote type="cite" class="">
+ <div class="">On 20 Jan 2017, at 10:35, Konqui &lt;<a href="mailto:Konqui@kdab.com">Konqui</a></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signErrH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox b/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox
new file mode 100644
index 0000000..c05a7e6
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox
@@ -0,0 +1,33 @@
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf/a3aNTLpQBfcUr+4AKsZQLj4h6z7e7a5AaCW8AG0wrbxN
+kBYB7E5jdZh45DX/99gvoZslthWryUCX2kKZ3LtIllxKVjqNuK5hSt+SAuKkwiMR
+Xcbf1KFKENKupgGSO9B2NJRbjoExdJ+fC3mGXnO3dT7xJJAo3oLE8Nivu+Bj1peY
+E1wCf+vcTwVHFrA7SV8eMRb9Z9wBXmU8Q8e9ekJ7ZsRX3tMeBs6jvscVvfMf6DYY
+N14snZBZuGNKT9a3DPny7IC1S0lHcaam34ogWwMi3FxPGJt/Lg52kARlkF5TDhcP
+N6H0EB/iqDRjOOUoEVm8um5XOSR1FpEiAdD0DON3y9JPATnrYq7sgYZz3BVImYY+
+N/jV8fEiN0a34pcOq8NQedMuOsJHNBS5MtbQH/kJLq0MXBpXekGlHo4MKw0trISc
+Rw3pW6/BFfhPJLni29g9tw==
+=fRFW
+-----END PGP MESSAGE-----
+
+_______________________________________________
+test mailing list
+test@lists.kde.org
+http://kde.org
diff --git a/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox.html b/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox.html
new file mode 100644
index 0000000..8af2b1c
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">some random text</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">test mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:test@lists.kde.org">test@lists.kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="http://kde.org">http://kde.org</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox.tree b/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox.tree
new file mode 100644
index 0000000..018f5c3
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted-appendix.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/inlinepgpencrypted-error.mbox b/src/core/templatetestdata/inlinepgpencrypted-error.mbox
new file mode 100644
index 0000000..529b4d3
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted-error.mbox
@@ -0,0 +1,55 @@
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted - no seckey
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+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
+3Qu241eOBdb6
+=J3lb
+-----END PGP MESSAGE-----
diff --git a/src/core/templatetestdata/inlinepgpencrypted-error.mbox.html b/src/core/templatetestdata/inlinepgpencrypted-error.mbox.html
new file mode 100644
index 0000000..a4427e0
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted-error.mbox.html
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message (decryption not possible)<br/>Reason: Crypto plug-in "OpenPGP" could not decrypt the data.<br/>Error: Decryption failed</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="font-size:x-large; text-align:center; padding:20pt;">No secret key found to encrypt the message. It is encrypted for following keys:<br/><a href="kmail:showCertificate#gpg ### OpenPGP ### 553D4262DA4BADF2">0x553D4262DA4BADF2</a><br/><a href="kmail:showCertificate#gpg ### OpenPGP ### F6E6A3D126C630E0">0xF6E6A3D126C630E0</a></div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlinepgpencrypted-error.mbox.tree b/src/core/templatetestdata/inlinepgpencrypted-error.mbox.tree
new file mode 100644
index 0000000..6680b8b
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted-error.mbox.tree
@@ -0,0 +1,3 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::EncryptedMessagePart
diff --git a/src/core/templatetestdata/inlinepgpencrypted.mbox b/src/core/templatetestdata/inlinepgpencrypted.mbox
new file mode 100644
index 0000000..b581602
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted.mbox
@@ -0,0 +1,29 @@
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf/a3aNTLpQBfcUr+4AKsZQLj4h6z7e7a5AaCW8AG0wrbxN
+kBYB7E5jdZh45DX/99gvoZslthWryUCX2kKZ3LtIllxKVjqNuK5hSt+SAuKkwiMR
+Xcbf1KFKENKupgGSO9B2NJRbjoExdJ+fC3mGXnO3dT7xJJAo3oLE8Nivu+Bj1peY
+E1wCf+vcTwVHFrA7SV8eMRb9Z9wBXmU8Q8e9ekJ7ZsRX3tMeBs6jvscVvfMf6DYY
+N14snZBZuGNKT9a3DPny7IC1S0lHcaam34ogWwMi3FxPGJt/Lg52kARlkF5TDhcP
+N6H0EB/iqDRjOOUoEVm8um5XOSR1FpEiAdD0DON3y9JPATnrYq7sgYZz3BVImYY+
+N/jV8fEiN0a34pcOq8NQedMuOsJHNBS5MtbQH/kJLq0MXBpXekGlHo4MKw0trISc
+Rw3pW6/BFfhPJLni29g9tw==
+=fRFW
+-----END PGP MESSAGE-----
+
diff --git a/src/core/templatetestdata/inlinepgpencrypted.mbox.html b/src/core/templatetestdata/inlinepgpencrypted.mbox.html
new file mode 100644
index 0000000..1f695bd
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted.mbox.html
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">some random text</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlinepgpencrypted.mbox.inProgress.html b/src/core/templatetestdata/inlinepgpencrypted.mbox.inProgress.html
new file mode 100644
index 0000000..e5eb55d
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted.mbox.inProgress.html
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Please wait while the message is being decrypted...</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="font-size:x-large; text-align:center; padding:20pt;"/>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/inlinepgpencrypted.mbox.tree b/src/core/templatetestdata/inlinepgpencrypted.mbox.tree
new file mode 100644
index 0000000..6680b8b
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpencrypted.mbox.tree
@@ -0,0 +1,3 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::EncryptedMessagePart
diff --git a/src/core/templatetestdata/inlinepgpgencrypted-error.mbox b/src/core/templatetestdata/inlinepgpgencrypted-error.mbox
new file mode 100644
index 0000000..529b4d3
--- /dev/null
+++ b/src/core/templatetestdata/inlinepgpgencrypted-error.mbox
@@ -0,0 +1,55 @@
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted - no seckey
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+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
+3Qu241eOBdb6
+=J3lb
+-----END PGP MESSAGE-----
diff --git a/src/core/templatetestdata/invitation.mbox b/src/core/templatetestdata/invitation.mbox
new file mode 100644
index 0000000..bfce2ff
--- /dev/null
+++ b/src/core/templatetestdata/invitation.mbox
@@ -0,0 +1,82 @@
+Return-Path: <john@doe.ch>
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="=_d141ae2d08ab2e576b4155f7053a7d1f"
+From: john doe <john@doe.ch>
+Date: Fri, 02 Aug 2019 21:02:28 +0200
+Message-ID: <dd32f5c736a700b72d3debd747b9a8c3@mailqueue.ch>
+X-Sender: john@doe.ch
+To: test1@kolab.org
+Subject: You've been invited to "test1234"
+
+--=_d141ae2d08ab2e576b4155f7053a7d1f
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset=UTF-8;
+ format=flowed
+
+*test1234*
+
+When: 2019-08-01 10:00 - 10:30 (Europe/Zurich)
+
+Invitees: john doe <john@doe.ch>,
+ John Doe <doe2@test.ch>,
+ test1@kolab.org
+
+Please find attached an iCalendar file with all the event details which you=
+=20
+can import to your calendar application.
+
+In case your email client doesn't support iTip requests you can use the=20
+following link to either accept or decline this invitation:
+https://kolabnow.com/apps/?_task=3Dcalendar&_action=3Dattend&_t=3D0a896de59=
+2c86b51039f3ff8e127514ab6dbc396.dGVzdDFAa29sYWIub3Jn.d9bc91
+--=_d141ae2d08ab2e576b4155f7053a7d1f
+Content-Transfer-Encoding: 8bit
+Content-Type: text/calendar; charset=UTF-8; method=REQUEST;
+ name=event.ics
+
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Roundcube libcalendaring 1.4-git//Sabre//Sabre VObject 3.5.3//EN
+CALSCALE:GREGORIAN
+METHOD:REQUEST
+BEGIN:VTIMEZONE
+TZID:Europe/Zurich
+BEGIN:STANDARD
+DTSTART:20181028T010000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20190331T010000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20191027T010000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:39946D057115AA1B6A273693CF95D35C-24397012EEE1180F
+DTSTAMP:20190802T190228Z
+CREATED:20190802T190228Z
+LAST-MODIFIED:20190802T190228Z
+DTSTART;TZID=Europe/Zurich:20190801T100000
+DTEND;TZID=Europe/Zurich:20190801T103000
+SUMMARY:test1234
+SEQUENCE:0
+TRANSP:OPAQUE
+ATTENDEE;CN=John Doe;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDI
+ VIDUAL;RSVP=TRUE:mailto:doe2@test.ch
+ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;RSVP=
+ TRUE:mailto:test1@kolab.org
+ORGANIZER;CN=john doe:mailto:john@doe.ch
+END:VEVENT
+END:VCALENDAR
+
+--=_d141ae2d08ab2e576b4155f7053a7d1f--
diff --git a/src/core/templatetestdata/listmessage.mbox b/src/core/templatetestdata/listmessage.mbox
new file mode 100644
index 0000000..aa5de3f
--- /dev/null
+++ b/src/core/templatetestdata/listmessage.mbox
@@ -0,0 +1,15 @@
+Return-Path: <from@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: From <from@example.org>
+Reply-To: List <list@example.org>
+To: List <list@example.org>,
+ "To" <to@example.org>
+Cc: CC <cc1@example.org>
+List-Id: List <list@example.org>
+Sender: List <list@example.org>
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+test
diff --git a/src/core/templatetestdata/mailheader.css b/src/core/templatetestdata/mailheader.css
new file mode 100644
index 0000000..1018195
--- /dev/null
+++ b/src/core/templatetestdata/mailheader.css
@@ -0,0 +1,512 @@
+div.header {
+ margin-bottom: 10pt ! important;
+}
+
+table.textAtm {
+ margin-top: 10pt ! important;
+ margin-bottom: 10pt ! important;
+}
+
+tr.textAtmH,
+tr.textAtmB,
+tr.rfc822B {
+ font-weight: normal ! important;
+}
+
+tr.signInProgressH,
+tr.rfc822H,
+tr.encrH,
+tr.signOkKeyOkH,
+tr.signOkKeyBadH,
+tr.signWarnH,
+tr.signErrH {
+ font-weight: bold ! important;
+}
+
+tr.textAtmH td,
+tr.textAtmB td {
+ padding: 3px ! important;
+}
+
+table.rfc822 {
+ width: 100% ! important;
+ border: solid 1px black ! important;
+ margin-top: 10pt ! important;
+ margin-bottom: 10pt ! important;
+}
+
+table.textAtm,
+table.encr,
+table.signWarn,
+table.signErr,
+table.signOkKeyBad,
+table.signOkKeyOk,
+table.signInProgress,
+div.fancy.header table {
+ width: 100% ! important;
+ border-width: 0px ! important;
+ line-height: normal;
+}
+
+div.htmlWarn {
+ margin: 0px 5% ! important;
+ padding: 10px ! important;
+ text-align: left ! important;
+ line-height: normal;
+}
+
+div.fancy.header > div {
+ font-weight: bold ! important;
+ padding: 4px ! important;
+ line-height: normal;
+}
+
+div.fancy.header table {
+ padding: 2px ! important;
+ text-align: left ! important;
+ border-collapse: separate ! important;
+}
+
+div.fancy.header table th {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+
+ padding: 0px ! important;
+ white-space: nowrap ! important;
+ border-spacing: 0px ! important;
+ text-align: left ! important;
+ vertical-align: top ! important;
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border: 1px ! important;
+}
+
+div.fancy.header table td {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+
+ padding: 0px ! important;
+ border-spacing: 0px ! important;
+ text-align: left ! important;
+ vertical-align: top ! important;
+ width: 100% ! important;
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border: 1px ! important;
+}
+
+div.fancy.header table a:hover {
+ background-color: transparent ! important;
+}
+
+span.pimsmileytext {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ visibility: hidden;
+}
+
+img.pimsmileyimg {
+}
+
+div.quotelevelmark {
+ position: absolute;
+ margin-left:-10px;
+}
+
+@media screen {
+
+body {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+ color: #1f1c1b ! important;
+ background-color: #ffffff ! important;
+}
+
+a {
+ color: #0057ae ! important;
+ text-decoration: none ! important;
+}
+
+a.white {
+ color: white ! important;
+}
+
+a.black {
+ color: black ! important;
+}
+
+table.textAtm { background-color: #1f1c1b ! important; }
+
+tr.textAtmH {
+ background-color: #ffffff ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.textAtmB {
+ background-color: #ffffff ! important;
+}
+
+table.signInProgress,
+table.rfc822 {
+ background-color: #ffffff ! important;
+}
+
+tr.signInProgressH,
+tr.rfc822H {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+table.encr {
+ background-color: #0069cc ! important;
+}
+
+tr.encrH {
+ background-color: #0080ff ! important;
+ color: #ffffff ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.encrB { background-color: #e0f0ff ! important; }
+
+table.signOkKeyOk {
+ background-color: #33cc33 ! important;
+}
+
+tr.signOkKeyOkH {
+ background-color: #40ff40 ! important;
+ color: #27ae60 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signOkKeyOkB { background-color: #e8ffe8 ! important; }
+
+table.signOkKeyBad {
+ background-color: #cccc33 ! important;
+}
+
+tr.signOkKeyBadH {
+ background-color: #ffff40 ! important;
+ color: #f67400 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signOkKeyBadB { background-color: #ffffe8 ! important; }
+
+table.signWarn {
+ background-color: #cccc33 ! important;
+}
+
+tr.signWarnH {
+ background-color: #ffff40 ! important;
+ color: #f67400 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signWarnB { background-color: #ffffe8 ! important; }
+
+table.signErr {
+ background-color: #cc0000 ! important;
+}
+
+tr.signErrH {
+ background-color: #ff0000 ! important;
+ color: #da4453 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signErrB { background-color: #ffe0e0 ! important; }
+
+div.htmlWarn {
+ border: 2px solid #ff4040 ! important;
+ line-height: normal;
+}
+
+div.header {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+div.fancy.header > div {
+ background-color: #43ace8 ! important;
+ color: #ffffff ! important;
+ border: solid #221f1e 1px ! important;
+ line-height: normal;
+}
+
+div.fancy.header > div a[href] { color: #ffffff ! important; }
+
+div.fancy.header > div a[href]:hover { text-decoration: underline ! important; }
+
+div.fancy.header > div.spamheader {
+ background-color: #cdcdcd ! important;
+ border-top: 0px ! important;
+ padding: 3px ! important;
+ color: black ! important;
+ font-weight: bold ! important;
+ font-size: smaller ! important;
+}
+
+div.fancy.header > table.outer {
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border-bottom: solid #221f1e 1px ! important;
+ border-left: solid #221f1e 1px ! important;
+ border-right: solid #221f1e 1px ! important;
+}
+
+div.senderpic{
+ padding: 0px ! important;
+ font-size:0.8em ! important;
+ border:1px solid #b3aba7 ! important;
+ background-color:#d6d2d0 ! important;
+}
+
+div.senderstatus{
+ text-align:center ! important;
+}
+
+div.quotelevel1 {
+ color: #008000 ! important;
+ font-style: italic ! important;
+}
+
+div.quotelevel2 {
+ color: #007000 ! important;
+ font-style: italic ! important;
+}
+
+div.quotelevel3 {
+ color: #006000 ! important;
+ font-style: italic ! important;
+}
+
+div.deepquotelevel1 {
+ color: #008000 ! important;
+ font-style: italic ! important;
+}
+
+div.deepquotelevel2 {
+ color: #007000 ! important;
+ font-style: italic ! important;
+}
+
+div.deepquotelevel3 {
+ color: #006000 ! important;
+ font-style: italic ! important;
+}
+
+blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+.quotemarks{
+ color:transparent;
+ font-size:0px;
+}
+
+}
+@media print {
+
+body {
+ font-family: "Sans Serif" ! important;
+ font-size: 9pt ! important;
+ color: #000000 ! important;
+ background-color: #ffffff ! important
+}
+
+tr.textAtmH,
+tr.signInProgressH,
+tr.rfc822H,
+tr.encrH,
+tr.signOkKeyOkH,
+tr.signOkKeyBadH,
+tr.signWarnH,
+tr.signErrH,
+div.header {
+ font-family: "Sans Serif" ! important;
+ font-size: 9pt ! important;
+}
+
+div.fancy.header > div {
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ padding: 4px ! important;
+ border: solid #221f1e 1px ! important;
+ line-height: normal;
+}
+
+div.fancy.header > div a[href] { color: #221f1e ! important; }
+
+div.fancy.header > table.outer{
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border-bottom: solid #221f1e 1px ! important;
+ border-left: solid #221f1e 1px ! important;
+ border-right: solid #221f1e 1px ! important;
+}
+
+div.spamheader {
+ display:none ! important;
+}
+
+div.htmlWarn {
+ border: 2px solid #ffffff ! important;
+ line-height: normal;
+}
+
+div.senderpic{
+ font-size:0.8em ! important;
+ border:1px solid black ! important;
+ background-color:#d6d2d0 ! important;
+}
+
+div.senderstatus{
+ text-align:center ! important;
+}
+
+div.noprint {
+ display:none ! important;
+}
+
+blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+.quotemarks{
+ color:transparent;
+ font-size:0px;
+}
+
+.quotemarksemptyline{
+ color:transparent;
+ font-size:0px;
+ line-height: 12pt;
+}
+
+}
diff --git a/src/core/templatetestdata/multirecipients.mbox b/src/core/templatetestdata/multirecipients.mbox
new file mode 100644
index 0000000..d6a7f51
--- /dev/null
+++ b/src/core/templatetestdata/multirecipients.mbox
@@ -0,0 +1,12 @@
+Return-Path: <from@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: From <from@example.org>
+To: To <to1@example.org>,
+ "To, 2" <to2@example.org>
+Cc: CC <cc1@example.org>, CC2 <cc2@example.org>
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+test
diff --git a/src/core/templatetestdata/no-content-type.mbox b/src/core/templatetestdata/no-content-type.mbox
new file mode 100644
index 0000000..ad050d8
--- /dev/null
+++ b/src/core/templatetestdata/no-content-type.mbox
@@ -0,0 +1,7 @@
+From: hans@example.com
+To: karl@example.com
+Subject: Simple Mail Without Content-Type Header
+Date: Sat, 15 May 2010 10:52:24 +0200
+MIME-Version: 1.0
+
+asdfasdf
\ No newline at end of file
diff --git a/src/core/templatetestdata/no-content-type.mbox.html b/src/core/templatetestdata/no-content-type.mbox.html
new file mode 100644
index 0000000..9e3eb75
--- /dev/null
+++ b/src/core/templatetestdata/no-content-type.mbox.html
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">asdfasdf</div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/no-content-type.mbox.tree b/src/core/templatetestdata/no-content-type.mbox.tree
new file mode 100644
index 0000000..c003ec9
--- /dev/null
+++ b/src/core/templatetestdata/no-content-type.mbox.tree
@@ -0,0 +1,3 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encoded.mbox b/src/core/templatetestdata/openpgp-encoded.mbox
new file mode 100644
index 0000000..168c8dc
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encoded.mbox
@@ -0,0 +1,33 @@
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+owGdk31MlVUcx5G3jClvI1JH7GiOil0uYJATBW8FK6HkDtBJI93heQ6Xk8/L9Tnn
+XExALDfJQaJutl4UzUoCIxDwos0XTLktqJaJkJE5QAU3yMKpkRqdc+GC/dsfz/bs
+ec7v+/v+Pr/v2TnbxytgxvUt8T99cCirZEa9zw/5fopuIHX1xsjjr4gXgO2EqUDW
++WdAMAVQRdQEJF0jSKKIMgNAGdsxkbBmA0jB1AxSdQ1JAAIZQxUo/BgjZpCN5Kn6
+SVEVMgPzX69CJCENEqFqYwgo2MYUCKAENjCu4MAOZBgQCNH/9NUoAoVIkw1kTLfl
+6qquKJhMeDYDqwERQRoVf9yOkI2/KTgfGbp4J5R3ViGlvGTKoANTiABk3I4ZrORF
+FGsSlhmXmTSJNKyaAKPArhsUAjc1oECOAcOHbXp8samehJOAhsSAAxViSUzKFGpg
+CSPCoWm6BiiXFNb/9waeRxqCmuhpM6ADy5P+zGAVBbyAHwYF/CQxATtTHFiDXIP7
+Uu3IEPZMDytieYokUhQOEpENTLCRuEegYYLFERXatMm5+dIoINCGBVIzeJEZMB8L
+mzK043xG3OimUQvHwF4IDUT5kqc5FyBmw1yJd1AAFtZkjKh7BN7GAd07nkSK+ayG
+5gEpOEoSUwnUPPQFc13GfOGGTjwfPcFSMQ8aF3OnbRoIDxJUEGGQ43PvyyjUNYm5
+R+L+dQnzGg1SXeCw8wDTiemoG4YIIH/s0OCjY5E/VRfsTLyESO61GVgW++c1qlBd
+oQGDUYNre9xPB0NcEnFZJoPppi4o83gU8MxxFCK9Ewvk94bz4Lk2B2z3jvD1mhHg
+5e/nLW60V8CjwZ7LTpKCxjNIzhNRXcER/6RVXUzaGdocqGY3vd+5LO7+qSV3pdFP
++s6tv3Jp8EZg+V9qza9zKhf4b3xn4MfVSYOW+qaihPsHrc3O5hpzXCV77sROqxWw
+vbfaOrpClvTszr8+8pVc/ELc0aeOm+856kqfDYNZmUXt33+Y1nLT4nvH0tomz47f
+tfzP+dlpQW8vRj3v+qcXyXpef3Hvldy2gfECZ3LMGdMomlsR8fQm42zMcLh3eW1N
+Xszwqt5dLXimuVk6vb+/etNN8xgeuhoWeb79myzXg9jUv11xbQ8OR9/wnXP7QGzj
+kWN+v+RpX58qa2dbTr2VeMn/aPJrOZ3ZYS0dW7s6dhcu/3lzT1DdhS8zGgIrynIH
+tjkf21tmXtZ8pOjj/a7xsahsEGKxLG4h+St9Oj9ace1kn1+vdWl06+nEvhPlOWnh
+5OVrw1nzTv6+pjo3K9Vr3YFZeZmu6K1jA2OW7M96Bs85ChL23ck95Cx5/bfuHeX3
+wktCXYN1/fvWpxxIfyk2/pm0N4bCRyrfS8z13VPNMr6rckbuP1YS2rp0z27X/FEy
+FPHm4OHHv7iXsuaPg5dpg6XWN9B/SG/81Bq8tv5WwMjFRVUZId6Rn+sL68uudls3
+z+vMvLwwrdw5t+Pb5ISuppDUVkvmme4nTahhwYX7setmpdxt29ZeO5MFPFK6Pep2
++nlHdfFa78ZFpSMV/Q1n/wU=
+=zzr4
+-----END PGP MESSAGE-----
diff --git a/src/core/templatetestdata/openpgp-encoded.mbox.html b/src/core/templatetestdata/openpgp-encoded.mbox.html
new file mode 100644
index 0000000..585bb4f
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encoded.mbox.html
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis. Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros. Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encoded.mbox.tree b/src/core/templatetestdata/openpgp-encoded.mbox.tree
new file mode 100644
index 0000000..ea8223f
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encoded.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted+signed.mbox b/src/core/templatetestdata/openpgp-encrypted+signed.mbox
new file mode 100644
index 0000000..fbe5ce7
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted+signed.mbox
@@ -0,0 +1,46 @@
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgAkQI925mOOybpzcGcjUE7jmfMVoUvJW6Br9Zx9UEtko5H
+fdmnrrUhFDyhBdwcg2E6AChipNcJjZhdX17lNAO0kI2IoPJAEkX9lyhjoiVEH/M8
+xmJEKFRejYzefx0S8esKyqqtfAmMKfsA5HmKRY8iDmQnI5d/FKhkcqLTJYo7fQyL
+rEEycdr5PU5OJbMtE5+8+kbmG8PywjiCCad68FXakXIEFyWX1A99W/0ScWtqrqDB
+kuQSdxJs4aAZWopxGKxDobt/qVyG6W6+PUnLx3eg80KytcWNxLJRV7WEJMj4OYCU
+JdHrh4J1DTTRbuRmqx9de3fBDFHNNZpJP43UJYJWtoSMAxiZbYU0+6KtAQQAnRxD
+XNwzBSmPk9NG3HYf/RleTAS8/fMp3D973Y3VF5JV72ljWqZO/1o/3RIpD0pl5nSE
+nI0wPyncmPvAgQl5EAKTdYonKLuMCTbQ4eT7vkOdfA/HUxgaoE8ppH/OYXDDiqz/
+2GlNCCHcaQcVWwkHbWWgyhd/VvB7Mt9PVqPgTsHSwQ4BZf/JDwWe3MDAg21Raryf
+dN4ZmWUzd3osDIRyy8H2hZL9vgZ3r0auIP6DMyYrPf3yTj9ApZeBiIpgBvqMwvR/
+8si6r1JaXr48KRCxAkn9fIXe2jMwQE2bk5tYDrTXY868V3DA5iKq1dgXUSn0tzG3
+0x9pjaOFkwxm0wtlpwnhZREJ9/ieIY7hy6p7CDpq4ZGRh8jQta4tWrjxN0wly+Dh
+a9TjzHzgTh9BTh7vjcDLitOQFL5NcCQtK717FQ5Z1DRnkHDVLPoyPnW+5sllOVr9
+UcqNXwrPbrtElFjHULL5Y1pem1+AE6nCAtlvCAc7cil6QDsU508sOXW7BhTWATIU
+tGHg/nIC0qVs24LR3MyYrwvfXL2JOkN/IK/g+0bbs6DMYVYaEOjcjqtidxWuLsE5
+aFEwlUFzcTcSauW+AOKwH+YFihRnlh9+4taaZxGZeutb12D5u8eEk+3nyVcsdogY
+k/nT6ElN8i/Z2vgcxL6ABvB+g/bZmp/eCJphDNYc00lP8NMC4EEJvTZL438ThJ3j
+wz0Qo4PlV0/OMXYxP2iZup2/rCe+pkmc9Gyz3Mkal4/9bBtIgP9cWBR7JZLMrK50
+KO4+NtrZYEY4JXRJlAo=
+=1lYB
+-----END PGP MESSAGE-----
+
+--nextPart1357031.ppLHckZtsp--
diff --git a/src/core/templatetestdata/openpgp-encrypted+signed.mbox.html b/src/core/templatetestdata/openpgp-encrypted+signed.mbox.html
new file mode 100644
index 0000000..54c58b8
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted+signed.mbox.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted+signed.mbox.tree b/src/core/templatetestdata/openpgp-encrypted+signed.mbox.tree
new file mode 100644
index 0000000..7d5bbeb
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted+signed.mbox.tree
@@ -0,0 +1,5 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-applemail.mbox b/src/core/templatetestdata/openpgp-encrypted-applemail.mbox
new file mode 100644
index 0000000..f5d083f
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-applemail.mbox
@@ -0,0 +1,52 @@
+Received: from konqi
+From: "Konqui" <konqi@example.org>
+To: "Bird" <bird@example.org>
+Subject: gpg problem 1/2
+Date: Tue, 22 Mar 2016 17:09:18 +0100
+Message-ID: <123456@example.org>
+Accept-Language: de-DE, en-US
+Content-Language: en-US
+Content-Type: multipart/mixed;
+ boundary="_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_"
+MIME-Version: 1.0
+
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_
+Content-Type: text/plain; charset="us-ascii"
+
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_
+Content-Type: application/pgp-encrypted;
+ name="PGPMIME Versions Identification"
+Content-Description: PGP/MIME Versions Identification
+Content-Disposition: attachment; filename="PGPMIME Versions Identification";
+ size=77; creation-date="Tue, 22 Mar 2016 16:09:18 GMT";
+ modification-date="Tue, 22 Mar 2016 16:09:18 GMT"
+Content-ID: <D82BB3DF89947646AD6C4C24C8C54BAC@example.org>
+Content-Transfer-Encoding: base64
+
+VmVyc2lvbjogMQ0NCg==
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message.asc
+Content-Disposition: attachment; filename="encrypted.asc"; size=872;
+ creation-date="Tue, 22 Mar 2016 16:09:18 GMT";
+ modification-date="Tue, 22 Mar 2016 16:09:18 GMT"
+Content-ID: <58A712E65AB1824AB726904A6449178F@example.org>
+Content-Transfer-Encoding: base64
+
+LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tClZlcnNpb246IEdudVBHIHYxCkNvbW1lbnQ6IFVz
+aW5nIEdudVBHIHdpdGggSWNlZG92ZSAtIGh0dHA6Ly93d3cuZW5pZ21haWwubmV0LwoKaEl3REdK
+bHRoVFQ3b3EwQkEvOU50TExYYmlJSlZTNnBPeW53RWVTem5yUUs3a1lWbGE4Uk00My8vSkVDQ2tH
+SgphekVhU0J6bmFiQnY2ZXBhRm1RdFZITE1YbENiWm5NbVc5bG95cVBCZk1vQW1zNmtLS0JkRy9q
+cWh1czg5aVhFCitzZVhuZ0MyMzNWYS9nWk1iMkR4T3FJb2tWTmZqOXRwUjd4UTh3Uy9qSFREaUxO
+YzFHT1FDN2t1NDJ6MmJOTEEKSVFGUkQvcWJCRno4OWhVNHdQNGNZb0F5c09uRURvakZyc3JuQ2lk
+VEhKT0pybmRNNlBQVXRIL2pRQ3lmci9FRwoydFNwSndZS3ZtVDZseTN5cWFHTEJ0UlBJeGl2K2RN
+ZSs3eXcwdDQwcWJqdnZhVEdhdkVyRUJKRUtYNWVXYlROCi9zamFqSHBVSHFzNlNJaU1oZUg5ZHIr
+V2Z6Rk9OdFZiUEVnR1JtT0VSaGxnVGwvbkxvODZBWnBqSnJvSUdLSkoKdFRIQ2NvUUdBV0crTjd3
+ckNFMVJ4UjBra01zNG5Sb3pqMFRMdTZaeVhNcytIMDYzTWV3VFBOeE5BaVFUMU5iaQp1ZEtXbWZM
+Qmx4bjA2cCtKRHpVS3hqOFBGd09iZGJ4VHZBQ3piQXZCWTFhSE1RPT0KPW1MbDMKLS0tLS1FTkQg
+UEdQIE1FU1NBR0UtLS0tLQoK
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_--
diff --git a/src/core/templatetestdata/openpgp-encrypted-applemail.mbox.html b/src/core/templatetestdata/openpgp-encrypted-applemail.mbox.html
new file mode 100644
index 0000000..ca8d7fb
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-applemail.mbox.html
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1"/>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">test</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-applemail.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-applemail.mbox.tree
new file mode 100644
index 0000000..8ef3df2
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-applemail.mbox.tree
@@ -0,0 +1,7 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox b/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox
new file mode 100644
index 0000000..2d9726e
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox
@@ -0,0 +1,115 @@
+From test@kolab.org Fri May 01 15:12:47 2015
+From: testkey <test@kolab.org>
+To: you@you.com
+Subject: enc & non enc attachment
+Date: Fri, 01 May 2015 17:12:47 +0200
+Message-ID: <13897561.XENKdJMSlR@tabin.local>
+X-KMail-Identity: 1197256126
+User-Agent: KMail/4.13.0.1 (Linux/3.19.1-towo.1-siduction-amd64; KDE/4.14.2; x86_64; git-cd33034; 2015-04-11)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart1939768.sIoLGH0PD8"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart1939768.sIoLGH0PD8
+Content-Type: multipart/encrypted; boundary="nextPart2814166.CHKktCGlQ3"; protocol="application/pgp-encrypted"
+
+
+--nextPart2814166.CHKktCGlQ3
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart2814166.CHKktCGlQ3
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDGJlthTT7oq0BA/9cXFQ6mN9Vxnc2B9M10odS3/6z1tsIY9oJdsiOjpfxqapX
+P7nOzR/jNWdFQanXoG1SjAcY2FeZEN0c3SkxEM6R5QVF1vMh/Xsni1clI+peZyVT
+Z4OSU74YCfYLg+cgDnPCF3kyNPVe6Z1pnfWOCZNCG3rpApw6UVLN63ScWC6eQIUB
+DAMMzkNap8zaOwEIANKHn1svvj+hBOIZYf8R+q2Bw7cd4xEChiJ7uQLnD98j0Fh1
+85v7/8JbZx6rEDDenPp1mCciDodb0aCmi0XLuzJz2ANGTVflfq+ZA+v1pwLksWCs
+0YcHLEjOJzjr3KKmvu6wqnun5J2yV69K3OW3qTTGhNvcYZulqQ617pPa48+sFCgh
+nM8TMAD0ElVEwmMtrS3AWoJz52Af+R3YzpAnX8NzV317/JG+b6e2ksl3tR7TWp1q
+2FOqC1sXAxuv+DIz4GgRfaK1+xYr2ckkg+H/3HJqa5LmJ7rGCyv+Epfp9u+OvdBG
+PBvuCtO3tm0crmnttMw57Gy35BKutRf/8MpBj/nS6QFX0t7XOLeL4Me7/a2H20wz
+HZsuRGDXMCh0lL0FYCBAwdbbYvvy0gz/5iaNvoADtaIu+VtbFNrTUN0SwuL+AIFS
++WIiaSbFt4Ng3t9YmqL6pqB7fjxI10S+PK0s7ABqe4pgbzUWWt1yzBcxfk8l/47Q
+JrlvcE7HuDOhNOHfZIgUP2Dbeu+pVvHIJbmLsNWpl4s+nHhoxc9HrVhYG/MTZtQ3
+kkUWviegO6mwEZjQvgBxjWib7090sCxkO847b8A93mfQNHnuy2ZEEJ+9xyk7nIWs
+4RsiNR8pYc/SMvdocyAvQMH/qSvmn/IFJ+jHhtT8UJlXJ0bHvXTHjHMqBp6fP69z
+Jh1ERadWQdMaTkzQ+asl+kl/x3p6RZP8MEVbZIl/3pcV+xiFCYcFu2TETKMtbW+b
+NYOlrltFxFDvyu3WeNNp0g9k0nFpD/T1OXHRBRcbUDWE4QF6NWTm6NO9wy2UYHCi
+7QTSecBWgMaw7cUdwvnW6chIVoov1pm69BI9D0PoV76zCI7KzpiDsTFxdilKwbQf
+K/PDnv9Adx3ERh0/F8llBHrj2UGsRs4aHSEBDBJIHDCp8+lqtsRcINQBKEU3qIjt
+wf5vizdaVIgQnsD2z8QmBQ7QCCipI0ur6GKl+YWDDOSDLDUs9dK4A6xo/4Q0bsnI
+rH63ti5HslGq6uArfFkewH2MWff/8Li3uGEqzpK5NhP5UpbArelK+QaQQP5SdsmW
+XFwUqDS4QTCKNJXw/5SQMl8UE10l2Xaav3TkiOYTcBcvPNDovYgnMyRff/tTeFa8
+83STkvpGtkULkCntp22fydv5rg6DZ7eJrYfC2oZXdM87hHhUALUO6Y/VtVmNdNYw
+F3Uim4PDuLIKt+mFqRtFqnWm+5X/AslC31qLkjH+Fbb83TY+mC9gbIn7CZGJRCjn
+zzzMX2h15V/VHzNUgx9V/h28T0/z25FxoozZiJxpmhOtqoxMHp+y6nXXfMoIAD1D
+963Pc7u1HS0ny54A7bqc6KKd4W9IF7HkXn3SoBwCyn0IOPoKQTDD8mW3lbBI6+h9
+vP+MAQpfD8s+3VZ9r7OKYCVmUv47ViTRlf428Co6WT7rTHjGM09tqz826fTOXA==
+=6Eu9
+-----END PGP MESSAGE-----
+
+--nextPart2814166.CHKktCGlQ3--
+
+--nextPart1939768.sIoLGH0PD8
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+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
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+
+--nextPart1939768.sIoLGH0PD8--
+
diff --git a/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..092a344
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:1:e0:1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>file.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.tree
new file mode 100644
index 0000000..473f0b1
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox.tree
@@ -0,0 +1,11 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-attachment.mbox b/src/core/templatetestdata/openpgp-encrypted-attachment.mbox
new file mode 100644
index 0000000..4204fb0
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-attachment.mbox
@@ -0,0 +1,57 @@
+From test@kolab.org Fri May 01 15:13:18 2015
+From: testkey <test@kolab.org>
+To: you@you.com
+Subject: enc attachment
+Date: Fri, 01 May 2015 17:13:18 +0200
+Message-ID: <2401407.XhOc2XYoOt@tabin.local>
+X-KMail-Identity: 1197256126
+User-Agent: KMail/4.13.0.1 (Linux/3.19.1-towo.1-siduction-amd64; KDE/4.14.2; x86_64; git-cd33034; 2015-04-11)
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart4793536.cjk9hKXLQ5"; protocol="application/pgp-encrypted"
+
+
+--nextPart4793536.cjk9hKXLQ5
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart4793536.cjk9hKXLQ5
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDGJlthTT7oq0BBACLMnR5Mln6JGCccvqZCgM3qUkFWZ7a33b7Nl2g5lSOLX6q
+dlGOr/0jAuqdkRwCDTom3hsrH2vf1kARTSST+5cewngS2CgBTAwwc8JymEagTkKf
+VK/tTnM6G7puMVkwuafpuRggyJAUYvjktgUKOUaXtuxX71g0NagAFQGqlvGuq4UB
+DAMMzkNap8zaOwEH+wWSs5xdV1x37T11EnUvkhoOMu+uId2U7NEx2JdQ/FGJZdti
+mtqfM9GKTtQlGVcn3ISH7Wmrw3x0bsOLuW7oxkU4xIS3tVvibxaaWdmponN5TUai
+Dr4LCTEmG7+jLNopF6V4zPmpQ9YxMwQOm8ITml+auNOg9EtHxavwr3Xd1hOYA92N
+1bkOiHzmb9hQtUy1GfRRk91tRqtRPoaamczLxWV9yROFDRNuSSbZ8oBU/K4YgSTL
+D+/FhCt6MxV0DQzp+UCSL7ZsMx+ldPnZK44Udd17+U3xQDDUffo6cSg6FAF425Rh
+v3ZQP0j7LtSIwDh2Rxc+Is4DuSmfZksL5nLPH5nS6QGJnsVEqVcZgQPktl1Zaeil
+x/6WaWruuJm92G2fd9x2/giTLZnk918BVi/n00xR/n4bnSQmmFhXVqAVjGlG6Tr9
+dxej8dSiFdxO8ZjFe5tguQw76xlCu/9MxmSXTP7Mfvm4jqdcjUOINwHOzR/h2T62
+ZlrmqoxMHm4RN0PQ334tSzQXD4gcoUHL+xq62ATt7/jx0p0pIXPmPVUFopCk8k1E
+m2ErPLnyfGLd4LNZRL03oP0jCjX6Q/LFWLTjCIdU6+aM6nT26CZy98yZV0SRGyhu
+qYxN0aVW+RatmDRWWtouOJllQouQ7ZaqmjHLgyOj32/oT8cYUWWdFswSsnMhJjxb
+r6iajUeAZgiN+zqwgf6j1Z8/mMvb+yirP+Rn9ME1fq3XSYHlnIOxKNBa+St8DdaP
+/ZvrkwNTpVp1GmaZLBXdqdeLmflJ4U/X7wphZGR3sgjOwj0oYotX1Zb8OrtlP5WC
+VXhhrt40e7Ilt2B0x7Xe9DWKByDCqrQUhwxwTS3miiKH9G1VEcHko70O98RjKJQ3
+I4VW6e/Gqv2zAMiiOu1MBTeGfPQItca4bUrVzhKjm27twtZD4wLSQDTQECxrCWHC
+BFAdzvsIry0FIXoO6Vh16Hojq+YZ8tpmknGfpg0pnuRvAdDWU+0uuECXDE0UZFWC
+2g3Bs2Dn2BYYyrI6X92swHz8qP3JvdxN0dpsYMkMdHN4yWXJogNSfXzy2udf0A4P
+NNZMOonhlwH+DBRfcWS0A/j0/fdDCDzR5Ca5dbX7lL4EscbBeoCP1JJyVoOp6DUc
+ICuHJGGrnpNdG9DMa97tqpyGRHTAwI3lJXPKTDEHN9v9XobIyndFgi/tcPLZ7QWz
+9mN94NKLmeYWjrMiRbNQk8BYXR9K17SHb4BkIMdBxRsJjgMEC8qniUH64Nnf8/x4
+yaRCuUo0bkHDE3AqCzZE1R0he66dDkfOIz+mLwcpG8jZWjFm7sXAflBe3jvIc0lm
+NyWQ1WnMkP83fWm/+YqrLLf+tTQtievRPeS1Dd/7v9yqUWEmQ0pUOj3MNf9Ej2KI
+vu5ap7fHIevcBn42BPwQgSnp4YmXEY0ir5Ccwogusnt7QliNSRmkN6Jap4AF
+=AVJ4
+-----END PGP MESSAGE-----
+
+--nextPart4793536.cjk9hKXLQ5--
+
diff --git a/src/core/templatetestdata/openpgp-encrypted-attachment.mbox.html b/src/core/templatetestdata/openpgp-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..2b266b0
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-attachment.mbox.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:e0:1.2?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>file.txt</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-attachment.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-attachment.mbox.tree
new file mode 100644
index 0000000..f433fd4
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-attachment.mbox.tree
@@ -0,0 +1,8 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox b/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox
new file mode 100644
index 0000000..9afd17e
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox
@@ -0,0 +1,48 @@
+From you@you.com Sat, 29 Mar 2014 15:04:21 +0100
+FCC: imap://hefee%40netzguerilla.net@mail.netzguerilla.net/Sent
+X-Identity-Key: id1
+X-Account-Key: account4
+Message-ID: <5336D2E5.6010602@you.com>
+Date: Sat, 29 Mar 2014 15:04:21 +0100
+From: you <you@you.com>
+X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.4.0
+MIME-Version: 1.0
+To: test@kolab.com
+Subject: test
+X-Enigmail-Version: 1.6
+X-Enigmail-Draft-Status: 515
+X-Enigmail-Draft-Status: 739
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1
+Comment: Using GnuPG with Icedove - http://www.enigmail.net/
+
+hIwDGJlthTT7oq0BA/9NtLLXbiIJVS6pOynwEeSznrQK7kYVla8RM43//JECCkGJ
+azEaSBznabBv6epaFmQtVHLMXlCbZnMmW9loyqPBfMoAms6kKKBdG/jqhus89iXE
++seXngC233Va/gZMb2DxOqIokVNfj9tpR7xQ8wS/jHTDiLNc1GOQC7ku42z2bNLA
+IQFRD/qbBFz89hU4wP4cYoAysOnEDojFrsrnCidTHJOJrndM6PPUtH/jQCyfr/EG
+2tSpJwYKvmT6ly3yqaGLBtRPIxiv+dMe+7yw0t40qbjvvaTGavErEBJEKX5eWbTN
+/sjajHpUHqs6SIiMheH9dr+WfzFONtVbPEgGRmOERhlgTl/nLo86AZpjJroIGKJJ
+tTHCcoQGAWG+N7wrCE1RxR0kkMs4nRozj0TLu6ZyXMs+H063MewTPNxNAiQT1Nbi
+udKWmfLBlxn06p+JDzUKxj8PFwObdbxTvACzbAvBY1aHMQ==
+=mLl3
+-----END PGP MESSAGE-----
+
+--23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5--
+
diff --git a/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox.html b/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox.html
new file mode 100644
index 0000000..09d904b
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">test</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox.tree
new file mode 100644
index 0000000..009ba99
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-enigmail1.6.mbox.tree
@@ -0,0 +1,5 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-memoryhole2.mbox b/src/core/templatetestdata/openpgp-encrypted-memoryhole2.mbox
new file mode 100644
index 0000000..43a588a
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-memoryhole2.mbox
@@ -0,0 +1,110 @@
+References: <0000000-0a3f-cb1e-e883-00000000@example.com>
+To: john@example.com
+From: Jane Doe <doe@example.com>
+Message-ID: <00000000-6de7-f427-95a2-000000000000@example.com>
+Date: Mon, 3 Aug 2020 12:12:01 +0200
+MIME-Version: 1.0
+Subject: ...
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+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
+=PCzh
+-----END PGP MESSAGE-----
+
+--CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P--
+
+
+
diff --git a/src/core/templatetestdata/openpgp-encrypted-noData.mbox b/src/core/templatetestdata/openpgp-encrypted-noData.mbox
new file mode 100644
index 0000000..c4f1422
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-noData.mbox
@@ -0,0 +1,17 @@
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--nextPart1357031.ppLHckZtsp--
diff --git a/src/core/templatetestdata/openpgp-encrypted-noData.mbox.html b/src/core/templatetestdata/openpgp-encrypted-noData.mbox.html
new file mode 100644
index 0000000..5219678
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-noData.mbox.html
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <hr/>
+ <div>
+ <a href="attachment:1?place=body"><img align="center" height="48" width="48" src="file:application-pgp-encrypted.svg" border="0" style="max-width: 100%" alt=""/>Unnamed</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-noData.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-noData.mbox.tree
new file mode 100644
index 0000000..79a20c8
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-noData.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox b/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox
new file mode 100644
index 0000000..2957bf3
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox
@@ -0,0 +1,114 @@
+From test@kolab.org Fri May 01 15:13:51 2015
+From: testkey <test@kolab.org>
+To: you@you.com
+Subject: non enc attachment
+Date: Fri, 01 May 2015 17:13:51 +0200
+Message-ID: <20157069.RcaNBhWVXx@tabin.local>
+X-KMail-Identity: 1197256126
+User-Agent: KMail/4.13.0.1 (Linux/3.19.1-towo.1-siduction-amd64; KDE/4.14.2; x86_64; git-cd33034; 2015-04-11)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart1612969.Xqz3IcFXZ3"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart1612969.Xqz3IcFXZ3
+Content-Type: multipart/encrypted; boundary="nextPart2213427.hvfAsaxZ1O"; protocol="application/pgp-encrypted"
+
+
+--nextPart2213427.hvfAsaxZ1O
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart2213427.hvfAsaxZ1O
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDGJlthTT7oq0BBACdvp3PFrRx6vxZhxt06LqyaO7+SWBbVUr7GOa3QaYCCBm+
+/KTUZEfhPuGVcsVpJKZbPsUKVhYfvYpDAsZu3TehmKflobWAV/cCIK2BkQB744pd
+oaCtTj7pmCO05Zt5Uo/tXbrgceuW+/huwn2DO2fk4MUBsluH3fMbvccZJnR3yoUB
+DAMMzkNap8zaOwEIAOTKI8Bh3NhfuJdWDsjv+UT6E4kf/zg3D95mJ+3gK8kHFXdd
+YyEKaMsYx64kSwm1KcjsJ4gWykJlB34YDDfcIrnbgO2QRss9GhgOcUtLr0KNcY+0
+OJ4sbNmI8I3XssMb4rHtDrcXc0ODd0v/C/Lw2VfUdN+bBY4EetG096OPiZ4R41kF
+Rj95nhO8tpoJx9VltegCdZI2AxtykOYvUaLFyYqCoKMmQwqGjdaUv1CeMnxUIPsn
+A/x6TQ0AjpZ5IfMqO7QmOv3ACFo5/Ur93NauOK6szg/zdih9OxUL0Qid3nZQQwqA
+J9ZChTcUgdjQo8EjpWLy0oXR9uLSHcLwRo3OdRzS6QEz7Dus6hmpEal3zTZFj2NR
+mK38tpp+eWhzSAFAx8tyImz8SU2N2o7xQHlEdlWYGeIQg0embMnmMv6WJVWhYahb
+x5OTfHCGwHFsLhZDmtaNhAVMlYdqxKXoR45H9cmGNPpU5kN5Ckjr6I+I51cfgAOE
+1vF54jYHXd1btfGrwAyKWBfFVQFPWjuIUdsEl8zDjNTmcCCbA77tEGohSqDi+WWL
+LyYw5g/uwwZ+5OzeRdjAJ+9xtJ+WXhnDUffG8GgGgZWBQD+S2Ix4lZ2NcAeyLPt/
+cXeDHkPUXj7cjm0hl7SvBKzR6X4EEWO/hh19mxngd4+e19q6Qm4K2QMfTwQQyNED
+whBkRXhcXcRxWlb/ICwFDIgxKLJko5HVTknBJDllNdm6l2C4Y9/IY2imqXni8xZX
+zQfAkDOBlfouUrHbPuBCRdCLmp7BgbanCaJDvgYGBvXEgjMKpV3bezTfm4Ugwiyk
+dJfMu/4XftZy7XqoFuDheNXuQ5JobpvVDaiTQ0EWHpHeX3TZ0xa8i1FO6ANLakUp
+aVFWzYl91bxbNHIcPh278neyi+LNWWT6TvkCwcbUYUfuIySOwfSUJAHDIJOx50Ha
+If0fNQDtF4o9mDFwXDwVf8e2zx5NjheqgYX/qIWjFE2cCCkUM4UkNrkYBOiwnh9F
+RJz4M6wKPhZT34MBlTKgwDbypDp+XYnM2HunzIDXCAigYsD/AuLNeFwsIPiXWJ47
+oXamEJxyqS9G0t/iy7+1mbNiFct7pvHt6QUKZ9aXSXj3MkQuWjjVNvMz6KocTSyL
+AeWQNYuvA5NkyZOA5+VU1ma3wn7IAXYkgw+OMvcz9VNevXNg956ZnGbb47Fqppp+
+MjK2ptM1UzIEnHxXtq3KFrXG1AzzhyFnKIjsiDpFTlMGTT9pRGnK8zyYXYPEgpwW
+874A5auLFOvhwPSNMhMai+XSoE3P+zZDqhXMYU8c49O+SeOtISg3Iy5tXuIPlIps
+7k0KA60hPulMYBQLtZ/yDO/gXhkeWaw=
+=EJZ6
+-----END PGP MESSAGE-----
+
+--nextPart2213427.hvfAsaxZ1O--
+
+--nextPart1612969.Xqz3IcFXZ3
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+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
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+
+--nextPart1612969.Xqz3IcFXZ3--
+
diff --git a/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox.html b/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox.html
new file mode 100644
index 0000000..e20a956
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox.html
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">test text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox.tree
new file mode 100644
index 0000000..c2a6ad0
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-non-encrypted-attachment.mbox.tree
@@ -0,0 +1,9 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox b/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox
new file mode 100644
index 0000000..222b593
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox
@@ -0,0 +1,91 @@
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP encrypted one signed and one unsigned attachment
+Date: Sun, 30 Aug 2015 12:08:40 +0200
+Message-ID: <1737262.ESByPkoaL9@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart2760349.k2GQmrcl5a"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart2760349.k2GQmrcl5a
+Content-Type: multipart/encrypted; boundary="nextPart2260160.XvshVD34ka"; protocol="application/pgp-encrypted"
+
+--nextPart2260160.XvshVD34ka
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart2260160.XvshVD34ka
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgAooa+Peu1t5aiX4WvssEnRlapkr62/49/Dbz5assvshdr
+o9zOC+89Qr5P/ea+tC1MO7ek/DfyL9C4EzOMp/r08GeInLqWMc9qLZO//YaT2JUp
+0IZFbpUQ4C2zjXMRuy/PMrltHuCfsvhvHX1YAHp/xjRsKpQoE3mSDzz5sc8/Hj9n
+2eoKoCEW1rgt2qHtV4DD6lvUPo42LMZclJ9GqfoD7WLoEH9ebRLhXr3D00j6xBfy
+//nooAhzQSW8b7GZth4Qc7DKAZMhuEly/kp07nhuPd1fMJDEAB/zh9EYlgnn3STb
+MCdtFs6kMC24uA2eDCH330Bn9OzzWnsVU9ae4XiKnNLpAeactSFRKKvGytBQaloq
+Gvn1+D0Xmw6OsSmRJ84DzKqG4E6bzE+XhMEMnLlqDvZDsOtU/sCGvMK0MM3y5B7M
+ONqWLN3ng3zrGPec5gqfvnWgKpANUrbJkzS8LNjv4hwoKh0tFpghWQiefG0Z9Hw1
+UaYbFwvaFgXcm72oBkynDCleWjQ2vnDE4P38PldqZbAW/Pw1q6Yq8m9MhS1VpbI5
+WBjuRQhgQvMG0LY0gR/3Qor5tX9ASllWnPfWYVuOiSOAe5Hsp7BmELXkWftHii7k
+YW0Qim7jleDaY1MGfFr0vrO/PiYxGTb+4IUyUgEBYEpxa9ozUoeftF6JbHPuEZI0
+ENX8aIVJ9FnpssrR5HlpXieF12ec9ZFeV7mAwcucJ3RXuDcQHQTHgEbfnzTsaEpL
+Hxs+6euOCJXhKOYVrsAlB4IxK0OQm4XHiZ7WBp5Jp7rlSHltdxFpSnHIfqngyCA4
+L+c/gsUEVbNI++iOOhOKVT47XIf+s/xa1Y4XghGbHIA3/pQphYo4U5dTeLoX0OWI
+64tPxliQTKuJ+NAv9Km2bDgvlvn83jsc94THi5u+fIdDEGp7pgoQNXR69Lkz1bsA
+Hh9xqKzVloHu4SsT3OGX+bfTO3jUh8ieU/4tflZMrJ9RkEfE08PzTnopT08FppFx
+QWpHv/fwyJf6Cw1IevM5pVLAShg0sbCPF/xsYTjSyWNib1wFtxkmv5MToCFwkxi5
+b1yT23BNlV5RV6wcjmrum7p2fMwPjbt8X6z+pgUtkD7zImBWeYddMjgSjOFuFEjF
+gpfVoV3OIvMPZMe2jqWsjnjujHJr2z5IZn3A7WI0b4SIDP0sGwsTBiogKqcBNWpn
+O4MKUq9JwC0K/MY7yS1MCLoHfwU18z19Es/flaAgwtXk8IWIcjkkumAwNl+y8Q+I
++8AFGdiXTKld9QVwCKnMS3QivHPuFNL8rfcWKsr1nOhOEhaO+zD94eOOiCbwiXGr
+E6WsewNCVQUN4bxAXl2vRi+9WRctLy7bsuIL5dgUz0CMYkQ+dDmrBflD0nyC
+=TGNA
+-----END PGP MESSAGE-----
+
+--nextPart2260160.XvshVD34ka--
+
+--nextPart2760349.k2GQmrcl5a
+Content-Type: multipart/encrypted; boundary="nextPart22530242.iRl14SoP0Q"; protocol="application/pgp-encrypted"
+
+--nextPart22530242.iRl14SoP0Q
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart22530242.iRl14SoP0Q
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgAtA94bBRwgpo64zcyh+4dzt0Pr2pmNjiS4ZX+a/xzYCmD
+oS1a26s/LVZH+aJYC13l1kEu+6YjKn+ruQvMfhihOxglHBLjmUO17TPFC05AReSn
+amMqPbgS6mOwhlBJHrBa/SVwkxmbMaNBUJ/KxRXFtTW/V4pPWImRvI9mnmpo8fHy
+ZLvVAI3hGe7vPG5Vbdi5/Iu/JzqwlglVsP82gYpLlx7HhWGF4gmTGc6YBwFtzEvS
+eqFtKRDqN60bo4HnNLOEnMaWlYPTpt3QibLWWIbtpA1Gb0Q/1NvDnn3Lyj8H+0WV
+8H6Ks9/cvAuoAMOad6y4gDJb+K/AS7Ha+08/3lMYG9LAAgGe8Qocxg1W3ha1o0Ph
+YSfV2ooebsLiHjwspjYpsX5ijnRj6uNGp5Dt28EIo1ANF+oDiSKEwAMGPBtcnqaO
+FWXy39dP3VXE73nsO+dyTidaATFBlYg+IpPTDSFTgsk7XDV973EpdXvOkBEp/vBv
+EZknuZFOkS0v5QHk9Y/hhlSLACTIEWQpBiFGOwUVSZFXLEY5zQNTbQdRbz3ZYcE9
+mIFzD9Ujw6tIJIOFazhwr9SxxyeaAygWeg4ifmmdhAsmFYum
+=WsAv
+-----END PGP MESSAGE-----
+
+--nextPart22530242.iRl14SoP0Q--
+
+--nextPart2760349.k2GQmrcl5a--
diff --git a/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox.html b/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox.html
new file mode 100644
index 0000000..c0b9d79
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox.html
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">This is the main body.</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment1.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">This is a signed attachment.</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">This is an unsigned attachment.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox.tree
new file mode 100644
index 0000000..5cb8374
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-partially-signed-attachments.mbox.tree
@@ -0,0 +1,12 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox b/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox
new file mode 100644
index 0000000..c53e091
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox
@@ -0,0 +1,42 @@
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP encrypted with 2 text attachments
+Date: Sun, 30 Aug 2015 12:05:17 +0200
+Message-ID: <1505824.VT0nqpAGu0@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart3335835.KxmPgziKxd"; protocol="application/pgp-encrypted"
+
+--nextPart3335835.KxmPgziKxd
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart3335835.KxmPgziKxd
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgA6tTJs017mI+xuhjcSTr3F5X/rJghq0oaXbjk1K0W33p+
+jsEyPTbuUIvI2a+5xHJ3BV+gnnO0Xosz57tGTF/eVAySnGiMse5cu2RQR9b/9EkC
+uzt3tIChyub3GUODG3yzXqkhSiwIImvedWgnJYTJ7eeBkWdizVT0b0byiG2d7Hjq
+hzYzyPJRwuoE36hryDsFycAhPfSsQAirxDJXk4HTsfBCmz7tzJhtt4wKc7z5m8fq
+y+jddnDADq5+tykJS6zemJOzgU3AOQyVJbmsx2vTV1CJdpKPHvTTgghpAaSuVbg0
+tR9BX1nPnA/bgX/V7C+3PwuCvB0ZKmv5d8kaGaTwO9LAhQGaWTfhG1cyy+MJhXdR
+rH63PMkZh/lrvj7qJYofI5iVoe1CiMaX44BiwKVclGf7bEFdzc2NSRvvTSzisN3T
+nSzydEttuEY5jGagQQNT1l1l4I8HAtUgwGtkKZVTAUL6iKHYAqzB77sRs33UJy4k
+ZSIWFnSY8l+HLG+MYKsYCGsvJHkxEHnMiS1EZcmpUFhxOGQpiF2rJ4qnL2jbFWbA
+9N1O5N1N/DJ/YKjwgy/jVVj6AOCrBZrxvKKt2mtG/wVX0F/KSKiEd8mgrLIx1udw
+tibiDAJmDxUk8K0lAdOHBrzBChvysiT/QxCJFcSY6FE99Rral+BWjeyAIQQWvc2B
+cEceZCtzjCOrwvoJwl2uEX+51nmMp+z1EoeyyhmUZZ4y65yOg4P6KGXGcLmIjSbH
+IhsSls1jRkSrypf/wcEd6o7KZdeYbfA=
+=Sud3
+-----END PGP MESSAGE-----
+
+--nextPart3335835.KxmPgziKxd--
diff --git a/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..cca4c45
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox.html
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body part</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment1.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is the first attachment</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <a name="att3"/>
+ <div id="attachmentDiv3">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment2.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is the second attachment</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox.tree b/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox.tree
new file mode 100644
index 0000000..71a67b5
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted-two-attachments.mbox.tree
@@ -0,0 +1,9 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-encrypted.mbox b/src/core/templatetestdata/openpgp-encrypted.mbox
new file mode 100644
index 0000000..fc249d5
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted.mbox
@@ -0,0 +1,37 @@
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+Message-ID: <1505824.VT2nqpAGu0@vkpc5>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQgAtWfDWWI2JUGuptpackiIxpWViEEpGAeruETubiIPwxNb
+DNmXrMDhbm/zIbPntIGWJDgUMfABZCUgmlJLWhsceDTt+tXnWGha2VYrN2/WsF6/
+Pqs/TavTvMIJQHDaIH5yDDCaMoq/mGSbcu7go2H8Sw7aBEYlM8jGlqc1HziXnZ1q
+3vDiA+4qWfvbNoSRo1kb9Pcq997yg6WqZXH2hJ7cp+hIQ4uTP1/+qgYHMvfPlzQk
+XcDguGbIer88ELhuR5622unGBAB4dqp+5w6n9c6rrCH81qhV4W0nqSEvj1tBj78S
+ZTi6VBAo5eS0e3iOJqMpwUZz6hQUpJw2wnNRGvLgI9KZAag0HkgPdMeANowg7vpE
+L4nU7B0ybhswA2Y7QT/wwCDZu9N1JGeBmy0dgy4sA38Ki27rn2/lIaP0j14JycwM
+RTJ1uwI+ZuQiwXlyYtdFZJWe8nraWARch0oKqhaR7aSsxGWo63eiGEQhkQCBFBb3
+Vg0nNCZRBauEqIESEW5EV2zrJqdfNYcz+f9IP125dnQEKgLZ6FxTt3+v
+=mhNl
+-----END PGP MESSAGE-----
+
+--nextPart1357031.ppLHckZtsp--
diff --git a/src/core/templatetestdata/openpgp-encrypted.mbox.html b/src/core/templatetestdata/openpgp-encrypted.mbox.html
new file mode 100644
index 0000000..ba0976c
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted.mbox.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted.mbox.inProgress.html b/src/core/templatetestdata/openpgp-encrypted.mbox.inProgress.html
new file mode 100644
index 0000000..e5eb55d
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted.mbox.inProgress.html
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Please wait while the message is being decrypted...</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="font-size:x-large; text-align:center; padding:20pt;"/>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-encrypted.mbox.tree b/src/core/templatetestdata/openpgp-encrypted.mbox.tree
new file mode 100644
index 0000000..82f705c
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-encrypted.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox
new file mode 100644
index 0000000..8bd0691
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox
@@ -0,0 +1,40 @@
+From test@example.com Thu, 17 Oct 2013 02:13:03 +0200
+Return-Path: <test@example.com>
+Delivered-To: you@you.com
+Received: from localhost (localhost [127.0.0.1])
+ by test@example.com (Postfix) with ESMTP id B30D8120030
+ for <you@you.com>; Thu, 17 Oct 2013 02:13:05 +0200 (CEST)
+From: test <test@example.com>
+To: you@you.com
+Subject: charset
+Date: Thu, 17 Oct 2013 02:13:03 +0200
+Message-ID: <4081645.yGjUJ4o4Se@example.local>
+User-Agent: KMail/4.12 pre (Linux/3.11-4.towo-siduction-amd64; KDE/4.11.2; x86_64; git-f7f14e3; 2013-10-15)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="ISO-8859-15"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.22 (GNU/Linux)
+
+hIwDGJlthTT7oq0BBACbaRZudMigMTetPZNRgkfEXv4QQowR1jborw0dcgKKqMQ1
+6o67NkpxvmXKGJTfTVCLBX3nk6FKYo6NwlPCyU7X9X0DDk8hvaBdR9wGfrdm5YWX
+GKOzcqJY1EypiMsspXeZvjzEW7O8I956c3vBb/2pM3xqYEK1kh8+d9bVH+cjf4UB
+DAMMzkNap8zaOwEH/1rPShyYL8meJN+/GGgS8+Nf1BW5pSHdAPCg0dnX4QCLEx7u
+GkBU6N4JGYayaCBofibOLacQPhYZdnR5Xb/Pvrx03GrzyzyDp0WyeI9nGNfkani7
+sCRWbzlMPsEvGEvJVnMLNRSk4xhPIWumL4APkw+Mgi6mf+Br8z0RhfnGwyMA53Mr
+pG9VQKlq3v7/aaN40pMjAsxiytcHS515jXrb3Ko4pWbTlAr/eytOEfkLRJgSOpQT
+BY7lWs+UQJqiG8Yn65vS9LMDNJgX9EOGx77Z4u9wvv4ZieOxzgbHGg5kYCoae7ba
+hxZeNjYKscH+E6epbOxM/wlTdr4UTiiW9dMsH0zSwMUB891gToeXq+LDGEPTKVSX
+tsJm4HS/kISJBwrCI4EUqWZML6xQ427NkZGmF2z/sD3kmL66GjspIKnb4zHmXacp
+84n2KrI9s7p6AnKnQjsxvB/4/lpXPCIY5GH7KjySEJiMsHECzeN1dJSL6keykBsx
+DtmYDA+dhZ6UWbwzx/78+mjNREhyp/UiSAmLzlJh89OH/xelAPvKcIosYwz4cY9N
+wjralTmL+Y0aHKeZJOeqPLaXADcPFiZrCNPCH65Ey5GEtDpjLpEbjVbykPV9+YkK
+7JKW6bwMraOl5zmAoR77PWMo3IoYb9q4GuqDr1V2ZGlb7eMH1gj1nfgfVintKC1X
+3jFfy7aK6LIQDVKEwbi0SxVXTKStuliVUy5oX4woDOxmTEotJf1QlKZpn5oF20UP
+tumYrp0SPoP8Bo4EVRVaLupduI5cYce1q/kFj9Iho/wk56MoG9PxMMfsH7oKg3AA
+CqQ6/kM4oJNdN5xIf1EH5HeaNFkDy1jlLznnhwVAZKPo/9ffpg==
+=bPqu
+-----END PGP MESSAGE-----
+
+
diff --git a/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.html b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.html
new file mode 100644
index 0000000..344dc23
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">asdasd asd asd asdf sadf sdaf sadf öäü</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.inProgress.html b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.inProgress.html
new file mode 100644
index 0000000..e5eb55d
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.inProgress.html
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Please wait while the message is being decrypted...</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="font-size:x-large; text-align:center; padding:20pt;"/>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.tree b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.tree
new file mode 100644
index 0000000..ea8223f
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-charset-encrypted.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
diff --git a/src/core/templatetestdata/openpgp-inline-encrypted+nonenc.mbox b/src/core/templatetestdata/openpgp-inline-encrypted+nonenc.mbox
new file mode 100644
index 0000000..b98dc33
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-encrypted+nonenc.mbox
@@ -0,0 +1,31 @@
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted + non enc text
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+Not encrypted not signed :(
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf/a3aNTLpQBfcUr+4AKsZQLj4h6z7e7a5AaCW8AG0wrbxN
+kBYB7E5jdZh45DX/99gvoZslthWryUCX2kKZ3LtIllxKVjqNuK5hSt+SAuKkwiMR
+Xcbf1KFKENKupgGSO9B2NJRbjoExdJ+fC3mGXnO3dT7xJJAo3oLE8Nivu+Bj1peY
+E1wCf+vcTwVHFrA7SV8eMRb9Z9wBXmU8Q8e9ekJ7ZsRX3tMeBs6jvscVvfMf6DYY
+N14snZBZuGNKT9a3DPny7IC1S0lHcaam34ogWwMi3FxPGJt/Lg52kARlkF5TDhcP
+N6H0EB/iqDRjOOUoEVm8um5XOSR1FpEiAdD0DON3y9JPATnrYq7sgYZz3BVImYY+
+N/jV8fEiN0a34pcOq8NQedMuOsJHNBS5MtbQH/kJLq0MXBpXekGlHo4MKw0trISc
+Rw3pW6/BFfhPJLni29g9tw==
+=fRFW
+-----END PGP MESSAGE-----
+
diff --git a/src/core/templatetestdata/openpgp-inline-signed-broken.mbox b/src/core/templatetestdata/openpgp-inline-signed-broken.mbox
new file mode 100644
index 0000000..fc0d2df
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-signed-broken.mbox
@@ -0,0 +1,26 @@
+From: test <test@kolab.org>
+To: you@you.de
+Subject: test
+Date: Tue, 25 Aug 2015 16:47:10 +0200
+Message-ID: <1662097.O9NVKTC5pT@11b508545ba2>
+X-KMail-Identity: 1428848833
+User-Agent: KMail/4.13.0.3 (Linux/4.1.0-rc5-siduction-amd64; KDE/4.14.3; x86_64; git-7c86098; 2015-08-23)
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset="iso-8859-1"
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+ohno break it =F6=E4=FC
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iQEcBAEBCAAGBQJV3H/vAAoJEI2YYMWPJG3mEZQH/2mbCDa60risTUsomEecasc7
+kIc8Ch+OjZwlEQWKEiFbpLCMVjMwf0oGFcpc/dqnIyIqeVvF6Em+v7iqKuyAaihu
+7ZxxC816tDDI7UIpmyWu39McqGB/2hoA/q+QAMgBiaIuMwYJK9Aw08hXzoCds6O7
+Uor2Y6kMSwEiRnTSYvQHdoaZY3F9SFTLPgjvwfSu7scvp7xvH7bAVIqGGfkLjXpP
+OFkDhEqUI7ORwD5cvvzEu57XmbGB7Nj5LRCGcTq6IlaGeN6Pw5+hOdd6MQ4iISwy
+870msP9NvktURnfXYC3fYnJaK/eUln7LYCBl/k04Z/3Um6dMYyQGh63oGv/2qxQ=3D
+=3D4ctb
+-----END PGP SIGNATURE-----
diff --git a/src/core/templatetestdata/openpgp-inline-signed.mbox b/src/core/templatetestdata/openpgp-inline-signed.mbox
new file mode 100644
index 0000000..6099a51
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-signed.mbox
@@ -0,0 +1,26 @@
+From: test <test@kolab.org>
+To: you@you.de
+Subject: test
+Date: Tue, 25 Aug 2015 16:47:10 +0200
+Message-ID: <1662097.O9NVKTC5pT@11b508545ba2>
+X-KMail-Identity: 1428848833
+User-Agent: KMail/4.13.0.3 (Linux/4.1.0-rc5-siduction-amd64; KDE/4.14.3; x86_64; git-7c86098; 2015-08-23)
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset="iso-8859-1"
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+ohno =F6=E4=FC
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iQEcBAEBCAAGBQJV3H/vAAoJEI2YYMWPJG3mEZQH/2mbCDa60risTUsomEecasc7
+kIc8Ch+OjZwlEQWKEiFbpLCMVjMwf0oGFcpc/dqnIyIqeVvF6Em+v7iqKuyAaihu
+7ZxxC816tDDI7UIpmyWu39McqGB/2hoA/q+QAMgBiaIuMwYJK9Aw08hXzoCds6O7
+Uor2Y6kMSwEiRnTSYvQHdoaZY3F9SFTLPgjvwfSu7scvp7xvH7bAVIqGGfkLjXpP
+OFkDhEqUI7ORwD5cvvzEu57XmbGB7Nj5LRCGcTq6IlaGeN6Pw5+hOdd6MQ4iISwy
+870msP9NvktURnfXYC3fYnJaK/eUln7LYCBl/k04Z/3Um6dMYyQGh63oGv/2qxQ=3D
+=3D4ctb
+-----END PGP SIGNATURE-----
diff --git a/src/core/templatetestdata/openpgp-inline-signed.mbox.html b/src/core/templatetestdata/openpgp-inline-signed.mbox.html
new file mode 100644
index 0000000..d32d023
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-signed.mbox.html
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">ohno öäü</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-inline-signed.mbox.inProgress.html b/src/core/templatetestdata/openpgp-inline-signed.mbox.inProgress.html
new file mode 100644
index 0000000..45a999d
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-signed.mbox.inProgress.html
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signInProgress">
+ <tr class="signInProgressH">
+ <td dir="ltr">Please wait while the signature is being verified...</td>
+ </tr>
+ <tr class="signInProgressB">
+ <td/>
+ </tr>
+ <tr class="signInProgressH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-inline-signed.mbox.tree b/src/core/templatetestdata/openpgp-inline-signed.mbox.tree
new file mode 100644
index 0000000..23e9988
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-signed.mbox.tree
@@ -0,0 +1,3 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::SignedMessagePart
diff --git a/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox b/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox
new file mode 100644
index 0000000..5ecfc61
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox
@@ -0,0 +1,34 @@
+From t.glaser@tarent.de Mon Aug 18 10:59:01 2014
+Return-Path: <t.glaser@tarent.de>
+Received: from tgwrk.ig42.org (tgwrk.ig42.org.
+ [2a01:238:4200:4342:321e:80ff:fe12:4223]) by mx.google.com with ESMTPSA id
+ pe6sm40660135wjb.38.2014.08.18.01.59.01 for <t.glaser@tarent.de>
+ (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18
+ Aug 2014 01:59:01 -0700 (PDT)
+Date: Mon, 18 Aug 2014 10:59:00 +0200 (CEST)
+From: Thorsten Glaser <t.glaser@tarent.de>
+X-X-Sender: tglase@tglase.lan.tarent.de
+To: Thorsten Glaser <t.glaser@tarent.de>
+Subject: Test for Mozilla bug#1054187
+Message-ID: <alpine.DEB.2.11.1408181058220.30583@tglase.lan.tarent.de>
+User-Agent: Alpine 2.11 (DEB 23 2013-08-11)
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDTFSKP3rBSXcBBAClcHW9/6kw8i+XkMes47vcmGBCjIC0UysqkVYyNqT2Y6tb
+s7pdfZFQPVWbdYoxP0WLzGgNFEWttlojWJmaTNiDVLOP22hFuJL3LUxesC1cWE+6
+foCkENDI2YnkAw4o5HTrmHoBlG7N/Nzzu3+1kfUVANSoAhgWd5WJDsXyvPMoD9LA
+7gHZZmq4bK5OwTHvAvdUOstCGd6Wqj5zkVXT59WOfYxYLcrGZ8I62lBS1/90TlJe
+iEolBoaufZT7K2YW7k/+DPYgRIzvWISTccPWpcS7OOyifvK4zOFJeGsVq/DowP52
+Zt1xQj1En5CVUT/MkpvS1rB4BfSuhJETZdtUGveUe0HhcAzbnbIJULdK0p1XAo4O
+q84vmOVD0BtKJVy/+rIW7h4aOr8C66HNDKLiUzWtdEaG97GQwhpQZ05JNsulG9tV
+wyP6UWmDMY/5YuRoVHOYx8NXORHX4E5P151Tr5Fted9TpXI/gOTHHyPK5AiiDG6U
+ja4fgkO6hYnjHxqqooxfGj+pg5atynnbMTALfWoXxmqyKrIB+SKqnsw+sCL3ro2x
+j54EGZZ9wM6AYDQ48lJV5beWgQ55r28HxlhPNl/driNkMZHUazAdsubWo5NqJPXl
+HrHQ4lv53ZUohbpVvdkmsldWhA5me7yRhQHytTQMMfadmSiYZVsy53siQ/5gEhUv
+DQ4ggpUjf8twqR+5TLue5/r/fRXkGfKr5U1w4qcMcFcGwEIbwE+qtIDY0Cw/+xU=
+=Ecl0
+-----END PGP MESSAGE-----
diff --git a/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox.html b/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox.html
new file mode 100644
index 0000000..3ed4e0f
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">This is a utf-8 message you see - öäüß@ł€¶ŧ←↓→øþ</div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox.tree b/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox.tree
new file mode 100644
index 0000000..ea8223f
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-inline-wrong-charset-encrypted.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
diff --git a/src/core/templatetestdata/openpgp-multipart-embedded-signed.mbox b/src/core/templatetestdata/openpgp-multipart-embedded-signed.mbox
new file mode 100644
index 0000000..23f4305
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-multipart-embedded-signed.mbox
@@ -0,0 +1,83 @@
+To: test@kolab.org
+From: test1 <test1@kolab.org>
+Openpgp: preference=signencrypt
+Autocrypt: addr=test1@kolab.org; prefer-encrypt=mutual; keydata=
+ xsBNBFrd3FcBCADAGsU4BTBJ7nXGZ2IV6ZpSDcuZeCteDdrp9YNGYdax49Z9rn2RIfMur07i
+ A3zkLuQSI63QpWr/sp8Kkcs+OMRfeNAHSyQcdOwE/SU/PF45LHYcgvdgL7bvNRiyrn++eXar
+ woCH/QNZFgsy4PQCBW4DXor4jeDgeKisdk+ArpSY+Dd5l+Gdna8GQyUHWOL15gKUEDBq9dta
+ fswI18LxTSIbofsSxnQ0BgHNgn4bFXRLWiFJMyjvXXwZAXmChpxchESeIyu3Bvu38kA+jNDh
+ QmJL359mbXtu6JtvUjL0T9xhydHhGQ8iHCUpUkAh50KDJUUFQAUD+wSeMbsr7dk/osBdABEB
+ AAHNHVRlc3QxIEtvbGFiIDx0ZXN0MUBrb2xhYi5vcmc+wsCOBBMBCAA4FiEEy9EWSF25Vgyj
+ zZHgLjt3h7G3WSAFAlrd3FcCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQLjt3h7G3
+ WSBwjAf6A9D/BOo6ixWfrTAfunk06TIt309P33/aIrhmICUoJ3KxatnMfcFr9GDnVtGv7RZl
+ VG43dWLMz8ghjGVjWOQUzlYl19HS/7KfHFE3jQHawcidYHcsVBbD/Ml9lCRnE4CcO/7MqObh
+ FHVIO+M0XJK82Qqu1kZ2ySNOMG+DJ3JGMEWMwrf8HjdwfANCn9uW4G9+q3dyN7TWUaYVLf74
+ Ekz2KpCxi0Y/b/01+8UR6iSRbn+5R2CIPhgdrrfYlHaB1HHeeJlue8JK3zxYcRTfD4B2c8Jj
+ UAMO0Y8A7PMTj9SpnBt+t4XUyrTwwqLwulRBAQBHSPI7jQ6JVM2yTOe7Yy1dbc7ATQRa3dxX
+ AQgAy/RH8KEQHk2SJ60G0YJkOSioGNU+sAMP6rKIH8AXljZEwriiWqxcunoHlrOHOfuyBBL2
+ TTiien0247g7q2i7aPBZhll7/cp4DZKcsLZ9QIkB4sHY1SaVT865dIfhoxcKwi8NzbemDsUQ
+ QB6f9P3CSZqFW2EohzKf3vfYnLVLTRvzlndAzThYXso1iWeX9v1JtzOi4w7JP5RvTMx+FXCy
+ ibfkLGJL2ZG6rapK7jtn8SfJGiQeH441OmEDjtfqrADKDY/pKJdPeEzakuZuxhrh8FtFjtZX
+ WU9dbzE46uXUA/ChLW0H/zuyxseVCHyAbF5pFyibGfk1hmYFVwjQotHojwARAQABwsB2BBgB
+ CAAgFiEEy9EWSF25VgyjzZHgLjt3h7G3WSAFAlrd3FcCGwwACgkQLjt3h7G3WSDJrAgApMbl
+ U4PAoe04jVSIMApU8Q22NNysZGS3l6KLpOqS/1DXd2U0S6EbFcCmUUwu3tk6nz6qCBKu7SEe
+ E1bjJUSB5880IA3C8HC1VDHCdVMJGJKvpqnj/4Jf8STQROL7UeQXZvby5CRZGMV7lBDAquG6
+ vk3Eo3CeAfKel+XtHA/qruayTVHn1PV3/22ThcnXkwB3Mpdflz/tmPwHZqwOPavpJMckE03K
+ HNzSulXDNXdGqd4kKu43UIYnfm/3jnfK/LOrOK8zl40mk26Vm19MMRgc2TP6a70J5r6H1RLU
+ BTEkoVskD4m6I1G4FEIPq1g8jv7e0zcukh3vdpdKKxR+69M/2w==
+Message-ID: <a85660b4-6fdf-9d74-ad1c-e6899f57e4b0@kolab.org>
+Date: Tue, 24 Apr 2018 18:47:20 +0200
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
+ Thunderbird/52.7.0
+MIME-Version: 1.0
+Subject: Encrypted Message
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQgA3kD1WyRdQawpduoJ3J9h3SpSC7YiNqU7aiyTMUGAdbGO
+BMhIzPdEkai9P486Wpg5h+ywmQrk3KoH/GioRjwvIaeNZY/cmxetT0/ig5rrnqxM
+j63vFFbCbE6kSeDbvYqF5mL3XH+TqpZRW5ApPSgkr7jMDOK7k1eF5A5ey84LYFny
+Ky63LGy5KEQk7E1cMLZOHAZnorcm7Lh3RVWgPj+DRDowMn3yVdFOpT5bQ66zAIkc
+Bs9IWuq0lMxGsdfRv5wlzUqZJGge3oT7tkZhI6D56MLIjqg7SurQMiWrn6wh51Sr
+R7W9N6lHyrKrffP2VjFwPPK1/Vjd0Am4gTPkf+GcJ4UBDAPKpRg2CPD7UAEIAJuC
+8s2uGAGF9zgoQdrmL6bInA5JCQiZI+B5Jgg9wQ/dW3idJN9esr1Ff7/d8DVuzf1V
+bFydMBqQk5Zkp5FuDhJsfGWK+NPJBUaOKGlGqRPZX+SjP2k1SuDoxvdxvtWYBVOt
+Zhq03zczRWo4dxJ++WYqxu6gMlBCO+z84kfhknWyBNeN7+8mmYGNWDo/ARWhspO0
+CIOfBCFeqwCpCZLIiCTBjGg98Ed+SGIdjQwq97suh3nANlKFpiNp2+w02H+rarMj
+IUkaVrKIGqaKw3X7JxuBcD8gzW2nyw6MKrm4q2iTCXYQb8lpUuvITJmNJFIkTmpt
+DjlDEZdJiNhs0IOIepbS6QETyg97HVDWmL4frclu4QAeF28007HHlg805IAjAZ/x
+wU9P3/VH74zZJinBLmXaIe3XidksWHES3H8ay+UtsUafC+4icSZRwplW9MexBNsl
+mJ4pfrHtAf+t+Tk0/BbuanSbL6OGA1wG7GVEfj39rsc4vYgSS/NLI5njq55AXFVG
+syeplNt2FNw3Ii6V3NnEkvlKcmj8sVnGCAIIeaG9yiAJ5qOsHP37sk3TAduKRGSE
+d8Ldty4mBftkTPyOG8eMr28XCldnhqnNWbcP9t2maKAyQ4bjv15Erx+1AfXXGtVq
+3PsVsUN2YQIib7VLBjOYzW9jysQWFFuE26sE2oH4of34E0jD6GV3d6Ng8gTtpIhO
+BWePihWtHdBGsNNoYrp19IXX594hayaF+WV8rpaBS0KxVoEHZhFusyvxcDiQnsO7
+3QPVu3btkkte8Hq9KtoFVeFm91M9fii3m3vFBsPu7weMm2zBCxTTRdLd5X+yEYah
+n8tKnUUFHFIcgdZ3FIoQmIJrrYtcjLnvXeDdB2F6HX7z9KMQ5RzKBZcCMnVViKxl
+PIF3bikUzhtg55BGNyiAu2sz1wLzOoERsb38GN3UK4qinFVXLHxXhcdpEXKocb+k
+PyRTykAunux+J5+klASl/k85s8gNvMH1CijdNseQEqLlsISERu+zxyFPPit6/tP6
+wDyvhjHcGV2Jpw5T01n5aJpKklbGb9qUBkzlfayc03ebtqPzBTwG8NEzu9rlZQpr
+ldbYUvXYBHSOqk2Z403I0PWR5DlcasFgciHFQw9PODRNK+OVY46btfyBXABlzYTH
+OMfnHd8HoCOKCp29+ugK2G8y91JNd4M8B2xI1zACFB3hlDoc7K4h85Yi0cCYZahX
+OUWZxSZjfl8X793RT5h+2BE+0bRGLOJIGhAxe+JKUC7O5njXBc3O5/ocfLif2t4y
+eYJmu/w46hJUPxYk4Poe3Oppcim1hKHI7DVSJeJydBRqJgDzRzQ/1u7dD15z69/0
+rbexuTVmwmXN695s/V0=
+=1o3V
+-----END PGP MESSAGE-----
+
+--aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm--
diff --git a/src/core/templatetestdata/openpgp-multipart-embedded.mbox b/src/core/templatetestdata/openpgp-multipart-embedded.mbox
new file mode 100644
index 0000000..d5fc4ca
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-multipart-embedded.mbox
@@ -0,0 +1,76 @@
+To: test@kolab.org
+From: test1 <test1@kolab.org>
+Openpgp: preference=signencrypt
+Autocrypt: addr=test1@kolab.org; prefer-encrypt=mutual; keydata=
+ xsBNBFrd3FcBCADAGsU4BTBJ7nXGZ2IV6ZpSDcuZeCteDdrp9YNGYdax49Z9rn2RIfMur07i
+ A3zkLuQSI63QpWr/sp8Kkcs+OMRfeNAHSyQcdOwE/SU/PF45LHYcgvdgL7bvNRiyrn++eXar
+ woCH/QNZFgsy4PQCBW4DXor4jeDgeKisdk+ArpSY+Dd5l+Gdna8GQyUHWOL15gKUEDBq9dta
+ fswI18LxTSIbofsSxnQ0BgHNgn4bFXRLWiFJMyjvXXwZAXmChpxchESeIyu3Bvu38kA+jNDh
+ QmJL359mbXtu6JtvUjL0T9xhydHhGQ8iHCUpUkAh50KDJUUFQAUD+wSeMbsr7dk/osBdABEB
+ AAHNHVRlc3QxIEtvbGFiIDx0ZXN0MUBrb2xhYi5vcmc+wsCOBBMBCAA4FiEEy9EWSF25Vgyj
+ zZHgLjt3h7G3WSAFAlrd3FcCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQLjt3h7G3
+ WSBwjAf6A9D/BOo6ixWfrTAfunk06TIt309P33/aIrhmICUoJ3KxatnMfcFr9GDnVtGv7RZl
+ VG43dWLMz8ghjGVjWOQUzlYl19HS/7KfHFE3jQHawcidYHcsVBbD/Ml9lCRnE4CcO/7MqObh
+ FHVIO+M0XJK82Qqu1kZ2ySNOMG+DJ3JGMEWMwrf8HjdwfANCn9uW4G9+q3dyN7TWUaYVLf74
+ Ekz2KpCxi0Y/b/01+8UR6iSRbn+5R2CIPhgdrrfYlHaB1HHeeJlue8JK3zxYcRTfD4B2c8Jj
+ UAMO0Y8A7PMTj9SpnBt+t4XUyrTwwqLwulRBAQBHSPI7jQ6JVM2yTOe7Yy1dbc7ATQRa3dxX
+ AQgAy/RH8KEQHk2SJ60G0YJkOSioGNU+sAMP6rKIH8AXljZEwriiWqxcunoHlrOHOfuyBBL2
+ TTiien0247g7q2i7aPBZhll7/cp4DZKcsLZ9QIkB4sHY1SaVT865dIfhoxcKwi8NzbemDsUQ
+ QB6f9P3CSZqFW2EohzKf3vfYnLVLTRvzlndAzThYXso1iWeX9v1JtzOi4w7JP5RvTMx+FXCy
+ ibfkLGJL2ZG6rapK7jtn8SfJGiQeH441OmEDjtfqrADKDY/pKJdPeEzakuZuxhrh8FtFjtZX
+ WU9dbzE46uXUA/ChLW0H/zuyxseVCHyAbF5pFyibGfk1hmYFVwjQotHojwARAQABwsB2BBgB
+ CAAgFiEEy9EWSF25VgyjzZHgLjt3h7G3WSAFAlrd3FcCGwwACgkQLjt3h7G3WSDJrAgApMbl
+ U4PAoe04jVSIMApU8Q22NNysZGS3l6KLpOqS/1DXd2U0S6EbFcCmUUwu3tk6nz6qCBKu7SEe
+ E1bjJUSB5880IA3C8HC1VDHCdVMJGJKvpqnj/4Jf8STQROL7UeQXZvby5CRZGMV7lBDAquG6
+ vk3Eo3CeAfKel+XtHA/qruayTVHn1PV3/22ThcnXkwB3Mpdflz/tmPwHZqwOPavpJMckE03K
+ HNzSulXDNXdGqd4kKu43UIYnfm/3jnfK/LOrOK8zl40mk26Vm19MMRgc2TP6a70J5r6H1RLU
+ BTEkoVskD4m6I1G4FEIPq1g8jv7e0zcukh3vdpdKKxR+69M/2w==
+Message-ID: <9af7e819-eb6c-d243-cd2d-b04d23ba2c0d@kolab.org>
+Date: Mon, 23 Apr 2018 17:11:58 +0200
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
+ Thunderbird/52.7.0
+MIME-Version: 1.0
+Subject: Encrypted Message
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQf/QznYpLuJ+BB9BBoYFjISqGek8blRD8UVO96E8yYSeAXL
+uILJUakYjykzwg+Yd+yjR1arye1BYEnrpftXVR//WdkitPsq2nzxkHynCJCiMsl8
+LIx2u8OoAXJa5L0ohERKt/MAJn6H+x2+WxVzIGtaOw7K7rBL+J800wB6KkxKdvlF
+rFkfmlfJOKueOPUVzvQHJBLJXcdKH5z8GikESKrRGWpTn5DdFIG2nmxuMhNndcrd
+6oXZ11PMKr3QTrjG7huntvASQQ9Vd3Kxvi8kqaJIdspRckoZd65Xo+UdC+VWFYH8
+ynsWX3F3zqRxHhK7IZgaTLHRc55NzdXLmtQ5zVt6pIUBDAPKpRg2CPD7UAEIALbc
+/NnS49ghW+fN7RkIwHyXX/kcZk/+87ydT6Tvh3xdcgZY9Aczwcx64kvP4M5PXaaT
+xxsXK0vLtk19vGJEeMzHGHacp1QQzZwCRa4Pmi2cyiK+J5TpF8RapZflLwIQ+zWk
+WRSa6jpd5SzQvEQ8t8OQ9PYOEhNYZLHkZCRK3bwY7jW1RzqnWgHbHk8M70YzBZw4
+RMLwNuNfYw25TJFxnlhPUiN56z0ZsNOj16TTyINLI1pCLG8boKfEzCCMyIHZpU+U
+4DGM9ziLA/gH1MYcONPogwi24pUXW2ssoT5bIfNFGhT8DAZYAwyHeJnrCbEdcfp5
+CepYtnkH1Gfz1KQ66oHSwNUBqvtjoE5wA+EYxoTopJ5/g5qtcfsYh9o6ksepFjZb
++rzhzI8XtGs43+YE1QrOx9N7E/XiG1iXTqeqyKfq6vGgfE4tfgZlRcnI1sllwX2X
+/2Va7aWr7VRt2DJ444XKRtmwP2U47lqM0SEGb01SOI2WBfxB0lAsetNS7t83KoCb
+W/JHj9zEpLEiGr8lrI+8ydXlfFA4nTlugwJP2o42fU9EMDzieUFfaX7wzKKXQq8R
+ek04j5PcJSeRBr5/HyrAR3QUoB8qL/9KqOxmcW/aKLteshYWuDWRhDYaTIsLJV6p
+Or4+8qV5bonBZHuRXDOt3qxWd0++msUqj8Kkw0cZ5ID7EsQFdYBapxDz7ZKj5PM6
+AEmzYarsM9FKsVMx7KMxIpkOOEWXN6/jrhIO1rkk4WQvl79BW9gj+6DnBwpM4R/k
+bnuWedSvbL/4ee21XWf4p01aF+RHn1UbvOqkfwX69M00crE7PnNaeMbKy46bcELF
+OTNGkv7SYoUmctTINyV3zPWxJnsIkrSFurKXF/+6tSnaItU1ziM=
+=L0oI
+-----END PGP MESSAGE-----
+
+--EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc--
+
diff --git a/src/core/templatetestdata/openpgp-signed-apple.mbox b/src/core/templatetestdata/openpgp-signed-apple.mbox
new file mode 100644
index 0000000..ba85df8
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-apple.mbox
@@ -0,0 +1,129 @@
+Return-Path: <sender@example.org>
+Sender: sender@example.org
+From: Quonk <sender@example.org>
+X-Pgp-Agent: GPGMail
+Content-Type: multipart/signed; boundary="Apple-Mail=_12345678-1234-1234-1234-12345678"; protocol="application/pgp-signature"; micalg=pgp-sha512
+Subject: PDF
+Date: Mon, 16 Jan 2017 15:14:51 +0100
+Message-Id: <199E2891-3080-42B6-ABCD-1230B78EBABC@example.org>
+To: Konqi <konqui@example.org>
+Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
+
+
+--Apple-Mail=_12345678-1234-1234-1234-12345678
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_23456789-1234-1234-1234-12345678"
+
+
+--Apple-Mail=_23456789-1234-1234-1234-12345678
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain;
+ charset=utf-8
+
+
+
+=E2=80=A6
+Quonk
+Klar=C3=A4lvdalens Datakonsult AB, a KDAB Group company
+Sweden (HQ) +46-563-540090, Germany +49-30-521325470
+KDAB - The Qt, C++ and OpenGL Experts | www.kdab.com
+
+
+--Apple-Mail=_23456789-1234-1234-1234-12345678
+Content-Type: multipart/mixed;
+ boundary="Apple-Mail=_34567890-1234-1234-1234-12345678"
+
+
+--Apple-Mail=_34567890-1234-1234-1234-12345678
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">pre attachment</div></body></html>
+--Apple-Mail=_34567890-1234-1234-1234-12345678
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+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
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+--Apple-Mail=_34567890-1234-1234-1234-12345678
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html;
+ charset=utf-8
+
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+</body></html>
+
+--Apple-Mail=_34567890-1234-1234-1234-12345678--
+
+--Apple-Mail=_23456789-1234-1234-1234-12345678--
+
+--Apple-Mail=_12345678-1234-1234-1234-12345678
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment;
+ filename=signature.asc
+Content-Type: application/pgp-signature;
+ name=signature.asc
+Content-Description: Message signed with OpenPGP using GPGMail
+
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAEBCAAdFiEEG6Mjkys/qoJhMseejZhgxY8kbeYFAlh/rcwACgkQjZhgxY8k
+beYaoQf+Miuj4cnVumYXMopVMHJs6AK6D+uKO4jXHl/XUK3TOg17kFUZDEN/9JFd
+SCN9oD5emzpBl4GSmYBbjvLvXTHTLHviVD6In35+wgMlQL+xfAv91Dx56QslCQMo
+UhDYGgFPiEAfCY2UozQD/R3KWOHFB9bNdtOM0hdT84D35W2PZhzTlz2q3hpq3bYw
+lNhFVebqURh9OEAZglB3Q9oDE13PJDtRLflKquC5ZU8N4Bj23TCOgxv4FzSyyAn/
+XalEKdwYrkZ8p4rRtd0YvAVevDUC4pQNGTgfsXgldoPEGUBXsdlczLPEj2sjLvNu
+HX1GMDrZL/+7DZsURYV5DjhsqWzExQ==
+=q0F6
+-----END PGP SIGNATURE-----
+
+--Apple-Mail=_12345678-1234-1234-1234-12345678--
+
+
diff --git a/src/core/templatetestdata/openpgp-signed-apple.mbox.html b/src/core/templatetestdata/openpgp-signed-apple.mbox.html
new file mode 100644
index 0000000..234eaae
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-apple.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">
+ <div class="">pre attachment</div>
+ </div>
+ </div>
+ <a name="att1.2.2"/>
+ <div id="attachmentDiv1.2.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2.2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-apple.mbox.inProgress.html b/src/core/templatetestdata/openpgp-signed-apple.mbox.inProgress.html
new file mode 100644
index 0000000..b5236fe
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-apple.mbox.inProgress.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signInProgress">
+ <tr class="signInProgressH">
+ <td dir="ltr">Please wait while the signature is being verified...</td>
+ </tr>
+ <tr class="signInProgressB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">
+ <div class="">pre attachment</div>
+ </div>
+ </div>
+ <a name="att1.2.2"/>
+ <div id="attachmentDiv1.2.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2.2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signInProgressH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-apple.mbox.tree b/src/core/templatetestdata/openpgp-signed-apple.mbox.tree
new file mode 100644
index 0000000..3ade4ef
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-apple.mbox.tree
@@ -0,0 +1,3 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::AlternativeMessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox b/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox
new file mode 100644
index 0000000..70bf4ef
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox
@@ -0,0 +1,117 @@
+Return-Path: <kde-pim-bounces@kde.org>
+X-Sieve: CMU Sieve 2.3
+X-Virus-Scanned: amavisd-new at site
+Authentication-Results: linux.site (amavisd-new); dkim=pass (1024-bit key)
+ header.d=kde.org
+Received: from postbox.kde.org (localhost.localdomain [127.0.0.1])
+ by postbox.kde.org (Postfix) with ESMTP id 867B8BF274;
+ Sat, 22 Aug 2015 09:32:21 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=kde.org; s=default;
+ t=1440235945; bh=WhGhdxvdvRs04JdzjAkPcBVPmx7putlUE3ka9dvMIoc=;
+ h=From:To:Date:Subject:Reply-To:List-Id:List-Unsubscribe:List-Post:
+ List-Help:List-Subscribe:From;
+ b=mvxeMMGebkZKq7hekRypkPvt6S8lidA/8vQ3AC5Kft8HDmj8lDUpvOo0VXwCF0OG+
+ iAOPKxYtxclf8PgYvgK8NIzr56CwcdlNm3/PpoSe20P3I1DGFpDDMFtW5tOD05SSHz
+ 5L6PCQyb+KFW1GrXgcm+eHshzJh3U8nHcyd8Vw2E=
+X-Original-To: kde-pim@kde.org
+Delivered-To: kde-pim@localhost.kde.org
+X-Virus-Scanned: amavisd-new at site
+From: Volker Krause <vkrause@kde.org>
+To: KDEPIM <kde-pim@kde.org>
+Date: Sat, 22 Aug 2015 11:31:38 +0200
+Message-ID: <11737387.KAAPH2KlE3@vkpc5>
+Organization: KDE
+User-Agent: KMail/4.14.3 (Linux/3.16.6-2-desktop; KDE/4.14.7; x86_64;
+ git-c97b13e; 2014-12-30)
+MIME-Version: 1.0
+Subject: [Kde-pim] Phabricator Project Setup
+X-BeenThere: kde-pim@kde.org
+X-Mailman-Version: 2.1.16
+Precedence: list
+Reply-To: KDE PIM <kde-pim@kde.org>
+List-Id: KDE PIM <kde-pim.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/kde-pim>,
+ <mailto:kde-pim-request@kde.org?subject=unsubscribe>
+List-Post: <mailto:kde-pim@kde.org>
+List-Help: <mailto:kde-pim-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/kde-pim>,
+ <mailto:kde-pim-request@kde.org?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============1910646461178264940=="
+Errors-To: kde-pim-bounces@kde.org
+Sender: "kde-pim" <kde-pim-bounces@kde.org>
+
+
+--===============1910646461178264940==
+Content-Type: multipart/signed; boundary="nextPart2440608.7aDuJBW7cK"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+--nextPart2440608.7aDuJBW7cK
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset="us-ascii"
+
+Hi,
+
+I've talked to Ben, the current Phabricator test setup would actually b=
+e=20
+usable for "production" use for task/project management for us, without=
+=20
+causing the sysadmins unreasonable trouble when migrating to the full=20=
+
+production deployment of Phabricator eventually.
+
+Phabricator project layout it orthogonal to repo layout, so we can stru=
+cture=20
+this however we want. Among other teams I see at least the following la=
+youts:
+- single project for everything
+- a project per release
+- a project per component/module (ie. close to the repo layout)
+
+How do we want to structure this?
+
+I would start with a single project to not fragment this too much, as w=
+e have=20
+a relatively small team actually looking into this, so everyone is look=
+ing at=20
+most sub-projects anyway. And should we eventually hit scaling limits, =
+we can=20
+always expand this I think.
+
+We of course should also talk about what we actually want to put in the=
+re. My=20
+current motivation is having a place to collect the tasks for getting m=
+ore of=20
+the former pimlibs into KF5, and anything else I run into on the way th=
+ere=20
+that we eventually should clean up/improve.
+
+regards,
+Volker
+
+--nextPart2440608.7aDuJBW7cK
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iD8DBQBV2EF9f5bM1k0S0kcRAk9cAJ4vHEh9JkT3Jy3EfxII7nP9HPmxrQCgjeLF
+eYXCyN9NRAyC6CHeNnWZN10=
+=Y8W4
+-----END PGP SIGNATURE-----
+
+--nextPart2440608.7aDuJBW7cK--
+
+
+--===============1910646461178264940==
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KS0RFIFBJTSBt
+YWlsaW5nIGxpc3Qga2RlLXBpbUBrZGUub3JnCmh0dHBzOi8vbWFpbC5rZGUub3JnL21haWxtYW4v
+bGlzdGluZm8va2RlLXBpbQpLREUgUElNIGhvbWUgcGFnZSBhdCBodHRwOi8vcGltLmtkZS5vcmcv
+
+--===============1910646461178264940==--
+
diff --git a/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox.html b/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox.html
new file mode 100644
index 0000000..50eddaa
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox.html
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">Hi,</div>
+ <br/>
+ <div dir="ltr">I've talked to Ben, the current Phabricator test setup would actually be&nbsp;</div>
+ <div dir="ltr">usable for "production" use for task/project management for us, without&nbsp;</div>
+ <div dir="ltr">causing the sysadmins unreasonable trouble when migrating to the full&nbsp;</div>
+ <div dir="ltr">production deployment of Phabricator eventually.</div>
+ <br/>
+ <div dir="ltr">Phabricator project layout it orthogonal to repo layout, so we can structure&nbsp;</div>
+ <div dir="ltr">this however we want. Among other teams I see at least the following layouts:</div>
+ <div dir="ltr">- single project for everything</div>
+ <div dir="ltr">- a project per release</div>
+ <div dir="ltr">- a project per component/module (ie. close to the repo layout)</div>
+ <br/>
+ <div dir="ltr">How do we want to structure this?</div>
+ <br/>
+ <div dir="ltr">I would start with a single project to not fragment this too much, as we have&nbsp;</div>
+ <div dir="ltr">a relatively small team actually looking into this, so everyone is looking at&nbsp;</div>
+ <div dir="ltr">most sub-projects anyway. And should we eventually hit scaling limits, we can&nbsp;</div>
+ <div dir="ltr">always expand this I think.</div>
+ <br/>
+ <div dir="ltr">We of course should also talk about what we actually want to put in there. My&nbsp;</div>
+ <div dir="ltr">current motivation is having a place to collect the tasks for getting more of&nbsp;</div>
+ <div dir="ltr">the former pimlibs into KF5, and anything else I run into on the way there&nbsp;</div>
+ <div dir="ltr">that we eventually should clean up/improve.</div>
+ <br/>
+ <div dir="ltr">regards,</div>
+ <div dir="ltr">Volker</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">KDE PIM mailing list <a href="mailto:kde-pim@kde.org">kde-pim@kde.org</a></div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/kde-pim">https://mail.kde.org/mailman/listinfo/kde-pim</a>
+ </div>
+ <div dir="ltr">KDE PIM home page at <a href="http://pim.kde.org/">http://pim.kde.org/</a></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox.tree b/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox.tree
new file mode 100644
index 0000000..2753978
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-base64-mailman-footer.mbox.tree
@@ -0,0 +1,7 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox b/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox
new file mode 100644
index 0000000..7939af8
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox
@@ -0,0 +1,52 @@
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP signed+encrypted with 2 text attachments
+Date: Sun, 30 Aug 2015 12:01:20 +0200
+Message-ID: <4368981.7YjI8cQ7Br@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart3246504.5GAivIUY6Q"; protocol="application/pgp-encrypted"
+
+--nextPart3246504.5GAivIUY6Q
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart3246504.5GAivIUY6Q
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQf9Ge9nFjtqLOKSQNhobS+0iCB2GUdLP7LCIWu6gBo9pWa+
+9wCNLxwmhqWOYv37RAk6v5VXjCYUX3/7UF7e7epSqo7YjS7VsUOow0gszQjJqocK
+Gd1T1oyNknza6oaRGgVeWPOZVAPb+Gj+3yS8VZa33Aq2ay7F7eI8dvRUN7Z3TuAh
+BOVV+itwHHzanfNG8RoCvokcE1vkANfvI3u7R4Q93U8Q+Qmjh1L5ypPe37N5BtAF
+UCPCiD9XySHjm5PyXx8ImrJDeUgFs1YhYox4B6NKsCcmm7R8NdYZYGNo1kzR4yKV
+FzMu1NUU/bwtvrpRXLe4dBL1pEkO2PpuMYDUR9+WVNLpAafTDbeIHPi/Z8v48seQ
+JxscRehfOB3DG1xrvQTMFJc3UJEBqNMkM9gOxLKOQcCcZp79FMsfWB7EjjlPR1Oh
+gyA5NR+4HxNw75Q5FpZ7qziWvIrb1Kzwfbsb9Dimx+MmiNMX9kUEPqkPo4pspwZ9
+pLCfjYUnikcnYyQ0b2ojsjQmLotYlz8mK0GH9L40zfFb1+oYfuu4Y9FPzHdPzNjx
+aFRY8cJQy1CNkCITsz53kni5rk3zVsapq0+NeBDEBYoUqX815fo0W+HVF7/j/uhT
+lPkJhRnJZPwOr5XgzPk3Yk9GlSRLJiqKF4/G8ya/nKyiNIebKM7DTcldWCmZM95B
+BIftaRN4hvVBhl0ElFnZg0xLP1AePFuuplRQTDuW8gpaNKrxwXiF3d4XJdVmjh/p
+YmnieIhbogUHFXugc3g9rE8c3oHA8b514ajSHUm9DXc0cXqw/DrsxXZtKXb+IDpF
+uv9AiM7bSU7I0h/AlaAL5uU0mL58XhkXXFQtaTbMS+u4Rv/Ie1IsnlWR4QSc4m7x
+91rfC1fIf/U43wwwnR+UjIRyr2vWcgTTpwnsZFDD8eSoJ8WqinazJRlMud6Sv+L6
+gI2wiCYyEYHrFEHy0WuS2nUSMNl5AWm31zB+erfKSLZr4EIFBIy4dJWZKwYhi46Q
+pDbw1Svf7xVdHix+5UkkYy3AY70ipf5bxA7FTJ1geJa86VKShDkqVpU6EtT+YQIJ
+7geWCyskT0DTaPp6qc8QpjajmRYssDcjiTke5WiqLQAjm8BIuny0fNm6kNC8KMS7
+eGmaBI2nB92bgrqlAW+LhvW95YB0dfO8beg3jKk8s6OJ4gicGFEFp6hXFfEsEZiv
+gi7Q2QCVFvCV11884H8rtZYmMRFGmuVUvm6xh/z1xicmfSy0YUowgkA3jpi7o913
+fqmYOHAwzCxv8Zp7xBf9hLT8DxMXdxqYUnJ+FaEMRcFkJ1MAFBpQ9uDbbqAz5bd5
+F3d6o0JSleOOTDlNH7wpN15HYtaCx9v3mXLN9FY4Y1g4mE8wdU0JZn7sFEmgmAkV
+/vj9khHS6eB01GPiCA6sy/u2tSdCQQ==
+=1GHi
+-----END PGP MESSAGE-----
+
+--nextPart3246504.5GAivIUY6Q--
diff --git a/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox.html b/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox.html
new file mode 100644
index 0000000..53856e7
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment1.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is one attachment</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment2.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is the second attachment</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox.tree b/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox.tree
new file mode 100644
index 0000000..6705a4d
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-encrypted-two-attachments.mbox.tree
@@ -0,0 +1,10 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-encrypted.mbox b/src/core/templatetestdata/openpgp-signed-encrypted.mbox
new file mode 100644
index 0000000..6d723d5
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-encrypted.mbox
@@ -0,0 +1,47 @@
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP signed and encrypted
+Date: Tue, 07 Sep 2010 18:08:44 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart25203163.0xtB501Z4V"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf7BFYWaGiCTGtXY59bSh3LCXNnWZejblYALxIUNXOFEXbm
+y/YA95FmQsy3U5HRCAJV/DY1PEaJz1RTm9bcdIpDC3Ab2YzSwmOwV5fcoUOB2df4
+KjX19Q+2F3JxpPQ0N1gHf4dKfIu19LH+CKeFzUN13aJs5J4A5wlj+NjJikxzmxDS
+kDtNYndynPmo9DJQcsUFw3gpvx5HaHvx1cT4mAB2M5cd2l+vN1jYbaWb0x5Zq41z
+mRNI89aPieC3rcM2289m68fGloNbYvi8mZJu5RrI4Tbi/D7Rjm1y63lHgVV6AN88
+XAzRiedOeF99LoTBulrJdtT8AAgCs8nCetcWpIffdtLpAZiZkzHmYOU7nqGxqpRk
+OVeUTrCn9DW2SMmHjaP4IiKnMvzEycu5F4a72+V1LeMIhMSjTRTq+ZE2PTaqH59z
+QsMn7Nb6GlOICbTptRKNNtyJKO7xXlpT7YtvNKnCyEOkH2XrYH7GvpYCiuQ0/o+7
+SxV436ZejiYIg6DQDXJCoa2DXimGp0C10Jh0HwX0BixpoNtwEjkGRYcX6P/JzkH0
+oBood4Ly+Tiu6iVDisrK3AVGYpIzCrKkE9qULTw4R/jFKR2tcCqGb7Fxtk2LV7Md
+3S+DyOKrvKQ5GNwbp9OE97pwk+Lr1JS3UAvj5f6BR+1PVNcC0i0wWkgwDjPh1eGD
+enMQmorE6+N0uHtH2F4fOxo/TbbA3+zhI25kVW3bO03xyUl/cmQZeb52nvfOvtOo
+gSb2j6bPkzljDMPEzrtJjbFtGHJbPfUQYJgZv9OE2EQIqpg6goIw279alBq6GLIX
+pkO+dRmztzjcDyhcLxMuQ4cTizel/0J/bU7U6lvwHSyZVbT4Ev+opG5K70Hbqbwr
+NZcgdWXbSeesxGM/oQaMeSurOevxVl+/zrTVAek61aRRd1baAYqgi2pf2V7y4oK3
+qkdxzmoFpRdNlfrQW65NZWnHOi9rC9XxANIwnVn3kRcDf+t2K4PrFluI157lXM/o
+wX91j88fazysbJlQ6TjsApO9ETiPOFEBqouxCTtCZzlUgyVG8jpIjdHWFnagHeXH
++lXNdYjxnTWTjTxMOZC9ySMpXkjWdFI1ecxVwu6Ik6RX51rvBJAAXWP75yUjPKJ4
+rRi5oQl/VLl0QznO7lvgMPtUwgDVNWO/r7Kn9B387h9fAJZ/kWFAEDW2yhAzABqO
+rCNKDzBPgfAwCnikCpMoCbOL7SU8BdbzQHD8/Lkv4m0pzliHQ/KkGF710koBzTmF
+N7+wk9pwIuvcrEBQj567
+=GV0c
+-----END PGP MESSAGE-----
+
+--nextPart25203163.0xtB501Z4V--
diff --git a/src/core/templatetestdata/openpgp-signed-encrypted.mbox.html b/src/core/templatetestdata/openpgp-signed-encrypted.mbox.html
new file mode 100644
index 0000000..86a964b
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-encrypted.mbox.html
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-encrypted.mbox.tree b/src/core/templatetestdata/openpgp-signed-encrypted.mbox.tree
new file mode 100644
index 0000000..7d5bbeb
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-encrypted.mbox.tree
@@ -0,0 +1,5 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox b/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox
new file mode 100644
index 0000000..dbca8d4
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox
@@ -0,0 +1,126 @@
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+Received: from localhost (localhost.localdomain [127.0.0.1])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 15AB75CD846
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:15:03 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+X-Virus-Scanned: Debian amavisd-new at akihabara.dennogumi.org
+X-Spam-Flag: NO
+X-Spam-Score: -3.818
+X-Spam-Level:
+X-Spam-Status: No, score=-3.818 required=5 tests=[BAYES_50=0.8,
+ RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-2.328, T_DKIM_INVALID=0.01]
+ autolearn=unavailable
+Received: from akihabara.dennogumi.org ([127.0.0.1])
+ by localhost (akihabara.dennogumi.org [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id RMAq-XNJ040f for <einar@heavensinferno.net>;
+ Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Received: from postbox.kde.org (postbox.kde.org [46.4.96.248])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 321675CD845
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+Received: from postbox.kde.org (localhost [IPv6:::1])
+ by postbox.kde.org (Postfix) with ESMTP id 9F5E1B37F95;
+ Mon, 8 Apr 2013 10:13:32 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=kde.org; s=default;
+ t=1365416012; bh=ZJtmtbDLoGFwSyJUINdTk4UpuX+xzxcjGp7LSPrKNUs=;
+ h=From:To:Subject:Date:Message-ID:MIME-Version:Reply-To:List-Id:
+ List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:
+ Content-Type:Sender; b=vQ0NnJ9gjeyPLhPbQx6o9UxmILkS9KrhaKG6luAS/GR
+ 6iR3HKXR3HE0BCkTMD5xmKL5ztFMGcU5e79fz0ch0sd2pnZ0y1WVw7KjCxsv/YtO9HM
+ OplAHmhwRI5zH8KKQbyvdPULvssI/ISdViAXmHw04hNPsBjsIGkTPgvNbPFuk=
+X-Original-To: plasma-devel@kde.org
+Delivered-To: plasma-devel@localhost.kde.org
+Received: from mail.bddf.ca (unknown [64.141.113.219])
+ by postbox.kde.org (Postfix) with ESMTP id 782C6B37BE6
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 09:51:17 +0000 (UTC)
+Received: from freedom.localnet (242.13.24.31.ftth.as8758.net [31.24.13.242])
+ (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
+ (No client certificate requested)
+ by mail.bddf.ca (Postfix) with ESMTPSA id 0CB712DC040
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 03:51:16 -0600 (MDT)
+From: "Aaron J. Seigo" <aseigo@kde.org>
+To: plasma-devel@kde.org
+Subject: activities_optional branch in kde-workspace
+Date: Mon, 08 Apr 2013 11:51:11 +0200
+Message-ID: <4143483.eqrJjo7JEn@freedom>
+User-Agent: KMail/4.11 pre (Linux/3.6.3-1-desktop; KDE/4.10.60; i686;
+ git-da50be0; 2013-03-12)
+MIME-Version: 1.0
+X-Scanned-By: MIMEDefang 2.71 on 46.4.96.248
+X-BeenThere: plasma-devel@kde.org
+X-Mailman-Version: 2.1.14
+Precedence: list
+Reply-To: plasma-devel@kde.org
+List-Id: <plasma-devel.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=unsubscribe>
+List-Archive: <http://mail.kde.org/pipermail/plasma-devel>
+List-Post: <mailto:plasma-devel@kde.org>
+List-Help: <mailto:plasma-devel-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============6664737512143839854=="
+Errors-To: plasma-devel-bounces@kde.org
+Sender: plasma-devel-bounces@kde.org
+
+
+--===============6664737512143839854==
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+--nextPart1996263.NlFDv9GTkA
+Content-Type: text/plain; name="broken.attachment"
+Content-Transfer-Encoding: 7Bit
+
+Let's break a signed message - This messageblock should not be here :D
+
+--nextPart1996263.NlFDv9GTkA--
+
+
+--===============6664737512143839854==
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+_______________________________________________
+Plasma-devel mailing list
+Plasma-devel@kde.org
+https://mail.kde.org/mailman/listinfo/plasma-devel
+
+--===============6664737512143839854==--
+
+
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox.html b/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox.html
new file mode 100644
index 0000000..a95252e
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox.html
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2?place=body"><img align="center" height="48" width="48" src="file:application-pgp-signature.svg" border="0" style="max-width: 100%" alt=""/>signature.asc</a>
+ </div>
+ <div>This is a digitally signed message part.</div>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <hr/>
+ <div>
+ <a href="attachment:1.3?place=body"><img align="center" height="48" width="48" src="file:text-plain.svg" border="0" style="max-width: 100%" alt=""/>broken.attachment</a>
+ </div>
+ <div/>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox.tree b/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox.tree
new file mode 100644
index 0000000..906e627
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist+additional-children.mbox.tree
@@ -0,0 +1,10 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox b/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox
new file mode 100644
index 0000000..362dff3
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox
@@ -0,0 +1,67 @@
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+From: "Aaron J. Seigo" <aseigo@kde.org>
+To: plasma-devel@kde.org
+Subject: activities_optional branch in kde-workspace
+Date: Mon, 08 Apr 2013 11:51:11 +0200
+Message-ID: <4143483.eqrJjo7JEn@freedom>
+User-Agent: KMail/4.11 pre (Linux/3.6.3-1-desktop; KDE/4.10.60; i686;
+ git-da50be0; 2013-03-12)
+X-Mailman-Version: 2.1.14
+Precedence: list
+Reply-To: plasma-devel@kde.org
+List-Id: <plasma-devel.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=unsubscribe>
+List-Archive: <http://mail.kde.org/pipermail/plasma-devel>
+List-Post: <mailto:plasma-devel@kde.org>
+List-Help: <mailto:plasma-devel-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=subscribe>
+Errors-To: plasma-devel-bounces@kde.org
+Sender: plasma-devel-bounces@kde.org
+
+Oh man a header :)
+
+--__--__--
+
+Message:
+MIME-Version: 1.0
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+
+--__--__--
+
+_______________________________________________
+Plasma-devel mailing list
+Plasma-devel@kde.org
+https://mail.kde.org/mailman/listinfo/plasma-devel
\ No newline at end of file
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox.html b/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox.html
new file mode 100644
index 0000000..59c6d69
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox.html
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">Oh man a header :)</div>
+ <br/>
+ </div>
+ </div>
+ </div>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:e1:1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox.tree b/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox.tree
new file mode 100644
index 0000000..c8310bc
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist+old.mbox.tree
@@ -0,0 +1,13 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::EncapsulatedRfc822MessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist.mbox b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox
new file mode 100644
index 0000000..8adb9f4
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox
@@ -0,0 +1,121 @@
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+Received: from localhost (localhost.localdomain [127.0.0.1])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 15AB75CD846
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:15:03 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+X-Virus-Scanned: Debian amavisd-new at akihabara.dennogumi.org
+X-Spam-Flag: NO
+X-Spam-Score: -3.818
+X-Spam-Level:
+X-Spam-Status: No, score=-3.818 required=5 tests=[BAYES_50=0.8,
+ RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-2.328, T_DKIM_INVALID=0.01]
+ autolearn=unavailable
+Received: from akihabara.dennogumi.org ([127.0.0.1])
+ by localhost (akihabara.dennogumi.org [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id RMAq-XNJ040f for <einar@heavensinferno.net>;
+ Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Received: from postbox.kde.org (postbox.kde.org [46.4.96.248])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 321675CD845
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+Received: from postbox.kde.org (localhost [IPv6:::1])
+ by postbox.kde.org (Postfix) with ESMTP id 9F5E1B37F95;
+ Mon, 8 Apr 2013 10:13:32 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=kde.org; s=default;
+ t=1365416012; bh=ZJtmtbDLoGFwSyJUINdTk4UpuX+xzxcjGp7LSPrKNUs=;
+ h=From:To:Subject:Date:Message-ID:MIME-Version:Reply-To:List-Id:
+ List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:
+ Content-Type:Sender; b=vQ0NnJ9gjeyPLhPbQx6o9UxmILkS9KrhaKG6luAS/GR
+ 6iR3HKXR3HE0BCkTMD5xmKL5ztFMGcU5e79fz0ch0sd2pnZ0y1WVw7KjCxsv/YtO9HM
+ OplAHmhwRI5zH8KKQbyvdPULvssI/ISdViAXmHw04hNPsBjsIGkTPgvNbPFuk=
+X-Original-To: plasma-devel@kde.org
+Delivered-To: plasma-devel@localhost.kde.org
+Received: from mail.bddf.ca (unknown [64.141.113.219])
+ by postbox.kde.org (Postfix) with ESMTP id 782C6B37BE6
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 09:51:17 +0000 (UTC)
+Received: from freedom.localnet (242.13.24.31.ftth.as8758.net [31.24.13.242])
+ (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
+ (No client certificate requested)
+ by mail.bddf.ca (Postfix) with ESMTPSA id 0CB712DC040
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 03:51:16 -0600 (MDT)
+From: "Aaron J. Seigo" <aseigo@kde.org>
+To: plasma-devel@kde.org
+Subject: activities_optional branch in kde-workspace
+Date: Mon, 08 Apr 2013 11:51:11 +0200
+Message-ID: <4143483.eqrJjo7JEn@freedom>
+User-Agent: KMail/4.11 pre (Linux/3.6.3-1-desktop; KDE/4.10.60; i686;
+ git-da50be0; 2013-03-12)
+MIME-Version: 1.0
+X-Scanned-By: MIMEDefang 2.71 on 46.4.96.248
+X-BeenThere: plasma-devel@kde.org
+X-Mailman-Version: 2.1.14
+Precedence: list
+Reply-To: plasma-devel@kde.org
+List-Id: <plasma-devel.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=unsubscribe>
+List-Archive: <http://mail.kde.org/pipermail/plasma-devel>
+List-Post: <mailto:plasma-devel@kde.org>
+List-Help: <mailto:plasma-devel-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============6664737512143839854=="
+Errors-To: plasma-devel-bounces@kde.org
+Sender: plasma-devel-bounces@kde.org
+
+
+--===============6664737512143839854==
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+
+--nextPart1996263.NlFDv9GTkA--
+
+
+--===============6664737512143839854==
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+_______________________________________________
+Plasma-devel mailing list
+Plasma-devel@kde.org
+https://mail.kde.org/mailman/listinfo/plasma-devel
+
+--===============6664737512143839854==--
+
+
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.html b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.html
new file mode 100644
index 0000000..7acb6fb
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.html
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="signWarn">
+ <tr class="signWarnH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Not enough information to check signature validity.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signWarnB">
+ <td>
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signWarnH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.inProgress.html b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.inProgress.html
new file mode 100644
index 0000000..77c6b29
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.inProgress.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <table cellspacing="1" cellpadding="1" class="signInProgress">
+ <tr class="signInProgressH">
+ <td dir="ltr">Please wait while the signature is being verified...</td>
+ </tr>
+ <tr class="signInProgressB">
+ <td>
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signInProgressH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">Plasma-devel mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://mail.kde.org/mailman/listinfo/plasma-devel">https://mail.kde.org/mailman/listinfo/plasma-devel</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.tree b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.tree
new file mode 100644
index 0000000..2753978
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-mailinglist.mbox.tree
@@ -0,0 +1,7 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-no-protocol.mbox b/src/core/templatetestdata/openpgp-signed-no-protocol.mbox
new file mode 100644
index 0000000..e50879b
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-no-protocol.mbox
@@ -0,0 +1,35 @@
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/broken-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/broken-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+
+--nextPart1996263.NlFDv9GTkA--
diff --git a/src/core/templatetestdata/openpgp-signed-no-protocol.mbox.html b/src/core/templatetestdata/openpgp-signed-no-protocol.mbox.html
new file mode 100644
index 0000000..4a5f337
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-no-protocol.mbox.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">hi..</div>
+ <br/>
+ <div dir="ltr">i noticed a new branch when i pulled kde-workspace today (finally!):&nbsp;</div>
+ <div dir="ltr">activities_optional</div>
+ <br/>
+ <div dir="ltr">the lone commit in it was pushed on april 1, so maybe it's an april fools&nbsp;</div>
+ <div dir="ltr">joke, but if it isn't, it looks like someone is trying to do something that&nbsp;</div>
+ <div dir="ltr">makes no sense (and has no chance of being merged into master). so if this is&nbsp;</div>
+ <div dir="ltr">a "for reals" branch, perhaps the motivation behind it can be shared?</div>
+ <br/>
+ <div dir="ltr">--&nbsp;</div>
+ <div dir="ltr">Aaron J. Seigo</div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <hr/>
+ <div>
+ <a href="attachment:2?place=body"><img align="center" height="48" width="48" src="file:unknown.svg" border="0" style="max-width: 100%" alt=""/>signature.asc</a>
+ </div>
+ <div>This is a digitally signed message part.</div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-no-protocol.mbox.tree b/src/core/templatetestdata/openpgp-signed-no-protocol.mbox.tree
new file mode 100644
index 0000000..d824a11
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-no-protocol.mbox.tree
@@ -0,0 +1,5 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
diff --git a/src/core/templatetestdata/openpgp-signed-two-attachments.mbox b/src/core/templatetestdata/openpgp-signed-two-attachments.mbox
new file mode 100644
index 0000000..462f62a
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-two-attachments.mbox
@@ -0,0 +1,54 @@
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP signed with 2 text attachments
+Date: Sun, 30 Aug 2015 12:02:56 +0200
+Message-ID: <2033829.IGepAdxqt9@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/signed; boundary="nextPart3682207.KLrp2sxpbf"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+--nextPart3682207.KLrp2sxpbf
+Content-Type: multipart/mixed; boundary="nextPart2397422.QDHKUNdbyg"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart2397422.QDHKUNdbyg
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+this is the main body text
+--nextPart2397422.QDHKUNdbyg
+Content-Disposition: inline; filename="attachment1.txt"
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="utf-8"; name="attachment1.txt"
+
+this is attachment one
+--nextPart2397422.QDHKUNdbyg
+Content-Disposition: inline; filename="attachment2.txt"
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="utf-8"; name="attachment2.txt"
+
+this is attachment two
+--nextPart2397422.QDHKUNdbyg--
+
+--nextPart3682207.KLrp2sxpbf
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iQEVAwUAVeLU0I2YYMWPJG3mAQL/fgf+LXmO7bKafdd4g5OOVHHyXRprVmX/6hBq
+mZoor29KLIHkvAH9OJi4qBy/ZKwqqKLfttLzHb2UaAfl5kn4f0ckmnwUhU7u32Sm
+JZ0Q50SxrRVFRyvTvPG22ho9IwQUO1YSZrL4wO9v8ZBQ3vkfpmAiUQVxPQMINc8L
+i68xQEm4y1Dtoc+DTUkoIMeOOPnEl6PTMPrwn906K0r30hI4788fEGRn6uOXb+vD
+G/ISlXu+JHIxxf/J5/jVjKNbra+trrfSPzB3piJIjBLEPO5FvLx8SgQFJcJHt/kw
+ps8D5YULj/MVMLlsPtXDdZmbOi/G9pN0tr05MKcXsO5Ywe7n2BhASw==
+=2Nzb
+-----END PGP SIGNATURE-----
+
+--nextPart3682207.KLrp2sxpbf--
diff --git a/src/core/templatetestdata/openpgp-signed-two-attachments.mbox.html b/src/core/templatetestdata/openpgp-signed-two-attachments.mbox.html
new file mode 100644
index 0000000..0671864
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-two-attachments.mbox.html
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">this is the main body text</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment1.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is attachment one</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <a name="att1.3"/>
+ <div id="attachmentDiv1.3">
+ <table cellspacing="1" class="textAtm">
+ <tr class="textAtmH">
+ <td dir="ltr">attachment2.txt</td>
+ </tr>
+ <tr class="textAtmB">
+ <td>
+ <div class="noquote">
+ <div dir="ltr">this is attachment two</div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/openpgp-signed-two-attachments.mbox.tree b/src/core/templatetestdata/openpgp-signed-two-attachments.mbox.tree
new file mode 100644
index 0000000..7133f4b
--- /dev/null
+++ b/src/core/templatetestdata/openpgp-signed-two-attachments.mbox.tree
@@ -0,0 +1,9 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/plaintext-with-signature.mbox b/src/core/templatetestdata/plaintext-with-signature.mbox
new file mode 100644
index 0000000..0186196
--- /dev/null
+++ b/src/core/templatetestdata/plaintext-with-signature.mbox
@@ -0,0 +1,17 @@
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
+
+--
+
+This is a signature
diff --git a/src/core/templatetestdata/plaintext.mbox b/src/core/templatetestdata/plaintext.mbox
new file mode 100644
index 0000000..729a35b
--- /dev/null
+++ b/src/core/templatetestdata/plaintext.mbox
@@ -0,0 +1,14 @@
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+Message-ID: <1505824.VT1nqpAGu0@vkpc5>
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
diff --git a/src/core/templatetestdata/plaintextattachment.mbox b/src/core/templatetestdata/plaintextattachment.mbox
new file mode 100644
index 0000000..5e530e8
--- /dev/null
+++ b/src/core/templatetestdata/plaintextattachment.mbox
@@ -0,0 +1,56 @@
+Return-Path: <christian@example.ch>
+Received: from imapb010.mykolab.com ([unix socket])
+ by imapb010.mykolab.com (Cyrus 2.5.10-49-g2e214b4-Kolab-2.5.10-8.1.el7.kolab_14) with LMTPA;
+ Wed, 09 Aug 2017 18:37:01 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx002.mykolab.com (unknown [10.9.13.2])
+ by imapb010.mykolab.com (Postfix) with ESMTPS id 0A93910A25047
+ for <christian@example.ch>; Wed, 9 Aug 2017 18:37:01 +0200 (CEST)
+Received: from int-subm002.mykolab.com (unknown [10.9.37.2])
+ by int-mx002.mykolab.com (Postfix) with ESMTPS id EC06AF6E
+ for <christian@example.ch>; Wed, 9 Aug 2017 18:37:00 +0200 (CEST)
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="=_291b8e96564265636432c6d494e02322"
+Date: Wed, 09 Aug 2017 10:37:00 -0600
+From: "Mollekopf, Christian" <christian@example.ch>
+To: christian@example.ch
+Subject: sdflkjsdf
+Message-ID: <46892ac54a8ffb690d491243ec01dfb2@example.ch>
+X-Sender: christian@example.ch
+
+--=_291b8e96564265636432c6d494e02322
+Content-Type: multipart/alternative;
+ boundary="=_ceff0fd19756f45ed1295ee2069ff8e0"
+
+--=_ceff0fd19756f45ed1295ee2069ff8e0
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain; charset=US-ASCII
+
+sdlkjsdjf
+--=_ceff0fd19756f45ed1295ee2069ff8e0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html; charset=UTF-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
+=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
+eva,sans-serif'>
+<p>sdlkjsdjf</p>
+
+</body></html>
+
+--=_ceff0fd19756f45ed1295ee2069ff8e0--
+
+--=_291b8e96564265636432c6d494e02322
+Content-Transfer-Encoding: base64
+Content-Type: text/plain;
+ name=xorg.conf
+Content-Disposition: attachment;
+ filename=xorg.conf;
+ size=211
+
+U2VjdGlvbiAiRGV2aWNlIgogICAgSWRlbnRpZmllciAgICAgIkRldmljZTAiCiAgICBEcml2ZXIg
+ICAgICAgICAibnZpZGlhIgogICAgVmVuZG9yTmFtZSAgICAgIk5WSURJQSBDb3Jwb3JhdGlvbiIK
+ICAgIEJvYXJkTmFtZSAgICAgICJOVlMgNDIwME0iCiAgICBPcHRpb24gIk5vTG9nbyIgInRydWUi
+CiAgICBPcHRpb24gIlVzZUVESUQiICJ0cnVlIgpFbmRTZWN0aW9uCg==
+--=_291b8e96564265636432c6d494e02322--
diff --git a/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox b/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox
new file mode 100644
index 0000000..9b71516
--- /dev/null
+++ b/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox
@@ -0,0 +1,92 @@
+From test@kolab.org Wed, 08 Sep 2010 17:53:29 +0200
+From: OpenPGP Test <test@kolab.org>
+Subject: Signed Fwd: OpenPGP signed and encrypted
+Date: Wed, 08 Sep 2010 17:53:29 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/signed; boundary="nextPart4350242.cT7m6ulPOV"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart4350242.cT7m6ulPOV
+Content-Type: multipart/mixed; boundary="nextPart1512490.WQBKYaOrt8"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1512490.WQBKYaOrt8
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+bla bla bla
+--nextPart1512490.WQBKYaOrt8
+Content-Type: message/rfc822
+Content-Disposition: inline; filename="forwarded message"
+Content-Description: OpenPGP Test <test@kolab.org>: OpenPGP signed and encrypted
+
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP signed and encrypted
+Date: Tue, 07 Sep 2010 18:08:44 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart25203163.0xtB501Z4V"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf7BFYWaGiCTGtXY59bSh3LCXNnWZejblYALxIUNXOFEXbm
+y/YA95FmQsy3U5HRCAJV/DY1PEaJz1RTm9bcdIpDC3Ab2YzSwmOwV5fcoUOB2df4
+KjX19Q+2F3JxpPQ0N1gHf4dKfIu19LH+CKeFzUN13aJs5J4A5wlj+NjJikxzmxDS
+kDtNYndynPmo9DJQcsUFw3gpvx5HaHvx1cT4mAB2M5cd2l+vN1jYbaWb0x5Zq41z
+mRNI89aPieC3rcM2289m68fGloNbYvi8mZJu5RrI4Tbi/D7Rjm1y63lHgVV6AN88
+XAzRiedOeF99LoTBulrJdtT8AAgCs8nCetcWpIffdtLpAZiZkzHmYOU7nqGxqpRk
+OVeUTrCn9DW2SMmHjaP4IiKnMvzEycu5F4a72+V1LeMIhMSjTRTq+ZE2PTaqH59z
+QsMn7Nb6GlOICbTptRKNNtyJKO7xXlpT7YtvNKnCyEOkH2XrYH7GvpYCiuQ0/o+7
+SxV436ZejiYIg6DQDXJCoa2DXimGp0C10Jh0HwX0BixpoNtwEjkGRYcX6P/JzkH0
+oBood4Ly+Tiu6iVDisrK3AVGYpIzCrKkE9qULTw4R/jFKR2tcCqGb7Fxtk2LV7Md
+3S+DyOKrvKQ5GNwbp9OE97pwk+Lr1JS3UAvj5f6BR+1PVNcC0i0wWkgwDjPh1eGD
+enMQmorE6+N0uHtH2F4fOxo/TbbA3+zhI25kVW3bO03xyUl/cmQZeb52nvfOvtOo
+gSb2j6bPkzljDMPEzrtJjbFtGHJbPfUQYJgZv9OE2EQIqpg6goIw279alBq6GLIX
+pkO+dRmztzjcDyhcLxMuQ4cTizel/0J/bU7U6lvwHSyZVbT4Ev+opG5K70Hbqbwr
+NZcgdWXbSeesxGM/oQaMeSurOevxVl+/zrTVAek61aRRd1baAYqgi2pf2V7y4oK3
+qkdxzmoFpRdNlfrQW65NZWnHOi9rC9XxANIwnVn3kRcDf+t2K4PrFluI157lXM/o
+wX91j88fazysbJlQ6TjsApO9ETiPOFEBqouxCTtCZzlUgyVG8jpIjdHWFnagHeXH
++lXNdYjxnTWTjTxMOZC9ySMpXkjWdFI1ecxVwu6Ik6RX51rvBJAAXWP75yUjPKJ4
+rRi5oQl/VLl0QznO7lvgMPtUwgDVNWO/r7Kn9B387h9fAJZ/kWFAEDW2yhAzABqO
+rCNKDzBPgfAwCnikCpMoCbOL7SU8BdbzQHD8/Lkv4m0pzliHQ/KkGF710koBzTmF
+N7+wk9pwIuvcrEBQj567
+=GV0c
+-----END PGP MESSAGE-----
+
+--nextPart25203163.0xtB501Z4V--
+
+--nextPart1512490.WQBKYaOrt8--
+
+--nextPart4350242.cT7m6ulPOV
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+iQEcBAABAgAGBQJMh7F5AAoJEI2YYMWPJG3mOB0IALeHfwg8u7wK0tDKtKqxQSqC
+2Bbk4pTLuLw/VniQNauDG+kc1eUc5RJk/R31aB1ysiQCV5Q8ucI8c9vCDDMbd+s4
+t2bZUEzMpXrw/aFiHgYGXFAY+tpqZqDGNVRNHWsPYJKtx8cci9E5DLnBJcVXVqib
+3iiHlr9AQOok3PUmpPk1a61q2L0kk8wqRenC0yZXNw5qFn5WW/hFeCOfYB+t+s5N
+IuE6ihFCJIlvGborrvl6VgPJTCyUQ3XgI90vS6ABN8TFlCNr3grXOWUePc2a20or
+xFgh38cnSR64WJajU5K1nUL9/RgfIcs+PvyHuJaRf/iUFkj1jiMEuaSi9jVFco0=
+=bArV
+-----END PGP SIGNATURE-----
+
+--nextPart4350242.cT7m6ulPOV--
diff --git a/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox.html b/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox.html
new file mode 100644
index 0000000..b91772b
--- /dev/null
+++ b/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox.html
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.1"/>
+ <div id="attachmentDiv1.1">
+ <div class="noquote">
+ <div dir="ltr">bla bla bla</div>
+ </div>
+ </div>
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <table cellspacing="1" cellpadding="1" class="rfc822">
+ <tr class="rfc822H">
+ <td dir="ltr">
+ <a href="attachment:1.2.1?place=body">Encapsulated message</a>
+ </td>
+ </tr>
+ <tr class="rfc822B">
+ <td>
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@kolab.org">test@kolab.org</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr class="rfc822H">
+ <td dir="ltr">End of encapsulated message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox.tree b/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox.tree
new file mode 100644
index 0000000..818f894
--- /dev/null
+++ b/src/core/templatetestdata/signed-forward-openpgp-signed-encrypted.mbox.tree
@@ -0,0 +1,10 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
+ * MimeTreeParser::EncapsulatedRfc822MessagePart
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/smime-cert.mbox b/src/core/templatetestdata/smime-cert.mbox
new file mode 100644
index 0000000..b3c8a19
--- /dev/null
+++ b/src/core/templatetestdata/smime-cert.mbox
@@ -0,0 +1,24 @@
+From test@example.com Sat, 13 Apr 2013 01:54:30 +0200
+From: test <test@example.com>
+To: you@you.com
+Subject: test
+Date: Sat, 13 Apr 2013 01:54:30 +0200
+Message-ID: <1576646.QQxzHWx8dA@tabin>
+X-KMail-Identity: 505942601
+User-Agent: KMail/4.10.2 (Linux/3.9.0-rc4-experimental-amd64; KDE/4.10.60; x86_64; git-fc9b82c; 2013-04-11)
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.crt"; smime-type="certs-only"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.crt"
+
+asdfasdfasdfasdfasdfasdfasdfasdf
+asdfasdfadsfsadfasdf
+asdfasdf
+sadfas
+dfasdf
+sadf
+sadf
+adsf
+adsf
+asdf
+
diff --git a/src/core/templatetestdata/smime-cert.mbox.html b/src/core/templatetestdata/smime-cert.mbox.html
new file mode 100644
index 0000000..1b86390
--- /dev/null
+++ b/src/core/templatetestdata/smime-cert.mbox.html
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">Sorry, certificate could not be imported.<br/>Reason: BER error</div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-cert.mbox.tree b/src/core/templatetestdata/smime-cert.mbox.tree
new file mode 100644
index 0000000..c34c2ec
--- /dev/null
+++ b/src/core/templatetestdata/smime-cert.mbox.tree
@@ -0,0 +1,2 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::CertMessagePart
diff --git a/src/core/templatetestdata/smime-encrypted-octet-stream.mbox b/src/core/templatetestdata/smime-encrypted-octet-stream.mbox
new file mode 100644
index 0000000..887fe35
--- /dev/null
+++ b/src/core/templatetestdata/smime-encrypted-octet-stream.mbox
@@ -0,0 +1,23 @@
+From test@example.com Sat, 13 Apr 2013 01:54:30 +0200
+From: test <test@example.com>
+To: you@you.com
+Subject: test
+Date: Sat, 13 Apr 2013 01:54:30 +0200
+Message-ID: <1576646.QQxzHWx8dA@tabin>
+X-KMail-Identity: 505942601
+User-Agent: KMail/4.10.2 (Linux/3.9.0-rc4-experimental-amd64; KDE/4.10.60; x86_64; git-fc9b82c; 2013-04-11)
+MIME-Version: 1.0
+Content-Type: application/octet-stream;
+ name="smime.p7m"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxgfwwgfkCAQAwYjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwE
+S0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxl
+LmNvbQIJANNFIDoYY4XJMA0GCSqGSIb3DQEBAQUABIGAJwmmaOeidXUHSQGOf2OBIsPYafVqdORe
+y54pEXbXiAfSVUWgI4a9CsiWwcDX8vlaX9ZLLr+L2VmOfr6Yc5214yxzausZVvnUFjy6LUXotuEX
+tSar4EW7XI9DjaZc1l985naMsTx9JUa5GyQ9J6PGqhosAKpKMGgKkFAHaOwE1/IwgAYJKoZIhvcN
+AQcBMBQGCCqGSIb3DQMHBAieDfmz3WGbN6CABHgEpsLrNn0PAZTDUfNomDypvSCl5bQH+9cKm80m
+upMV2r8RBiXS7OaP4SpCxq18afDTTPatvboHIoEX92taTbq8soiAgEs6raSGtEYZNvFL0IYqm7MA
+o5HCOmjiEcInyPf14lL3HnPk10FaP3hh58qTHUh4LPYtL7UECOZELYnUfUVhAAAAAAAAAAAAAA==
+
diff --git a/src/core/templatetestdata/smime-encrypted-octet-stream.mbox.html b/src/core/templatetestdata/smime-encrypted-octet-stream.mbox.html
new file mode 100644
index 0000000..6b08c47
--- /dev/null
+++ b/src/core/templatetestdata/smime-encrypted-octet-stream.mbox.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">The quick brown fox jumped over the lazy dog.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-encrypted-octet-stream.mbox.tree b/src/core/templatetestdata/smime-encrypted-octet-stream.mbox.tree
new file mode 100644
index 0000000..82f705c
--- /dev/null
+++ b/src/core/templatetestdata/smime-encrypted-octet-stream.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/smime-encrypted.mbox b/src/core/templatetestdata/smime-encrypted.mbox
new file mode 100644
index 0000000..6b6d6a0
--- /dev/null
+++ b/src/core/templatetestdata/smime-encrypted.mbox
@@ -0,0 +1,22 @@
+From test@example.com Sat, 13 Apr 2013 01:54:30 +0200
+From: test <test@example.com>
+To: you@you.com
+Subject: test
+Date: Sat, 13 Apr 2013 01:54:30 +0200
+Message-ID: <1576646.QQxzHWx8dA@tabin>
+X-KMail-Identity: 505942601
+User-Agent: KMail/4.10.2 (Linux/3.9.0-rc4-experimental-amd64; KDE/4.10.60; x86_64; git-fc9b82c; 2013-04-11)
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxgfwwgfkCAQAwYjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwE
+S0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxl
+LmNvbQIJANNFIDoYY4XJMA0GCSqGSIb3DQEBAQUABIGAJwmmaOeidXUHSQGOf2OBIsPYafVqdORe
+y54pEXbXiAfSVUWgI4a9CsiWwcDX8vlaX9ZLLr+L2VmOfr6Yc5214yxzausZVvnUFjy6LUXotuEX
+tSar4EW7XI9DjaZc1l985naMsTx9JUa5GyQ9J6PGqhosAKpKMGgKkFAHaOwE1/IwgAYJKoZIhvcN
+AQcBMBQGCCqGSIb3DQMHBAieDfmz3WGbN6CABHgEpsLrNn0PAZTDUfNomDypvSCl5bQH+9cKm80m
+upMV2r8RBiXS7OaP4SpCxq18afDTTPatvboHIoEX92taTbq8soiAgEs6raSGtEYZNvFL0IYqm7MA
+o5HCOmjiEcInyPf14lL3HnPk10FaP3hh58qTHUh4LPYtL7UECOZELYnUfUVhAAAAAAAAAAAAAA==
+
diff --git a/src/core/templatetestdata/smime-encrypted.mbox.html b/src/core/templatetestdata/smime-encrypted.mbox.html
new file mode 100644
index 0000000..6b08c47
--- /dev/null
+++ b/src/core/templatetestdata/smime-encrypted.mbox.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">The quick brown fox jumped over the lazy dog.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-encrypted.mbox.inProgress.html b/src/core/templatetestdata/smime-encrypted.mbox.inProgress.html
new file mode 100644
index 0000000..e5eb55d
--- /dev/null
+++ b/src/core/templatetestdata/smime-encrypted.mbox.inProgress.html
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Please wait while the message is being decrypted...</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="font-size:x-large; text-align:center; padding:20pt;"/>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-encrypted.mbox.tree b/src/core/templatetestdata/smime-encrypted.mbox.tree
new file mode 100644
index 0000000..82f705c
--- /dev/null
+++ b/src/core/templatetestdata/smime-encrypted.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/smime-opaque-enc+sign.mbox b/src/core/templatetestdata/smime-opaque-enc+sign.mbox
new file mode 100644
index 0000000..be75c1e
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-enc+sign.mbox
@@ -0,0 +1,37 @@
+From test@example.com Fri Sep 11 10:18:48 2015
+From: test <test@example.com>
+To: you@you.com
+Subject: enc+sign
+Date: Fri, 11 Sep 2015 12:18:48 +0200
+Message-ID: <49743203.WFa6qKaG4S@tabin.local>
+X-KMail-Identity: 792434561
+User-Agent: KMail/4.13.0.1 (Linux/4.1.5-towo.1-siduction-amd64; KDE/4.14.2; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxgfwwgfkCAQAwYjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwE
+S0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxl
+LmNvbQIJANNFIDoYY4XJMA0GCSqGSIb3DQEBAQUABIGAkttyRl8OyZkRGfs3CMfzYchrG4rRMfbE
+WIkAFIXf64yAzPZfo6cCn0Il/6q4793FeKUrsJUvzP21KBLp4u1t5qLL5iPAmAzBdLg0teoEzLZe
+CEZHinM+WSMdz2wEV8lgAt8x/3yhXmDMB09FEapUaBCK5NhbLAFkpI2mFg66zxcwgAYJKoZIhvcN
+AQcBMB0GCWCGSAFlAwQBAgQQ6DSjjkXJNm5cXQNek9eozqCABIIDsI7lufqw58g/uVM2gymkldmb
+BOgdimxshJkYznbbG5sfQPNM9ROhXKRUOc8hfzgmZ9dOZvtAyzepROMHrcL1mFFx7c1vgyT85fai
+PLEqRs8FRoztXJ0I3q57r+sPW4BtYJp9WCBSerdLSrBFK1zvKpVQtSCYbbDCc3462KnSsBrE4XTf
+BiiLWkpok4fNIdqYG1aWPLgRbp7wwLiXcq5RxYCail1tlyAty6dWBrYE1+ABZoqnKUqNqbghxJUd
+X9t3EziUnzw7c0Hq03sJEShzbXI9BxOTs8ZZ+1Ktx3rdh6RhZZ7XfJ7XIuN0yYhusBeOgC8AuILN
+lYojgmXMin52VPFmz9siI8jnKaqsr1uUqVfMLNc+mLhZEjuOu99eAHwdJUS95BKWm9J8DBe/lpz3
+s09Oz2oOoiQx0WxKmQZ4GXW/UI9OwykfNLqWfmDrbMbGW4Mvq615ucHZixFdp2vf3kU72wfk8hFK
+EIU/1Ov85glDj96ELdXErXn02BNvVBQIsRx3DbBGEgj9tz+WHbCR6RjEK4eV5lhInZplFGmYr4Uu
+9ALS+MRGTYZnALNPrWu6b1aWprnlJCyKZeeyqUzpQVPoWOh7CfdvBxvQoil4Z9Neb9O0AGCZ0axc
+zZ4yYcS/LpHkLgYPC5BphNtpyciQh6ZFeexi8rsZuHRu+YUKnuM+DQyUxtUvDYhiX7CT49MMXIwt
+bdyA0IAbIXXb/Us9GGX11gAfz2EFI3QBDHtsyciEgCIlA32OiiJF0T5CnQsku2yu6c3TWC4k+feL
+jjTEhm/KPUL6SkksarFeEncJlVt7impW9FlHyBpISwlQF4RAxDYTRX475VTNu7wn3PQx376m8iBN
+K20MjdfIM162jcQh9IWnqTZ0nH/gT2kQPYe7GqjFi6XmU3bwdzW9SXR0G9A8juIXaaNR7aXcsB53
+/W4WHPcdJBwRELa0dT1/bPg8z3EV2vM7Flc/Q5ugTWHxk8GHNEPpotArpLq1sEAZu78mSCqzzEDA
+TwzEpj9LZYIv4rDYYLCAxUR9YGhiJ5Qm21YnklkE++4zfpsl/KJcwtNsp7SWdzeVuPoUYBNhsgp/
+PZgudzQoOhxcF4ChHMVSNk1f1tlvXZppeXwv9OwpSszz0zZUr46ievpkQwL0Sa1XAfKwAt7bFJwp
+i95ae7p58ZdizJVsz0QUhFDxIDL76qiPEYXC7nIf4ZPQ36dzLAfZ6OwWGffluxHpE6oqUoM3l320
+7yQT66xfRKLGl5Cr1Q8UBBABC6aR2dt6RVbsxbR3mB0PAAAAAAAAAAAAAA==
+
diff --git a/src/core/templatetestdata/smime-opaque-enc+sign.mbox.html b/src/core/templatetestdata/smime-opaque-enc+sign.mbox.html
new file mode 100644
index 0000000..7f60c04
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-enc+sign.mbox.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@example.com">test@example.com</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">Encrypted and signed mail.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-opaque-enc+sign.mbox.tree b/src/core/templatetestdata/smime-opaque-enc+sign.mbox.tree
new file mode 100644
index 0000000..7d5bbeb
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-enc+sign.mbox.tree
@@ -0,0 +1,5 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/smime-opaque-sign.mbox b/src/core/templatetestdata/smime-opaque-sign.mbox
new file mode 100644
index 0000000..6e1739a
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-sign.mbox
@@ -0,0 +1,25 @@
+From test@example.com Fri Sep 11 10:16:06 2015
+From: test <test@example.com>
+To: you@you.com
+Subject: sign only
+Date: Fri, 11 Sep 2015 12:16:06 +0200
+Message-ID: <3182420.pXWeMPZlAJ@tabin.local>
+X-KMail-Identity: 792434561
+User-Agent: KMail/4.13.0.1 (Linux/4.1.5-towo.1-siduction-amd64; KDE/4.14.2; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="signed-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCAJIAEZUNvbnRl
+bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdCaXQKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy
+c2V0PSJ1dGYtOCIKCkEgc2ltcGxlIHNpZ25lZCBvbmx5IHRlc3QuAAAAAAAAMYIBkjCCAY4CAQEw
+YjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwES0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEf
+MB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbQIJANNFIDoYY4XJMAkGBSsOAwIaBQCggYcw
+GAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTMwMTEwMTU0ODEyWjAj
+BgkqhkiG9w0BCQQxFgQUvJ5zI7oyv5fNx1H1wabIa6atsdcwKAYJKoZIhvcNAQkPMRswGTALBglg
+hkgBZQMEAQIwCgYIKoZIhvcNAwcwDQYJKoZIhvcNAQEBBQAEgYAHFCw88FPy1n2lu5ql5sD2J4Yi
+2/N9gUQvNQF5F/kd48HncdihLPZRs7eEX7IzDZNeylTmyp2WIiGEwQrIHbxtqU32NRouc09Zv4bu
+iUwUoz1SM2s7qipikwayQMD3d5zWNhszNLBsw8z48uXAzjZAejBCfPP0/w3z7DZDJC2R2QAAAAAA
+AA==
+
diff --git a/src/core/templatetestdata/smime-opaque-sign.mbox.html b/src/core/templatetestdata/smime-opaque-sign.mbox.html
new file mode 100644
index 0000000..6088bc7
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-sign.mbox.html
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@example.com">test@example.com</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <div class="noquote">
+ <div dir="ltr">A simple signed only test.</div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-opaque-sign.mbox.inProgress.html b/src/core/templatetestdata/smime-opaque-sign.mbox.inProgress.html
new file mode 100644
index 0000000..45a999d
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-sign.mbox.inProgress.html
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signInProgress">
+ <tr class="signInProgressH">
+ <td dir="ltr">Please wait while the signature is being verified...</td>
+ </tr>
+ <tr class="signInProgressB">
+ <td/>
+ </tr>
+ <tr class="signInProgressH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-opaque-sign.mbox.tree b/src/core/templatetestdata/smime-opaque-sign.mbox.tree
new file mode 100644
index 0000000..a469bb7
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-sign.mbox.tree
@@ -0,0 +1,4 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/smime-opaque-signed-encrypted-attachment.mbox b/src/core/templatetestdata/smime-opaque-signed-encrypted-attachment.mbox
new file mode 100644
index 0000000..2b1a076
--- /dev/null
+++ b/src/core/templatetestdata/smime-opaque-signed-encrypted-attachment.mbox
@@ -0,0 +1,50 @@
+From test@example.com Thu Jun 09 12:52:44 2016
+From: test@example.com
+To: test@example.com
+Subject: Opaque S/MIME signed and encrypted message with attachment
+Date: Thu, 09 Jun 2016 14:52:44 +0200
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+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
diff --git a/src/core/templatetestdata/smime-signed-apple.mbox b/src/core/templatetestdata/smime-signed-apple.mbox
new file mode 100644
index 0000000..d5cd06f
--- /dev/null
+++ b/src/core/templatetestdata/smime-signed-apple.mbox
@@ -0,0 +1,197 @@
+From: Quack <quack@example.org>
+Content-Type: multipart/signed; boundary="Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB"; protocol="application/pkcs7-signature"; micalg=sha1
+Message-Id: <468684BD-9CBD-48CF-B1BD-2824000F9541@example.org>
+Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
+Subject: Re: PDF bug - modified mail, signature is not valid!
+Date: Fri, 20 Jan 2017 11:51:41 +0100
+To: Konqui <Konqui@kdab.com>
+
+
+--Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB"
+
+
+--Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain;
+ charset=utf-8
+
+Ol=C3=A1 Konqui,
+
+Here is the pdf you asked for!
+Cheers,
+
+Quaak
+
+=E2=80=A6
+Quack | UX/UI Designer
+Klar=C3=A4lvdalens Datakonsult AB, a KDAB Group company
+Sweden (HQ) +46-563-540090, Germany +49-30-521325470
+KDAB - The Qt, C++ and OpenGL Experts | www.kdab.com
+
+
+--Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB
+Content-Type: multipart/mixed;
+ boundary="Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB"
+
+
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html;
+ charset=utf-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
+charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
+-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
+class=3D"">Ol=C3=A1 Konqui,</div><div =
+class=3D"">Here is the pdf you asked for!</div><div =
+class=3D"">Cheers,</div><div =
+class=3D"">Quaack</div></body></html>=
+
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAAb
+rwAAG68BXhqRHAAAAAd0SU1FB9gHFg8aNG8uqeIAAAAGYktHRAD/AP8A/6C9p5MAAAkqSURBVHja
+5VV7cFTVGf/OPefeu3fv3t1NdhMSCHkKASEpyEsaGwalWEWntLV1Wu0fdOxAx9Iq0xntAwac6ehY
+p+rwKLbjjLRFh9JadURKRGgFQTTECCYQE9nNgzzYZDe7m33d1+l3tpOOU61T2tF/+s1s7pzn9/t+
+v993Av/3QT6FO6WdO/d+M55Il8rMOdrT0x3Zt++3+c8EgM/nozseeviJiYmpe1zOQdM8BOOCIku/
+lIj1VrQ/0r9n9+78xwLgeAA3w4fHXV1d5Omnn6aapumlJSVVqalUJJvJZRdcu0RSfZQsaW7mjfPm
+cbF9+/btEIlEaq6Z03whXyhIjDFuGIZEKSP5fMFRVcVNT2Vf0jzsmMxYGtel9rff/vM/M8bjcZpM
+Jp1XX32VNDc3e7ovRP3JyZGVNdXVd1FGGwKBQEM8njiWTKV36IHgEACwibGx62LjU/cBd01Zljoc
+p9DHmLbHsmyK1UuKooJt24IMcLE+y3L45eEYLS8LgWH4YXR0bAPZtGmTVFvfoBZMEzKpFKmqqmqp
+qane4DhOteH3L1FkWZVlGSzLAtd1Oe4773C4LxoZvDWXh82OY2MtwAuFvCvSyDIFXdelYDDIvF4d
+xPzA0AgXFStMcWPxBPGoKvXpPh6JDG5hK1Zcv1H36Xc6tsMs21EMQ69CLSts2wGkDygTyW2CP8gX
+TKLIyvx0OrdDUXyLKXVUkdSne4QKtFAwuWmabjAYkDyqAgG/jziORh1EKaonkkQt2yRZRC5JHEGn
+L7OKyopNqqo2IbWQjqWgLOwFBFKsuGDa4PVyIssMk1sCACCjimXbrbquYKW41zJJOpXkeARyeZNQ
+SUKwHEqCKnBuAybkZeFSmssVSDKdhlBpCRgIcnQsdvKPB19sY4rMNIaH0BhQUVHKvXgpIiQF0wK/
+4QORnOEayoDzOSBMXK4BSgpeTcMECqiqTDKZHDKmct3LCI55Kp0mQgK/3yDYkgIc3kNhfHzCkRk9
+p6nk+yPD3SmWzeZiKNkciUrg2g5BjQWdSBchiEvQjzoWAFkUYPDrCjBFUEJ8AhSIRyl2jcfjEL9h
+AFJODL8B6H7IZrNIt2g3B1mysShdQhmbT58+ExRdx3L5/PNomGU4kJkuA9ILYn+JP4CXOoDUoWO9
+IBhCSBCLTYCK+rqOg8CKvY6JPQhGxjkX1zyAdwrgAhTKWBDmxTUTC7Tcy5dHBiilL7cdaTsNGAwP
+7o32D4Q9HnWTrvsCiqIgdWgqDkJfkKgDU1MZcBGMhbKgj2B0LIle8eNhgiBsoMwFEY7rQDqVwlo5
+esUE/AAR81gUYIUT8UR2//4/rK+pLjs3MhIFEVJN9WwXK2oM+P1BREpQO0hjwkw+BzJWY1oOXB5L
+w9DIOGTQvYS4UFqigR9ZwUqEXFghVop059AjonqcAIZrqCKg31AS3OU66Adf4sabWqKvvHIYpoNh
+y+Vj4xMHVEW93eUuo0izhT4oRbcSIoALbRle4AVVkfBup6g9thwCzRX1VRQmdMeqLVETEIkW2ZNx
+H8oqzqAfXCGJEQ6XBQEgNQ2A7tq1C1a1tvaattOOrVFOqVSLCQhqU6QPx+DTsOU0GavLYUV20Qv4
+rEIymYNQuB48Wkg8QTA0NIQeYKB6NGTgH90jIcJEMikAi1dRRo9NLV583ek33jjpFAGIPw8++IAj
+e9SIRGm5wliraVosnTWLmmemUugBkTiPSS3AtgV8VQA9A8LxdfULYXBoEKv2wMhIn2BHGFR0DZ6d
+glQ6hUDT6A/RWVSSmfx5DjxRV1vzVkdHBzDAWLNmDezc+aQVqqz5dSY52Z63nLn9A33lI9myLXNL
+xv0Fq3gWutMN0BToxcso+AN+cKmOXI5A9P12mKDzYNXcZXDq1F+h+IboFgzb1VAhDULeJpxwC19G
+g/uMgOXVfXW1tbWCYM6mtdi8+YfiM4m/Y1UrHzkergyXz/3czImCnRjuHiW3qxpPqGFPy6SpHJC9
+IR+Sm+2N8i/dcMOMZdGeshcrS/S58+c3zU2Z8oVD50cbVfP8M4pGkymoUxLxsUzOVhtmQ+5432Rg
+oj6QOLFj28/caQk+EjMXraUV1eW+8dH06StQZnlnNbQefGTD92pWfu3I6TOT8oY7brv4hWUt3xiw
+2OrlDVVdRslsd2Fd469Q8sUB3c8uOW49SdHX1rbcePhoz3B7feuqlt5oZtBTv+ioSdXc7q3fHQaM
+fwtg6Vd/dEvn8Qssnzg/0Ns56jRcO6Nw4d1Af+/RH0/cdv+O/fRK7KnmBXPWGsQeDPhK9oWC6hdd
+R3pdUcg88Tx7U7Ej1y1qMjreGwjt/cnaF2YtvCXQe7bzxLkj+/sunT0Ry00OwHRI8DERLqeNmqGV
+JZJVC6Yu7UxMOfLFlV9pWQcYp57/013rb1u9ua29b0Ch4bsl4tKLY5P1sgxNJzsHDj136KzS3NTk
+9mTNusPvXJLrbnjUe/b16FDfsZ/3xC8d4/HoCQ4Anwzg91vWPL7+3pvvDM806sTY4IVyMxfrojO3
+BVubbyJMhnVVM3y+l187/nChIJ2ZpSs9hMD4qC6t6x6+0gkAoRC33/Sb8RdmXj9nzvWraivhP47g
+AyHxKb1mfWkRYHCjMb30nafeeWzerU9963w3L3/02c4f7D0y0NXTx3f3D/JTb7bzxpeODu55+PGT
+yy5F+ZmeD/iSrh5efeJd/hGZP5GBux+6cysY3w7H+16IVy65V6trnn3P9JqVjQ3JuSsdHhWW6hIL
+NuhyUpJgEF/ofSVBeLBuVtVjd3y55SHXhQ8UBht0DR4r98Fs+IRg/zrxlz2/2A7p5yYBY93Gu+4f
+H5xojLwOxfjd/WufOHhQ/IcD7eYVC5YyCjFMfkVV4NpMFvpTachoZeDaNryLnliOczsUCv1XBWD8
+YjF5MWJ9kcT757qenR7vf4bDoqWwHCvUUfPNsQQMWSZAZTlsw7nxYQQTcuDrjgQuPn7z/D7YivNt
+nPPfEDzwqcU75/j6SD/f8uG5vXs5dL7Hjb+d4gp8mnF8nAOabjcac+OBAxyuNiT4HyNwGZYgu0RW
+IDt/Icz4zAC0tXE4183rQ6XwU9uBXgLQ5Teg7GIv1+EqgsF/GY4DtCQALZMp2ITttmqoHzpWr756
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html;
+ charset=utf-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
+charset=3Dutf-8"></head><body>=
+<blockquote type=3D"cite" class=3D""><div =
+class=3D"">On 20 Jan 2017, at 10:35, Konqui &lt;<a =
+href=3D"mailto:Konqui@kdab.com">Konqui</a>=
+</div>
+</blockquote>=
+</body></html>=
+
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB--
+
+--Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB--
+
+--Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB
+Content-Disposition: attachment;
+ filename=smime.p7s
+Content-Type: application/pkcs7-signature;
+ name=smime.p7s
+Content-Transfer-Encoding: base64
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIILdTCCBRow
+ggQCoAMCAQICEG0Z6qcZT2ozIuYiMnqqcd4wDQYJKoZIhvcNAQEFBQAwga4xCzAJBgNVBAYTAlVT
+MQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VS
+VFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMTYwNAYDVQQD
+Ey1VVE4tVVNFUkZpcnN0LUNsaWVudCBBdXRoZW50aWNhdGlvbiBhbmQgRW1haWwwHhcNMTEwNDI4
+MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjCBkzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIg
+TWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQx
+OTA3BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFpbCBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKEhFtLV5jUXi+LpOFAyKNTWF9mZfEy
+TvefMn1V0HhMVbdClOD5J3EHxcZppLkyxPFAGpDMJ1Zifxe1cWmu5SAb5MtjXmDKokH2auGj/7jf
+H0htZUOMKi4rYzh337EXrMLaggLW1DJq1GdvIBOPXDX65VSAr9hxCh03CgJQU2yVHakQFLSZlVkS
+Mf8JotJM3FLb3uJAAVtIaN3FSrTg7SQfOq9xXwfjrL8UO7AlcWg99A/WF1hGFYE8aIuLgw9teiFX
+5jSw2zJ+40rhpVJyZCaRTqWSD//gsWD9Gm9oUZljjRqLpcxCm5t9ImPTqaD8zp6Q30QZ9FxbNboW
+86eb/8ECAwEAAaOCAUswggFHMB8GA1UdIwQYMBaAFImCZ33EnSZwAEu0UEh83j2uBG59MB0GA1Ud
+DgQWBBR6E04AdFvGeGNkJ8Ev4qBbvHnFezAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADARBgNVHSAECjAIMAYGBFUdIAAwWAYDVR0fBFEwTzBNoEugSYZHaHR0cDovL2NybC51c2Vy
+dHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtQ2xpZW50QXV0aGVudGljYXRpb25hbmRFbWFpbC5jcmww
+dAYIKwYBBQUHAQEEaDBmMD0GCCsGAQUFBzAChjFodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVRO
+QWRkVHJ1c3RDbGllbnRfQ0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3Qu
+Y29tMA0GCSqGSIb3DQEBBQUAA4IBAQCF1r54V1VtM39EUv5C1QaoAQOAivsNsv1Kv/avQUn1G1rF
+0q0bc24+6SZ85kyYwTAo38v7QjyhJT4KddbQPTmGZtGhm7VNm2+vKGwdr+XqdFqo2rHA8XV6L566
+k3nK/uKRHlZ0sviN0+BDchvtj/1gOSBH+4uvOmVIPJg9pSW/ve9g4EnlFsjrP0OD8ODuDcHTzTNf
+m9C9YGqzO/761Mk6PB/tm/+bSTO+Qik5g+4zaS6CnUVNqGnagBsePdIaXXxHmaWbCG0SmYbWXVcH
+G6cwvktJRLiQfsrReTjrtDP6oDpdJlieYVUYtCHVmdXgQ0BCML7qpeeU0rD+83X5f27nMIIGUzCC
+BTugAwIBAgIQMFPel8s+Gckd6L+iGIwbpTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMCR0Ix
+GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxOTA3BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGljYXRpb24g
+YW5kIFNlY3VyZSBFbWFpbCBDQTAeFw0xNDA2MDIwMDAwMDBaFw0xNzA2MDEyMzU5NTlaMIIBXzEL
+MAkGA1UEBhMCU0UxDzANBgNVBBETBjY4MyAzMTESMBAGA1UECBMJVmFlcm1sYW5kMRAwDgYDVQQH
+EwdIYWdmb3JzMRgwFgYDVQQJEw9Ob3JyaW5ncyB2YWVnIDIxDzANBgNVBBITBkJveCAzMDEmMCQG
+A1UECgwdS2xhcsOkbHZkYWxlbnMgRGF0YWtvbnN1bHQgQUIxHTAbBgNVBAsTFEEgS0RBQiBHcm91
+cCBDb21wYW55MUMwQQYDVQQLDDpJc3N1ZWQgdGhyb3VnaCBLbGFyw6RsdmRhbGVucyBEYXRha29u
+c3VsdCBBQiBFLVBLSSBNYW5hZ2VyMR8wHQYDVQQLExZDb3Jwb3JhdGUgU2VjdXJlIEVtYWlsMRgw
+FgYDVQQDEw9EaWFuYSBHb25jYWx2ZXMxJzAlBgkqhkiG9w0BCQEWGGRpYW5hLmdvbmNhbHZlc0Br
+ZGFiLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrHSvWD6MR2tvF9A+wayTDg
+PvK3DahuvHWHzGQsd1p8bEh6qqupqgph2xO73P+ibM6EmNbCtZ+eQtW7l7iIyiC4IGsyEb5RSAtV
+zGAyebsO7SPHokbGIV5SVobaRQiJ+1gOvWUbqHSQ0T9ZPvMX2nNGIKZpqAfocRreZr36AZWRo4AF
+0uf6wz5aLEtq912u2rTWVsM1F966lexaepo0cZB9fdnnD8/pQX3zroj+vBTFNAkZXxxVwGMO24Pz
+92d/B6K8o1SP1ArqV4sxVYIxyQTmfW4X3iV/6bcbLfEcpcUNt6MUsjFulqr6a+j51alpyT3vNuJ9
+V1UI9jz3t/daQr0CAwEAAaOCAdIwggHOMB8GA1UdIwQYMBaAFHoTTgB0W8Z4Y2QnwS/ioFu8ecV7
+MB0GA1UdDgQWBBRIYj+FxAEGllaHmLL+EMhopIEOQjAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/
+BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwRgYDVR0gBD8wPTA7BgwrBgEEAbIx
+AQIBAwUwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLm5ldC9DUFMwVwYDVR0f
+BFAwTjBMoEqgSIZGaHR0cDovL2NybC5jb21vZG9jYS5jb20vQ09NT0RPQ2xpZW50QXV0aGVudGlj
+YXRpb25hbmRTZWN1cmVFbWFpbENBLmNybDCBiAYIKwYBBQUHAQEEfDB6MFIGCCsGAQUFBzAChkZo
+dHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9DbGllbnRBdXRoZW50aWNhdGlvbmFuZFNlY3Vy
+ZUVtYWlsQ0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wIwYDVR0R
+BBwwGoEYZGlhbmEuZ29uY2FsdmVzQGtkYWIuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQACzCCZ4ppg
+H7nXnCwisxjGLIgQMdwKPB6lnWk39YT0gEqvn85tDaXIZwGiRda7O1HWdWh7RoncolX3yHQ6p/BJ
+8RWkpxoc4es1wXSPmWMpspnglvtqYlfu7NZ/CqI6bvgqoy0w3KSv+GnVkiQ6SVKU4fV6itr5VG9q
+X0JYXAbKO8hOIP3NO3MVacPgzSIv83B9eLpfi/BlG6q6XKxVf4581lYbLL0F7cKQt1UYPiDsmPJG
++5SEHT6ZOBiLgqQVhAw4Di+6wymUHONBRuH2bH3cjfFlkCCjiFF/cS7Oharro2RFnWQ6beZ3EzCG
+FJILmq/dVMGsBFWme23hLYwtLJSXMYIDqzCCA6cCAQEwgagwgZMxCzAJBgNVBAYTAkdCMRswGQYD
+VQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9E
+TyBDQSBMaW1pdGVkMTkwNwYDVQQDEzBDT01PRE8gQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBT
+ZWN1cmUgRW1haWwgQ0ECEDBT3pfLPhnJHei/ohiMG6UwCQYFKw4DAhoFAKCCAdcwGAYJKoZIhvcN
+AQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTcwMTIwMTA1MTQxWjAjBgkqhkiG9w0B
+CQQxFgQU/AV0Tj17RqaDDCeGXWhe4epgX6gwgbkGCSsGAQQBgjcQBDGBqzCBqDCBkzELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxOTA3BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGlj
+YXRpb24gYW5kIFNlY3VyZSBFbWFpbCBDQQIQMFPel8s+Gckd6L+iGIwbpTCBuwYLKoZIhvcNAQkQ
+AgsxgauggagwgZMxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTkwNwYDVQQDEzBDT01P
+RE8gQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0ECEDBT3pfLPhnJHei/
+ohiMG6UwDQYJKoZIhvcNAQEBBQAEggEAEIfTyPoqjyJwrpYmZWRF6OY5ZCFdpw1UUfSXYUU2IdbL
+ph8QkMCc9uv5wk2IeE/9UxxvUR44J67Bu8hv/PCaeyMSh1j2peOlFG487SwyTjf5wIL+GEs8zvHo
+4+Dd2IPhAExt1Bjhmt6O7caF9LVrGQ/wlI6ZGN8MgjSgdrK4F3Ig4LbMuyTTcy3hDTvb+qzaQ4YI
+E+F4tnwhXG8FGEBnlng6nB4iXhoWSvBsjc1qF6eHEHzsOIZeNL7K6Imn7oKHJg+THGwHxC1TZGFt
+G92u6zV7Sc/i4ENH2MNzXT75mp8Gq/k6gpRz9nw8UVuLN/rDIb6esnEgVH9ad3awD154HAAAAAAA
+AA==
+--Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB--
+
diff --git a/src/core/templatetestdata/smime-signed-apple.mbox.html b/src/core/templatetestdata/smime-signed-apple.mbox.html
new file mode 100644
index 0000000..11652a1
--- /dev/null
+++ b/src/core/templatetestdata/smime-signed-apple.mbox.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signErr">
+ <tr class="signErrH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Invalid signature.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signErrB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">Olá Konqui,<div class="">Here is the pdf you asked for!</div><div class="">Cheers,</div><div class="">Quaack</div></div>
+ </div>
+ <a name="att1.2.2"/>
+ <div id="attachmentDiv1.2.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2.2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <blockquote type="cite" class="">
+ <div class="">On 20 Jan 2017, at 10:35, Konqui &lt;<a href="mailto:Konqui@kdab.com">Konqui</a></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signErrH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-signed-apple.mbox.inProgress.html b/src/core/templatetestdata/smime-signed-apple.mbox.inProgress.html
new file mode 100644
index 0000000..5b57b93
--- /dev/null
+++ b/src/core/templatetestdata/smime-signed-apple.mbox.inProgress.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signInProgress">
+ <tr class="signInProgressH">
+ <td dir="ltr">Please wait while the signature is being verified...</td>
+ </tr>
+ <tr class="signInProgressB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <a name="att1.2.1"/>
+ <div id="attachmentDiv1.2.1">
+ <div style="position: relative">Olá Konqui,<div class="">Here is the pdf you asked for!</div><div class="">Cheers,</div><div class="">Quaack</div></div>
+ </div>
+ <a name="att1.2.2"/>
+ <div id="attachmentDiv1.2.2">
+ <hr/>
+ <div>
+ <a href="attachment:1.2.2?place=body"><img align="center" height="48" width="48" src="file:image-png.svg" border="0" style="max-width: 100%" alt=""/>image.png</a>
+ </div>
+ <div/>
+ </div>
+ <a name="att1.2.3"/>
+ <div id="attachmentDiv1.2.3">
+ <div style="position: relative">
+ <blockquote type="cite" class="">
+ <div class="">On 20 Jan 2017, at 10:35, Konqui &lt;<a href="mailto:Konqui@kdab.com">Konqui</a></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signInProgressH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-signed-apple.mbox.tree b/src/core/templatetestdata/smime-signed-apple.mbox.tree
new file mode 100644
index 0000000..3ade4ef
--- /dev/null
+++ b/src/core/templatetestdata/smime-signed-apple.mbox.tree
@@ -0,0 +1,3 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::AlternativeMessagePart
diff --git a/src/core/templatetestdata/smime-signed-encrypted.mbox b/src/core/templatetestdata/smime-signed-encrypted.mbox
new file mode 100644
index 0000000..49857e1
--- /dev/null
+++ b/src/core/templatetestdata/smime-signed-encrypted.mbox
@@ -0,0 +1,38 @@
+From test@example.com Wed, 08 Sep 2010 17:51:32 +0200
+From: S/MIME Test <test@example.com>
+To: test@example.com
+Subject: S/MIME signed and encrypted
+Date: Wed, 08 Sep 2010 17:51:32 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Disposition: attachment; filename="smime.p7m"
+Content-Transfer-Encoding: base64
+
+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
diff --git a/src/core/templatetestdata/smime-signed-encrypted.mbox.html b/src/core/templatetestdata/smime-signed-encrypted.mbox.html
new file mode 100644
index 0000000..e13d684
--- /dev/null
+++ b/src/core/templatetestdata/smime-signed-encrypted.mbox.html
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="encr">
+ <tr class="encrH">
+ <td dir="ltr">Encrypted message</td>
+ </tr>
+ <tr class="encrB">
+ <td>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <table cellspacing="1" cellpadding="1" class="signOkKeyOk">
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <td>Signed by <a href="mailto:test@example.com">test@example.com</a>.</td>
+ <td align="right">
+ <a href="kmail:showSignatureDetails">Show Details</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkB">
+ <td>
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <div class="noquote">
+ <div dir="ltr">encrypted message text</div>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="signOkKeyOkH">
+ <td dir="ltr">End of signed message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr class="encrH">
+ <td dir="ltr">End of encrypted message</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/smime-signed-encrypted.mbox.tree b/src/core/templatetestdata/smime-signed-encrypted.mbox.tree
new file mode 100644
index 0000000..7d5bbeb
--- /dev/null
+++ b/src/core/templatetestdata/smime-signed-encrypted.mbox.tree
@@ -0,0 +1,5 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::EncryptedMessagePart
+ * MimeTreeParser::SignedMessagePart
+ * MimeTreeParser::TextMessagePart
+ * MimeTreeParser::MessagePart
diff --git a/src/core/templatetestdata/text+html-maillinglist.mbox b/src/core/templatetestdata/text+html-maillinglist.mbox
new file mode 100644
index 0000000..f9c6387
--- /dev/null
+++ b/src/core/templatetestdata/text+html-maillinglist.mbox
@@ -0,0 +1,163 @@
+Return-Path: <bugzilla-bounces@lists.kolabsys.com>
+Received: from kolab01.kolabsys.com ([unix socket])
+ by kolab01.kolabsys.com (Cyrus v2.4.17-Kolab-2.4.17-1.el6.kolab_3.0) with LMTPA;
+ Thu, 11 Apr 2013 09:03:01 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from ext-mx01.kolabsys.com (unknown [10.10.20.253])
+ by kolab01.kolabsys.com (Postfix) with ESMTP id 3D8A9C0AE3
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>; Thu, 11 Apr 2013 09:03:01 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by ext-mx01.kolabsys.com (Postfix) with ESMTP id 89D4E10057E
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>; Thu, 11 Apr 2013 09:02:38 +0200 (CEST)
+X-Virus-Scanned: amavisd-new at example.com
+X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "MIME-Version"
+Received: from ext-mx01.kolabsys.com ([127.0.0.1])
+ by localhost (fw01.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id BJxrh9Yst1Ac
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:38 +0200 (CEST)
+Received: from lists.kolabsys.com (static.253.32.46.78.clients.your-server.de [78.46.32.253])
+ by ext-mx01.kolabsys.com (Postfix) with ESMTP id 609821004A7
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>; Thu, 11 Apr 2013 09:02:38 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by lists.kolabsys.com (Postfix) with ESMTP id BFA6941D4EAD;
+ Thu, 11 Apr 2013 09:03:00 +0200 (CEST)
+X-Virus-Scanned: Debian amavisd-new at lists.kolabsys.com
+X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "MIME-Version"
+Received: from lists.kolabsys.com ([127.0.0.1])
+ by localhost (lists.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id TYU5eAMK5J6T; Thu, 11 Apr 2013 09:02:58 +0200 (CEST)
+Received: from lists.kolabsys.com (localhost [127.0.0.1])
+ by lists.kolabsys.com (Postfix) with ESMTP id 182FC41D2A3B;
+ Thu, 11 Apr 2013 09:02:58 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by lists.kolabsys.com (Postfix) with ESMTP id A2B3641D4EC2
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:56 +0200 (CEST)
+X-Virus-Scanned: Debian amavisd-new at lists.kolabsys.com
+Received: from lists.kolabsys.com ([127.0.0.1])
+ by localhost (lists.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id cyO-CNB3vFwu for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:54 +0200 (CEST)
+Received: from ext-mx02.kolabsys.com (ext-mx02.kolabsys.com [94.230.208.222])
+ by lists.kolabsys.com (Postfix) with ESMTP id 1640E41D2A3B
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:54 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by ext-mx01.kolabsys.com (Postfix) with ESMTP id 58CBC160522
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 10:02:44 +0200 (CEST)
+X-Virus-Scanned: amavisd-new at example.com
+Received: from ext-mx02.kolabsys.com ([127.0.0.1])
+ by localhost (fw02.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id 4VjnHg6Y6jo7 for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 10:02:42 +0200 (CEST)
+Received: from app04.kolabsys.com (unknown [10.10.20.16])
+ by ext-mx02.kolabsys.com (Postfix) with ESMTP id 062DF160521
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 10:02:42 +0200 (CEST)
+Received: by app04.kolabsys.com (Postfix, from userid 48)
+ id 8E7524048C; Thu, 11 Apr 2013 09:02:51 +0200 (CEST)
+From: Kolab Bugzilla <noreply@kolab.org>
+To: bugzilla@lists.kolabsys.com
+Subject: [Bug 1741] Standard folder name configuration ignored on creating
+ new users
+Date: Thu, 11 Apr 2013 07:02:43 +0000
+X-Bugzilla-Reason: GlobalWatcher
+X-Bugzilla-Type: changed
+X-Bugzilla-Watch-Reason: None
+X-Bugzilla-Product: UCS
+X-Bugzilla-Component: roundcube
+X-Bugzilla-Keywords:
+X-Bugzilla-Severity: normal
+X-Bugzilla-Who: wickert@kolabsys.com
+X-Bugzilla-Status: NEW
+X-Bugzilla-Priority: P3
+X-Bugzilla-Assigned-To: machniak@kolabsys.com
+X-Bugzilla-Target-Milestone: 3.1-next
+X-Bugzilla-Changed-Fields:
+Message-ID: <bug-1741-12-HOSaBe3Z8l@http.issues.kolab.org/>
+In-Reply-To: <bug-1741-12@http.issues.kolab.org/>
+References: <bug-1741-12@http.issues.kolab.org/>
+X-Bugzilla-URL: http://issues.kolab.org/
+Auto-Submitted: auto-generated
+MIME-Version: 1.0
+X-BeenThere: bugzilla@lists.kolabsys.com
+X-Mailman-Version: 2.1.11
+Precedence: list
+Reply-To: server-team@lists.kolabsys.com
+List-Id: All Bugzilla email notifications <bugzilla.lists.kolabsys.com>
+List-Unsubscribe: <https://lists.kolabsys.com/mailman/options/bugzilla>,
+ <mailto:bugzilla-request@lists.kolabsys.com?subject=unsubscribe>
+List-Archive: <http://lists.kolabsys.com/pipermail/bugzilla>
+List-Post: <mailto:bugzilla@lists.kolabsys.com>
+List-Help: <mailto:bugzilla-request@lists.kolabsys.com?subject=help>
+List-Subscribe: <https://lists.kolabsys.com/mailman/listinfo/bugzilla>,
+ <mailto:bugzilla-request@lists.kolabsys.com?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============1778809852=="
+Mime-version: 1.0
+Sender: bugzilla-bounces@lists.kolabsys.com
+Errors-To: bugzilla-bounces@lists.kolabsys.com
+
+
+--===============1778809852==
+Content-Type: multipart/alternative; boundary="1365663771.ec4d382.10226"; charset="us-ascii"
+
+
+--1365663771.ec4d382.10226
+Date: Thu, 11 Apr 2013 09:02:51 +0200
+MIME-Version: 1.0
+Content-Type: text/plain; charset="UTF-8"
+
+https://issues.kolab.org/show_bug.cgi?id=1741
+
+--- Comment #4 from Christoph Wickert <wickert@kolabsys.com> ---
+You can get everything you need on test93-18.
+
+--
+You are receiving this mail because:
+You are watching all bug changes.
+
+--1365663771.ec4d382.10226
+Date: Thu, 11 Apr 2013 09:02:51 +0200
+MIME-Version: 1.0
+Content-Type: text/html; charset="UTF-8"
+
+<html>
+ <head>
+ <base href="https://issues.kolab.org/" />
+ </head>
+ <body>
+ <b><a class="bz_bug_link
+ bz_status_NEW "
+ title="NEW --- - Standard folder name configuration ignored on creating new users"
+ href="https://issues.kolab.org/show_bug.cgi?id=1741#c4">Comment # 4</a>
+ on <a class="bz_bug_link
+ bz_status_NEW "
+ title="NEW --- - Standard folder name configuration ignored on creating new users"
+ href="https://issues.kolab.org/show_bug.cgi?id=1741">bug 1741</a>
+ from <span class="vcard"><a class="email" href="mailto:wickert&#64;kolabsys.com" title="Christoph Wickert &lt;wickert&#64;kolabsys.com&gt;"> <span class="fn">Christoph Wickert</span></a>
+</span></b>
+ <pre>You can get everything you need on test93-18.</pre>
+ <span>You are receiving this mail because:</span>
+ <ul>
+ <li>You are watching all bug changes.</li>
+ </ul>
+ </body>
+</html>
+
+--1365663771.ec4d382.10226--
+
+--===============1778809852==
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+_______________________________________________
+bugzilla mailing list
+bugzilla@lists.kolabsys.com
+https://lists.kolabsys.com/mailman/listinfo/bugzilla
+
+--===============1778809852==--
+
diff --git a/src/core/templatetestdata/text+html-maillinglist.mbox.html b/src/core/templatetestdata/text+html-maillinglist.mbox.html
new file mode 100644
index 0000000..2b5af63
--- /dev/null
+++ b/src/core/templatetestdata/text+html-maillinglist.mbox.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <body>
+ <div style="position: relative; word-wrap: break-word">
+ <a name="att"/>
+ <div id="attachmentDiv">
+ <a name="att1"/>
+ <div id="attachmentDiv1">
+ <a name="att1.2"/>
+ <div id="attachmentDiv1.2">
+ <div style="position: relative">
+ <b><a class="bz_bug_link bz_status_NEW " title="NEW --- - Standard folder name configuration ignored on creating new users" href="https://issues.kolab.org/show_bug.cgi?id=1741#c4">Comment # 4</a>on <a class="bz_bug_link bz_status_NEW " title="NEW --- - Standard folder name configuration ignored on creating new users" href="https://issues.kolab.org/show_bug.cgi?id=1741">bug 1741</a>from <span class="vcard"><a class="email" href="mailto:wickert@kolabsys.com" title="Christoph Wickert &lt;wickert@kolabsys.com&gt;"><span class="fn">Christoph Wickert</span></a></span></b>
+ <pre>You can get everything you need on test93-18.</pre>
+ <span>You are receiving this mail because:</span>
+ <ul>
+ <li>You are watching all bug changes.</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <a name="att2"/>
+ <div id="attachmentDiv2">
+ <div class="noquote">
+ <div dir="ltr">_______________________________________________</div>
+ <div dir="ltr">bugzilla mailing list</div>
+ <div dir="ltr">
+ <a href="mailto:bugzilla@lists.kolabsys.com">bugzilla@lists.kolabsys.com</a>
+ </div>
+ <div dir="ltr">
+ <a href="https://lists.kolabsys.com/mailman/listinfo/bugzilla">https://lists.kolabsys.com/mailman/listinfo/bugzilla</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/core/templatetestdata/text+html-maillinglist.mbox.tree b/src/core/templatetestdata/text+html-maillinglist.mbox.tree
new file mode 100644
index 0000000..3738cb3
--- /dev/null
+++ b/src/core/templatetestdata/text+html-maillinglist.mbox.tree
@@ -0,0 +1,5 @@
+ * MimeTreeParser::MessagePartList
+ * MimeTreeParser::MimeMessagePart
+ * MimeTreeParser::AlternativeMessagePart
+ * MimeTreeParser::AttachmentMessagePart
+ * MimeTreeParser::MessagePart

File Metadata

Mime Type
text/x-diff
Expires
Sat, May 10, 8:48 AM (1 d, 16 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
cc/72/33639537c20a0874cc5b1a85b0f1

Event Timeline