diff options
-rw-r--r-- | framework/src/domain/mime/mailtemplates.cpp | 51 |
1 files changed, 14 insertions, 37 deletions
diff --git a/framework/src/domain/mime/mailtemplates.cpp b/framework/src/domain/mime/mailtemplates.cpp index c562698f..9af15e91 100644 --- a/framework/src/domain/mime/mailtemplates.cpp +++ b/framework/src/domain/mime/mailtemplates.cpp | |||
@@ -188,9 +188,9 @@ QByteArray getRefStr(const KMime::Message::Ptr &msg) | |||
188 | return retRefStr; | 188 | return retRefStr; |
189 | } | 189 | } |
190 | 190 | ||
191 | KMime::Content *createPlainPartContent(const KMime::Message::Ptr &msg, const QString &plainBody) | 191 | KMime::Content *createPlainPartContent(const QString &plainBody, KMime::Content *parent = nullptr) |
192 | { | 192 | { |
193 | KMime::Content *textPart = new KMime::Content(msg.data()); | 193 | KMime::Content *textPart = new KMime::Content(parent); |
194 | textPart->contentType()->setMimeType("text/plain"); | 194 | textPart->contentType()->setMimeType("text/plain"); |
195 | //FIXME This is supposed to select a charset out of the available charsets that contains all necessary characters to render the text | 195 | //FIXME This is supposed to select a charset out of the available charsets that contains all necessary characters to render the text |
196 | // QTextCodec *charset = selectCharset(m_charsets, plainBody); | 196 | // QTextCodec *charset = selectCharset(m_charsets, plainBody); |
@@ -201,17 +201,16 @@ KMime::Content *createPlainPartContent(const KMime::Message::Ptr &msg, const QSt | |||
201 | return textPart; | 201 | return textPart; |
202 | } | 202 | } |
203 | 203 | ||
204 | KMime::Content *createMultipartAlternativeContent(const KMime::Message::Ptr &msg, const QString &plainBody, const QString &htmlBody) | 204 | KMime::Content *createMultipartAlternativeContent(const QString &plainBody, const QString &htmlBody, KMime::Message *parent = nullptr) |
205 | { | 205 | { |
206 | KMime::Content *multipartAlternative = new KMime::Content(msg.data()); | 206 | KMime::Content *multipartAlternative = new KMime::Content(parent); |
207 | multipartAlternative->contentType()->setMimeType("multipart/alternative"); | 207 | multipartAlternative->contentType()->setMimeType("multipart/alternative"); |
208 | const QByteArray boundary = KMime::multiPartBoundary(); | 208 | multipartAlternative->contentType()->setBoundary(KMime::multiPartBoundary()); |
209 | multipartAlternative->contentType()->setBoundary(boundary); | ||
210 | 209 | ||
211 | KMime::Content *textPart = createPlainPartContent(msg, plainBody); | 210 | KMime::Content *textPart = createPlainPartContent(plainBody, multipartAlternative); |
212 | multipartAlternative->addContent(textPart); | 211 | multipartAlternative->addContent(textPart); |
213 | 212 | ||
214 | KMime::Content *htmlPart = new KMime::Content(msg.data()); | 213 | KMime::Content *htmlPart = new KMime::Content(multipartAlternative); |
215 | htmlPart->contentType()->setMimeType("text/html"); | 214 | htmlPart->contentType()->setMimeType("text/html"); |
216 | //FIXME This is supposed to select a charset out of the available charsets that contains all necessary characters to render the text | 215 | //FIXME This is supposed to select a charset out of the available charsets that contains all necessary characters to render the text |
217 | // QTextCodec *charset = selectCharset(m_charsets, htmlBody); | 216 | // QTextCodec *charset = selectCharset(m_charsets, htmlBody); |
@@ -242,8 +241,8 @@ void addProcessedBodyToMessage(const KMime::Message::Ptr &msg, const QString &pl | |||
242 | const QByteArray boundary = KMime::multiPartBoundary(); | 241 | const QByteArray boundary = KMime::multiPartBoundary(); |
243 | KMime::Content *const mainTextPart = | 242 | KMime::Content *const mainTextPart = |
244 | htmlBody.isEmpty() ? | 243 | htmlBody.isEmpty() ? |
245 | createPlainPartContent(msg, plainBody) : | 244 | createPlainPartContent(plainBody, msg.data()) : |
246 | createMultipartAlternativeContent(msg, plainBody, htmlBody); | 245 | createMultipartAlternativeContent(plainBody, htmlBody, msg.data()); |
247 | mainTextPart->assemble(); | 246 | mainTextPart->assemble(); |
248 | 247 | ||
249 | KMime::Content *textPart = mainTextPart; | 248 | KMime::Content *textPart = mainTextPart; |
@@ -908,33 +907,11 @@ static KMime::Content *createAttachmentPart(const QByteArray &content, const QSt | |||
908 | return part; | 907 | return part; |
909 | } | 908 | } |
910 | 909 | ||
911 | static KMime::Content *createPlainBodyPart(const QString &body) { | 910 | static KMime::Content *createBodyPart(const QString &body, bool htmlBody) { |
912 | auto mainMessage = new KMime::Content; | ||
913 | mainMessage->setBody(body.toUtf8()); | ||
914 | mainMessage->contentType(true)->setMimeType("text/plain"); | ||
915 | return mainMessage; | ||
916 | } | ||
917 | |||
918 | static KMime::Content *createHtmlBodyPart(const QString &body) { | ||
919 | auto mainMessage = new KMime::Content; | ||
920 | mainMessage->setBody(body.toUtf8()); | ||
921 | mainMessage->contentType(true)->setMimeType("text/html"); | ||
922 | return mainMessage; | ||
923 | } | ||
924 | |||
925 | static KMime::Content *createBodyPart(const QByteArray &body, bool htmlBody) { | ||
926 | if (htmlBody) { | 911 | if (htmlBody) { |
927 | auto bodyPart = new KMime::Content; | 912 | return createMultipartAlternativeContent(toPlainText(body), body); |
928 | bodyPart->contentType(true)->setMimeType("multipart/alternative"); | ||
929 | bodyPart->contentType()->setBoundary(KMime::multiPartBoundary()); | ||
930 | |||
931 | bodyPart->addContent(createPlainBodyPart(toPlainText(body))); | ||
932 | bodyPart->addContent(createHtmlBodyPart(body)); | ||
933 | return bodyPart; | ||
934 | } else { | ||
935 | return createPlainBodyPart(body); | ||
936 | } | 913 | } |
937 | return nullptr; | 914 | return createPlainPartContent(body); |
938 | } | 915 | } |
939 | 916 | ||
940 | static KMime::Types::Mailbox::List stringListToMailboxes(const QStringList &list) | 917 | static KMime::Types::Mailbox::List stringListToMailboxes(const QStringList &list) |
@@ -999,13 +976,13 @@ KMime::Message::Ptr MailTemplates::createMessage(KMime::Message::Ptr existingMes | |||
999 | bodyPart->contentType()->setBoundary(KMime::multiPartBoundary()); | 976 | bodyPart->contentType()->setBoundary(KMime::multiPartBoundary()); |
1000 | bodyPart->contentTransferEncoding()->setEncoding(KMime::Headers::CE7Bit); | 977 | bodyPart->contentTransferEncoding()->setEncoding(KMime::Headers::CE7Bit); |
1001 | bodyPart->setPreamble("This is a multi-part message in MIME format.\n"); | 978 | bodyPart->setPreamble("This is a multi-part message in MIME format.\n"); |
1002 | bodyPart->addContent(createBodyPart(body.toUtf8(), htmlBody)); | 979 | bodyPart->addContent(createBodyPart(body, htmlBody)); |
1003 | for (const auto &attachment : attachments) { | 980 | for (const auto &attachment : attachments) { |
1004 | bodyPart->addContent(createAttachmentPart(attachment.data, attachment.filename, attachment.isInline, attachment.mimeType, attachment.name)); | 981 | bodyPart->addContent(createAttachmentPart(attachment.data, attachment.filename, attachment.isInline, attachment.mimeType, attachment.name)); |
1005 | } | 982 | } |
1006 | return bodyPart; | 983 | return bodyPart; |
1007 | } else { | 984 | } else { |
1008 | return createBodyPart(body.toUtf8(), htmlBody); | 985 | return createBodyPart(body, htmlBody); |
1009 | } | 986 | } |
1010 | }()}; | 987 | }()}; |
1011 | bodyPart->assemble(); | 988 | bodyPart->assemble(); |