summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/mailtransportresource/mailtransport.cpp39
1 files changed, 32 insertions, 7 deletions
diff --git a/examples/mailtransportresource/mailtransport.cpp b/examples/mailtransportresource/mailtransport.cpp
index 361a89e..ce24d7f 100644
--- a/examples/mailtransportresource/mailtransport.cpp
+++ b/examples/mailtransportresource/mailtransport.cpp
@@ -21,20 +21,21 @@
21#include <QByteArray> 21#include <QByteArray>
22#include <QList> 22#include <QList>
23#include <QLoggingCategory> 23#include <QLoggingCategory>
24
25Q_LOGGING_CATEGORY(mailtransportCategory, "mailtransport")
26
27extern "C" {
28
29#include <stdio.h> 24#include <stdio.h>
30#include <string.h> 25#include <string.h>
31#include <curl/curl.h> 26#include <curl/curl.h>
32 27
28
29Q_LOGGING_CATEGORY(mailtransportCategory, "mailtransport")
30
33struct upload_status { 31struct upload_status {
34 int offset; 32 int offset;
35 const char *data; 33 const char *data;
36}; 34};
37 35
36
37extern "C" {
38
38static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) 39static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp)
39{ 40{
40 struct upload_status *upload_ctx = (struct upload_status *)userp; 41 struct upload_status *upload_ctx = (struct upload_status *)userp;
@@ -58,6 +59,27 @@ static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp)
58 return 0; 59 return 0;
59} 60}
60 61
62}
63
64struct CurlVersionInfo {
65 bool supportsSsl;
66 QByteArray info;
67};
68
69CurlVersionInfo getVersionInfo()
70{
71 CurlVersionInfo versionInfo;
72 curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
73 if (data->ssl_version) {
74 versionInfo.info += "SSL support available: " + QByteArray{data->ssl_version} + "\n";
75 versionInfo.supportsSsl = true;
76 } else {
77 versionInfo.info += "No SSL support available.\n";
78 versionInfo.supportsSsl = false;
79 }
80 return versionInfo;
81}
82
61bool sendMessageCurl(const char *to[], int numTos, 83bool sendMessageCurl(const char *to[], int numTos,
62 const char *cc[], int numCcs, 84 const char *cc[], int numCcs,
63 const char *msg, 85 const char *msg,
@@ -152,8 +174,6 @@ bool sendMessageCurl(const char *to[], int numTos,
152 return false; 174 return false;
153} 175}
154 176
155};
156
157MailTransport::SendResult MailTransport::sendMessage(const KMime::Message::Ptr &message, const QByteArray &server, const QByteArray &username, const QByteArray &password, const QByteArray &cacert, MailTransport::Options options) 177MailTransport::SendResult MailTransport::sendMessage(const KMime::Message::Ptr &message, const QByteArray &server, const QByteArray &username, const QByteArray &password, const QByteArray &cacert, MailTransport::Options options)
158{ 178{
159 QByteArray from(message->from(true)->mailboxes().isEmpty() ? QByteArray() : message->from(true)->mailboxes().first().address()); 179 QByteArray from(message->from(true)->mailboxes().isEmpty() ? QByteArray() : message->from(true)->mailboxes().first().address());
@@ -183,6 +203,11 @@ MailTransport::SendResult MailTransport::sendMessage(const KMime::Message::Ptr &
183 auto serverAddress = server; 203 auto serverAddress = server;
184 serverAddress.replace("smtps://", "smtp://"); 204 serverAddress.replace("smtps://", "smtp://");
185 205
206 const auto versionInfo = getVersionInfo();
207 if (useTls && !versionInfo.supportsSsl) {
208 qCWarning(mailtransportCategory) << "libcurl built without ssl support: " << versionInfo.info;
209 }
210
186 bool enableDebugOutput = QLoggingCategory{"mailtransport"}.isEnabled(QtDebugMsg); 211 bool enableDebugOutput = QLoggingCategory{"mailtransport"}.isEnabled(QtDebugMsg);
187 QByteArray errorMessage; 212 QByteArray errorMessage;
188 auto ret = sendMessageCurl(to, numTos, cc, numCcs, 213 auto ret = sendMessageCurl(to, numTos, cc, numCcs,