summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Caliste <[email protected]>2025-06-18 11:43:13 +0200
committerDamien Caliste <[email protected]>2025-06-23 15:16:19 +0200
commit27f9fdedfff51c4a0664fd36ed52624b43d88430 (patch)
tree406b169b959ecad13cf6c38acd0386ae30fedd44
parent40673be64fd311c219fcc4f2c29774e2265bdc6a (diff)
Setup references header when replying to a messageHEADmaster
Add a convenient function in QMailMessage to properly compute the In-Reply-to: and References: headers when replying to a message. Change-Id: Ibe962383d95e101b612258eb0ced980fef7e7203 Reviewed-by: Pekka Vuorela <[email protected]>
-rw-r--r--src/libraries/qmfclient/qmailmessage.cpp28
-rw-r--r--src/libraries/qmfclient/qmailmessage.h2
-rw-r--r--tests/tst_qmailmessage/tst_qmailmessage.cpp28
3 files changed, 58 insertions, 0 deletions
diff --git a/src/libraries/qmfclient/qmailmessage.cpp b/src/libraries/qmfclient/qmailmessage.cpp
index cb900418..70fb5c66 100644
--- a/src/libraries/qmfclient/qmailmessage.cpp
+++ b/src/libraries/qmfclient/qmailmessage.cpp
@@ -8564,6 +8564,34 @@ void QMailMessage::setInReplyTo(const QString &messageId)
}
/*!
+ Setup In-Reply-To: and References: header fields according to RFC2822
+ section 3.6.4. Also internally set the metadata inResponseTo to point
+ to the id() of \a msg, if valid.
+ */
+void QMailMessage::setInResponseTo(const QMailMessage &msg)
+{
+ if (msg.id().isValid()) {
+ setInResponseTo(msg.id());
+ }
+ QString references(msg.headerFieldText(QLatin1String("References")));
+ if (references.isEmpty()) {
+ references = msg.inReplyTo();
+ }
+ const QString precursorId(msg.headerFieldText(QLatin1String("Message-ID")));
+ if (!precursorId.isEmpty()) {
+ setInReplyTo(precursorId);
+
+ if (!references.isEmpty()) {
+ references.append(' ');
+ }
+ references.append(precursorId);
+ }
+ if (!references.isEmpty()) {
+ setHeaderField(QLatin1String("References"), references);
+ }
+}
+
+/*!
Returns a list of all the recipients specified for the message, either as To, CC, or BCC addresses.
\sa to(), cc(), bcc(), hasRecipients()
diff --git a/src/libraries/qmfclient/qmailmessage.h b/src/libraries/qmfclient/qmailmessage.h
index 2e3c211f..86525fad 100644
--- a/src/libraries/qmfclient/qmailmessage.h
+++ b/src/libraries/qmfclient/qmailmessage.h
@@ -786,6 +786,8 @@ public:
virtual QString inReplyTo() const;
virtual void setInReplyTo(const QString &s);
+ void setInResponseTo(const QMailMessage &msg);
+
virtual uint contentSize() const;
virtual void setContentSize(uint size);
diff --git a/tests/tst_qmailmessage/tst_qmailmessage.cpp b/tests/tst_qmailmessage/tst_qmailmessage.cpp
index 484c2154..e3091edc 100644
--- a/tests/tst_qmailmessage/tst_qmailmessage.cpp
+++ b/tests/tst_qmailmessage/tst_qmailmessage.cpp
@@ -112,6 +112,8 @@ private slots:
void inReplyTo();
void setInReplyTo();
+ void setInResponseTo();
+
void setSingleHeaderField();
/*
void status();
@@ -1287,6 +1289,32 @@ void tst_QMailMessage::setInReplyTo()
testSingleHeader("In-Reply-To");
}
+void tst_QMailMessage::setInResponseTo()
+{
+ const QString id = QLatin1String("12345");
+ const QString id2 = QLatin1String("1234");
+ QMailMessage message;
+ message.setHeaderField(QLatin1String("Message-ID"), id);
+ message.setHeaderField(QLatin1String("References"), id2);
+
+ QMailMessage reply;
+ reply.setInResponseTo(message);
+ QCOMPARE(reply.inReplyTo(), id);
+ QCOMPARE(reply.headerField(QLatin1String("References")).content(),
+ QString::fromLatin1("%1 %2").arg(id2).arg(id).toUtf8());
+
+ QMailMessage noref;
+ noref.setHeaderField(QLatin1String("Message-ID"), id);
+ noref.setInReplyTo(id2);
+
+ QMailMessage forward;
+ forward.setInResponseTo(noref);
+ QCOMPARE(forward.inReplyTo(), id);
+ QCOMPARE(forward.headerField(QLatin1String("References")).content(),
+ QString::fromLatin1("%1 %2").arg(id2).arg(id).toUtf8());
+
+}
+
void tst_QMailMessage::serverUid()
{
// Tested by: setServerUid