summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/mime/mailtemplates.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-10 21:36:17 -0600
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-10 21:38:37 -0600
commite07a23c486f67cc2014af3fd8a639a13dd100162 (patch)
treec2e5e739b590ece4941672f3a55508ef06d6d1ac /framework/src/domain/mime/mailtemplates.cpp
parente354603dcb42c54ab11c0c393d5a1607ed6343d7 (diff)
downloadkube-e07a23c486f67cc2014af3fd8a639a13dd100162.tar.gz
kube-e07a23c486f67cc2014af3fd8a639a13dd100162.zip
splitAddress does not work if the name has a comma in it
With i.e. "Mollekopf, Christian <mollekopf@example.org>", we'l end up with an address "Mollekopf" and one "Christian <mollekopf@example.org>".
Diffstat (limited to 'framework/src/domain/mime/mailtemplates.cpp')
-rw-r--r--framework/src/domain/mime/mailtemplates.cpp45
1 files changed, 19 insertions, 26 deletions
diff --git a/framework/src/domain/mime/mailtemplates.cpp b/framework/src/domain/mime/mailtemplates.cpp
index bafe12d4..7bfcf38e 100644
--- a/framework/src/domain/mime/mailtemplates.cpp
+++ b/framework/src/domain/mime/mailtemplates.cpp
@@ -36,7 +36,6 @@
36 36
37#include <KCodecs/KCharsets> 37#include <KCodecs/KCharsets>
38#include <KMime/Types> 38#include <KMime/Types>
39#include <KCodecs/KEmailAddress>
40 39
41#include <mimetreeparser/objecttreeparser.h> 40#include <mimetreeparser/objecttreeparser.h>
42 41
@@ -851,12 +850,12 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio
851 const auto htmlContent = otp.htmlContent(); 850 const auto htmlContent = otp.htmlContent();
852 851
853 plainMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body) { 852 plainMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body) {
854 //Quoted body */ 853 //Quoted body
855 QString plainQuote = quotedPlainText(body, origMsg->from()->displayString()); 854 QString plainQuote = quotedPlainText(body, origMsg->from()->displayString());
856 if (plainQuote.endsWith(QLatin1Char('\n'))) { 855 if (plainQuote.endsWith(QLatin1Char('\n'))) {
857 plainQuote.chop(1); 856 plainQuote.chop(1);
858 } 857 }
859 //The plain body is complete */ 858 //The plain body is complete
860 auto plainBodyResult = plainBody + plainQuote; 859 auto plainBodyResult = plainBody + plainQuote;
861 htmlMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body, const QString &headElement) { 860 htmlMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body, const QString &headElement) {
862 //The html body is complete 861 //The html body is complete
@@ -916,22 +915,17 @@ static KMime::Content *createBodyPart(const QByteArray &body) {
916 return mainMessage; 915 return mainMessage;
917} 916}
918 917
919static void applyAddresses(const QStringList &list, std::function<void(const QByteArray &, const QByteArray &)> callback) 918static KMime::Types::Mailbox::List stringListToMailboxes(const QStringList &list)
920{ 919{
921 for (const auto &to : list) { 920 KMime::Types::Mailbox::List mailboxes;
922 QByteArray displayName; 921 for (const auto &s : list) {
923 QByteArray addrSpec; 922 KMime::Types::Mailbox mb;
924 QByteArray comment; 923 mb.fromUnicodeString(s);
925 KEmailAddress::splitAddress(to.toUtf8(), displayName, addrSpec, comment); 924 mailboxes << mb;
926 callback(addrSpec, displayName);
927 } 925 }
926 return mailboxes;
928} 927}
929 928
930// static void applyAddresses(const QString &list, std::function<void(const QByteArray &, const QByteArray &)> callback)
931// {
932// applyAddresses(KEmailAddress::splitAddressList(list), callback);
933// }
934
935KMime::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, const QList<Attachment> &attachments, const std::vector<GpgME::Key> &signingKeys) 929KMime::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, const QList<Attachment> &attachments, const std::vector<GpgME::Key> &signingKeys)
936{ 930{
937 auto mail = existingMessage; 931 auto mail = existingMessage;
@@ -940,20 +934,19 @@ KMime::Message::Ptr MailTemplates::createMessage(KMime::Message::Ptr existingMes
940 } 934 }
941 935
942 mail->to(true)->clear(); 936 mail->to(true)->clear();
943 applyAddresses(to, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 937 for (const auto &mb : stringListToMailboxes(to)) {
944 mail->to(true)->addAddress(addrSpec, displayName); 938 mail->to()->addAddress(mb);
945 }); 939 }
946
947 mail->cc(true)->clear(); 940 mail->cc(true)->clear();
948 applyAddresses(cc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 941 for (const auto &mb : stringListToMailboxes(cc)) {
949 mail->cc(true)->addAddress(addrSpec, displayName); 942 mail->cc()->addAddress(mb);
950 }); 943 }
951
952 mail->bcc(true)->clear(); 944 mail->bcc(true)->clear();
953 applyAddresses(bcc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 945 for (const auto &mb : stringListToMailboxes(bcc)) {
954 mail->bcc(true)->addAddress(addrSpec, displayName); 946 mail->bcc()->addAddress(mb);
955 }); 947 }
956 948
949 mail->from(true)->clear();
957 mail->from(true)->addAddress(from); 950 mail->from(true)->addAddress(from);
958 951
959 mail->subject(true)->fromUnicodeString(subject, "utf-8"); 952 mail->subject(true)->fromUnicodeString(subject, "utf-8");