From 27f9fdedfff51c4a0664fd36ed52624b43d88430 Mon Sep 17 00:00:00 2001 From: Damien Caliste Date: Wed, 18 Jun 2025 11:43:13 +0200 Subject: Setup references header when replying to a message 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 --- src/libraries/qmfclient/qmailmessage.cpp | 28 ++++++++++++++++++++++++++++ src/libraries/qmfclient/qmailmessage.h | 2 ++ 2 files changed, 30 insertions(+) (limited to 'src') 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 @@ -8563,6 +8563,34 @@ void QMailMessage::setInReplyTo(const QString &messageId) partContainerImpl()->setInReplyTo(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. 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); -- cgit v1.2.3