From e07a23c486f67cc2014af3fd8a639a13dd100162 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 10 Aug 2017 21:36:17 -0600 Subject: splitAddress does not work if the name has a comma in it With i.e. "Mollekopf, Christian ", we'l end up with an address "Mollekopf" and one "Christian ". --- framework/src/domain/composercontroller.cpp | 28 +++++++------- framework/src/domain/mime/mailtemplates.cpp | 45 +++++++++------------- .../src/domain/mime/tests/mailtemplatetest.cpp | 3 +- 3 files changed, 35 insertions(+), 41 deletions(-) (limited to 'framework/src') diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index 311c79f3..e4bd6ae2 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp @@ -22,7 +22,6 @@ #include "composercontroller.h" #include #include -#include #include #include #include @@ -250,24 +249,25 @@ Selector *ComposerController::identitySelector() const return mIdentitySelector.data(); } -static void applyAddresses(const QStringList &list, std::function callback) +static void applyAddresses(const KMime::Types::Mailbox::List &list, std::function callback) { for (const auto &to : list) { - QByteArray displayName; - QByteArray addrSpec; - QByteArray comment; - KEmailAddress::splitAddress(to.toUtf8(), displayName, addrSpec, comment); - callback(addrSpec, displayName); + callback(to.address(), to.name().toUtf8()); } } -static void applyAddresses(const QString &list, std::function callback) +static void applyAddresses(const QStringList &list, std::function callback) { - applyAddresses(KEmailAddress::splitAddressList(list), callback); + KMime::Types::Mailbox::List mailboxes; + for (const auto &s : list) { + KMime::Types::Mailbox mb; + mb.fromUnicodeString(s); + mailboxes << mb; + } + applyAddresses(mailboxes, callback); } - -static QStringList getStringListFromAddresses(const QString &s) +static QStringList getStringListFromAddresses(const KMime::Types::Mailbox::List &s) { QStringList list; applyAddresses(s, [&](const QByteArray &addrSpec, const QByteArray &displayName) { @@ -332,9 +332,9 @@ void ComposerController::addAttachmentPart(KMime::Content *partToAttach) void ComposerController::setMessage(const KMime::Message::Ptr &msg) { - mToModel->setStringList(getStringListFromAddresses(msg->to(true)->asUnicodeString())); - mCcModel->setStringList(getStringListFromAddresses(msg->cc(true)->asUnicodeString())); - mBccModel->setStringList(getStringListFromAddresses(msg->bcc(true)->asUnicodeString())); + mToModel->setStringList(getStringListFromAddresses(msg->to(true)->mailboxes())); + mCcModel->setStringList(getStringListFromAddresses(msg->cc(true)->mailboxes())); + mBccModel->setStringList(getStringListFromAddresses(msg->bcc(true)->mailboxes())); setSubject(msg->subject(true)->asUnicodeString()); setBody(MailTemplates::plaintextContent(msg)); 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 @@ #include #include -#include #include @@ -851,12 +850,12 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio const auto htmlContent = otp.htmlContent(); plainMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body) { - //Quoted body */ + //Quoted body QString plainQuote = quotedPlainText(body, origMsg->from()->displayString()); if (plainQuote.endsWith(QLatin1Char('\n'))) { plainQuote.chop(1); } - //The plain body is complete */ + //The plain body is complete auto plainBodyResult = plainBody + plainQuote; htmlMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body, const QString &headElement) { //The html body is complete @@ -916,22 +915,17 @@ static KMime::Content *createBodyPart(const QByteArray &body) { return mainMessage; } -static void applyAddresses(const QStringList &list, std::function callback) +static KMime::Types::Mailbox::List stringListToMailboxes(const QStringList &list) { - for (const auto &to : list) { - QByteArray displayName; - QByteArray addrSpec; - QByteArray comment; - KEmailAddress::splitAddress(to.toUtf8(), displayName, addrSpec, comment); - callback(addrSpec, displayName); + KMime::Types::Mailbox::List mailboxes; + for (const auto &s : list) { + KMime::Types::Mailbox mb; + mb.fromUnicodeString(s); + mailboxes << mb; } + return mailboxes; } -// static void applyAddresses(const QString &list, std::function callback) -// { -// applyAddresses(KEmailAddress::splitAddressList(list), callback); -// } - 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, const QList &attachments, const std::vector &signingKeys) { auto mail = existingMessage; @@ -940,20 +934,19 @@ KMime::Message::Ptr MailTemplates::createMessage(KMime::Message::Ptr existingMes } mail->to(true)->clear(); - applyAddresses(to, [&](const QByteArray &addrSpec, const QByteArray &displayName) { - mail->to(true)->addAddress(addrSpec, displayName); - }); - + for (const auto &mb : stringListToMailboxes(to)) { + mail->to()->addAddress(mb); + } mail->cc(true)->clear(); - applyAddresses(cc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { - mail->cc(true)->addAddress(addrSpec, displayName); - }); - + for (const auto &mb : stringListToMailboxes(cc)) { + mail->cc()->addAddress(mb); + } mail->bcc(true)->clear(); - applyAddresses(bcc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { - mail->bcc(true)->addAddress(addrSpec, displayName); - }); + for (const auto &mb : stringListToMailboxes(bcc)) { + mail->bcc()->addAddress(mb); + } + mail->from(true)->clear(); mail->from(true)->addAddress(from); mail->subject(true)->fromUnicodeString(subject, "utf-8"); diff --git a/framework/src/domain/mime/tests/mailtemplatetest.cpp b/framework/src/domain/mime/tests/mailtemplatetest.cpp index 0e8eb2c3..92dfba65 100644 --- a/framework/src/domain/mime/tests/mailtemplatetest.cpp +++ b/framework/src/domain/mime/tests/mailtemplatetest.cpp @@ -112,6 +112,7 @@ private slots: }); QTRY_VERIFY(result); QCOMPARE(normalize(removeFirstLine(result->body())), normalize(msg->body())); + QCOMPARE(result->to()->addresses(), {{"konqi@example.org"}}); } void testHtmlReply() @@ -167,7 +168,7 @@ private slots: void testCreatePlainMail() { QStringList to = {{"to@example.org"}}; - QStringList cc = {{"cc@example.org"}};; + QStringList cc = {{"cc@example.org"}}; QStringList bcc = {{"bcc@example.org"}};; KMime::Types::Mailbox from; from.fromUnicodeString("from@example.org"); -- cgit v1.2.3