Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F31766623
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
5 KB
Subscribers
None
View Options
diff --git a/client/ews/ewsmailfactory.cpp b/client/ews/ewsmailfactory.cpp
index 9577f38..4200ac5 100644
--- a/client/ews/ewsmailfactory.cpp
+++ b/client/ews/ewsmailfactory.cpp
@@ -1,75 +1,87 @@
// SPDX-FileCopyrightText: 2015-2017 Krzysztof Nowicki <krissn@op.pl>
// SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
//
// SPDX-License-Identifier: LGPL-2.0-or-later
#include "ewsmailfactory.h"
#include <KLocalizedString>
#include "ewsitem.h"
#include "ewspropertyfield.h"
#include "ewsserverversion.h"
static const EwsPropertyField propPidMessageFlags(0x0e07, EwsPropTypeInteger);
void startSoapDocument(QXmlStreamWriter &writer)
{
writer.writeStartDocument();
writer.writeNamespace(soapEnvNsUri, QStringLiteral("soap"));
writer.writeNamespace(ewsMsgNsUri, QStringLiteral("m"));
writer.writeNamespace(ewsTypeNsUri, QStringLiteral("t"));
// SOAP Envelope
writer.writeStartElement(soapEnvNsUri, QStringLiteral("Envelope"));
// SOAP Header
writer.writeStartElement(soapEnvNsUri, QStringLiteral("Header"));
EwsServerVersion::ewsVersion2007Sp1.writeRequestServerVersion(writer);
writer.writeEndElement();
// SOAP Body
writer.writeStartElement(soapEnvNsUri, QStringLiteral("Body"));
}
void endSoapDocument(QXmlStreamWriter &writer)
{
// End SOAP Body
writer.writeEndElement();
// End SOAP Envelope
writer.writeEndElement();
writer.writeEndDocument();
}
-QString EwsMailFactory::create(const KMime::Message::Ptr &message)
+QString EwsMailFactory::create(const KMime::Message::Ptr &message, Options options)
{
const QByteArray mimeContent = message->encodedContent(true);
EwsItem item;
item.setType(EwsItemTypeMessage);
item.setField(EwsItemFieldMimeContent, mimeContent);
QString reqString;
QXmlStreamWriter writer(&reqString);
startSoapDocument(writer);
writer.writeStartElement(ewsMsgNsUri, QStringLiteral("CreateItem"));
- writer.writeAttribute(QStringLiteral("MessageDisposition"), QStringLiteral("SendOnly"));
+ if (options & SaveCopy) {
+ writer.writeAttribute(QStringLiteral("MessageDisposition"), QStringLiteral("SendAndSaveCopy"));
+
+ writer.writeStartElement(ewsMsgNsUri, QStringLiteral("SavedItemFolderId"));
+ writer.writeStartElement(ewsTypeNsUri, QStringLiteral("DistinguishedFolderId"));
+
+ writer.writeAttribute(QStringLiteral("Id"), QStringLiteral("sentitems"));
+
+ writer.writeEndElement();
+ writer.writeEndElement();
+ } else {
+ writer.writeAttribute(QStringLiteral("MessageDisposition"), QStringLiteral("SendOnly"));
+ }
writer.writeStartElement(ewsMsgNsUri, QStringLiteral("Items"));
item.write(writer);
writer.writeEndElement();
writer.writeEndElement();
endSoapDocument(writer);
return reqString;
}
#include "moc_ewsmailfactory.cpp"
diff --git a/client/ews/ewsmailfactory.h b/client/ews/ewsmailfactory.h
index e8612ca..032f863 100644
--- a/client/ews/ewsmailfactory.h
+++ b/client/ews/ewsmailfactory.h
@@ -1,14 +1,19 @@
// SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
// SPDX-License-Identifier: LGPL-2.0-or-later
#pragma once
#include <KJob>
#include <KMime/Message>
class EwsItem;
namespace EwsMailFactory
{
-QString create(const KMime::Message::Ptr &message);
+enum Option {
+ NoOptions,
+ SaveCopy = 0x1,
+};
+Q_DECLARE_FLAGS(Options, Option)
+QString create(const KMime::Message::Ptr &message, Options option = NoOptions);
};
diff --git a/client/ews/ewsmessagedispatcher.cpp b/client/ews/ewsmessagedispatcher.cpp
index 36727a8..78e339f 100644
--- a/client/ews/ewsmessagedispatcher.cpp
+++ b/client/ews/ewsmessagedispatcher.cpp
@@ -1,70 +1,68 @@
// SPDX-FileCopyrightText: 2024 g10 code GmbH
// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
// SPDX-License-Identifier: LGPL-2.0-or-later
#include "ewsmessagedispatcher.h"
#include "editor_debug.h"
#include "ewsmailfactory.h"
#include "qnam.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QNetworkReply>
#include <KLocalizedString>
using namespace Qt::StringLiterals;
EWSMessageDispatcher::EWSMessageDispatcher(QObject *parent)
: MessageDispatcher(parent)
{
}
void EWSMessageDispatcher::dispatch(const KMime::Message::Ptr &message, const QString &from, const QString &mailId)
{
- qWarning().noquote() << message->encodedContent();
-
- auto soapRequestBody = EwsMailFactory::create(message);
+ auto soapRequestBody = EwsMailFactory::create(message, EwsMailFactory::SaveCopy);
QNetworkRequest sendMailRequest(QUrl(u"https://127.0.0.1:5656/socket-web"_s));
sendMailRequest.setHeader(QNetworkRequest::ContentTypeHeader, u"application/xml"_s);
sendMailRequest.setRawHeader("X-TOKEN", m_bearerToken);
sendMailRequest.setRawHeader("X-EMAIL", from.toUtf8());
const QJsonDocument payload(QJsonObject{
{"type"_L1, "ews"_L1},
{"payload"_L1, soapRequestBody},
{"id"_L1, mailId},
});
auto sendMailResponse = qnam->post(sendMailRequest, payload.toJson());
// TODO remove me
QObject::connect(qnam, &QNetworkAccessManager::sslErrors, qnam, [](QNetworkReply *reply, const QList<QSslError> &errors) {
Q_UNUSED(errors);
reply->ignoreSslErrors();
});
connect(sendMailResponse, &QNetworkReply::finished, this, [this, sendMailResponse]() {
if (sendMailResponse->error() != QNetworkReply::NoError) {
Q_EMIT errorOccurred(i18nc("Error message", "There were a problem sending the message: %1", sendMailResponse->errorString()));
return;
}
qCDebug(EDITOR_LOG) << "Message sent successfully";
Q_EMIT sentSuccessfully();
});
qCDebug(EDITOR_LOG) << "Request body" << soapRequestBody;
}
QByteArray EWSMessageDispatcher::bearerToken() const
{
return m_bearerToken;
}
void EWSMessageDispatcher::setBearerToken(const QByteArray &bearerToken)
{
m_bearerToken = bearerToken;
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Thu, Nov 6, 3:15 PM (20 h, 32 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
0c/bd/2c921651b7d6a481896bc2508af8
Attached To
rOJ GpgOL.js
Event Timeline
Log In to Comment