summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/mime/mailtemplates.cpp
diff options
context:
space:
mode:
authorRémi Nicole <nicole@kolabsystems.com>2018-02-21 21:11:01 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-02-21 21:19:32 +0100
commitd3228a2899992370e3fb19609eb1433d02de0f40 (patch)
treea78d3d04de3856ad4da058d16174ef58797a43cc /framework/src/domain/mime/mailtemplates.cpp
parent6299a2fee34e53938d7c230e7e29611a6bcdb2b9 (diff)
downloadkube-d3228a2899992370e3fb19609eb1433d02de0f40.tar.gz
kube-d3228a2899992370e3fb19609eb1433d02de0f40.zip
T7024 fix: implement attachment-based forwarding
Summary: Implement attachment-based forwarding. Some notes: - `loadAsDraft` was removed in favor of new enum `loadType` in QML, and callback based generic programming in C++ Reviewers: cmollekopf Tags: #kube Maniphest Tasks: T7024 Differential Revision: https://phabricator.kde.org/D10676
Diffstat (limited to 'framework/src/domain/mime/mailtemplates.cpp')
-rw-r--r--framework/src/domain/mime/mailtemplates.cpp36
1 files changed, 34 insertions, 2 deletions
diff --git a/framework/src/domain/mime/mailtemplates.cpp b/framework/src/domain/mime/mailtemplates.cpp
index 9af15e91..8e644b34 100644
--- a/framework/src/domain/mime/mailtemplates.cpp
+++ b/framework/src/domain/mime/mailtemplates.cpp
@@ -864,6 +864,34 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio
864 }); 864 });
865} 865}
866 866
867void MailTemplates::forward(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback)
868{
869 KMime::Message::Ptr wrapperMsg(new KMime::Message);
870
871 wrapperMsg->to()->clear();
872 wrapperMsg->cc()->clear();
873
874 wrapperMsg->subject()->fromUnicodeString(forwardSubject(origMsg->subject()->asUnicodeString()), "utf-8");
875
876 const QByteArray refStr = getRefStr(origMsg);
877 if (!refStr.isEmpty()) {
878 wrapperMsg->references()->fromUnicodeString(QString::fromLocal8Bit(refStr), "utf-8");
879 }
880
881 KMime::Content* fwdAttachment = new KMime::Content;
882
883 fwdAttachment->contentDisposition()->setDisposition(KMime::Headers::CDinline);
884 fwdAttachment->contentType()->setMimeType("message/rfc822");
885 fwdAttachment->contentDisposition()->setFilename(origMsg->subject()->asUnicodeString() + ".eml");
886 // The mail was parsed in loadMessage before, so no need to assemble it
887 fwdAttachment->setBody(origMsg->encodedContent());
888
889 wrapperMsg->addContent(fwdAttachment);
890 wrapperMsg->assemble();
891
892 callback(wrapperMsg);
893}
894
867QString MailTemplates::plaintextContent(const KMime::Message::Ptr &msg) 895QString MailTemplates::plaintextContent(const KMime::Message::Ptr &msg)
868{ 896{
869 MimeTreeParser::ObjectTreeParser otp; 897 MimeTreeParser::ObjectTreeParser otp;
@@ -899,10 +927,14 @@ static KMime::Content *createAttachmentPart(const QByteArray &content, const QSt
899 } else { 927 } else {
900 part->contentDisposition(true)->setDisposition(KMime::Headers::CDattachment); 928 part->contentDisposition(true)->setDisposition(KMime::Headers::CDattachment);
901 } 929 }
930
902 part->contentType(true)->setMimeType(mimeType); 931 part->contentType(true)->setMimeType(mimeType);
903 part->contentType(true)->setName(name, "utf-8"); 932 part->contentType(true)->setName(name, "utf-8");
904 //Just always encode attachments base64 so it's safe for binary data 933 // Just always encode attachments base64 so it's safe for binary data,
905 part->contentTransferEncoding(true)->setEncoding(KMime::Headers::CEbase64); 934 // except when it's another message
935 if(mimeType != "message/rfc822") {
936 part->contentTransferEncoding(true)->setEncoding(KMime::Headers::CEbase64);
937 }
906 part->setBody(content); 938 part->setBody(content);
907 return part; 939 return part;
908} 940}