From 7c9e127a857bd0ff4ceb59b61d0122eb49d9f907 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 27 Jun 2018 10:05:32 +0200 Subject: Check if libcurl is built with ssl support. On windows we lack ssl support it seems. --- examples/mailtransportresource/mailtransport.cpp | 39 +++++++++++++++++++----- 1 file 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 @@ #include #include #include - -Q_LOGGING_CATEGORY(mailtransportCategory, "mailtransport") - -extern "C" { - #include #include #include + +Q_LOGGING_CATEGORY(mailtransportCategory, "mailtransport") + struct upload_status { int offset; const char *data; }; + +extern "C" { + static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) { 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) return 0; } +} + +struct CurlVersionInfo { + bool supportsSsl; + QByteArray info; +}; + +CurlVersionInfo getVersionInfo() +{ + CurlVersionInfo versionInfo; + curl_version_info_data *data = curl_version_info(CURLVERSION_NOW); + if (data->ssl_version) { + versionInfo.info += "SSL support available: " + QByteArray{data->ssl_version} + "\n"; + versionInfo.supportsSsl = true; + } else { + versionInfo.info += "No SSL support available.\n"; + versionInfo.supportsSsl = false; + } + return versionInfo; +} + bool sendMessageCurl(const char *to[], int numTos, const char *cc[], int numCcs, const char *msg, @@ -152,8 +174,6 @@ bool sendMessageCurl(const char *to[], int numTos, return false; } -}; - MailTransport::SendResult MailTransport::sendMessage(const KMime::Message::Ptr &message, const QByteArray &server, const QByteArray &username, const QByteArray &password, const QByteArray &cacert, MailTransport::Options options) { 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 & auto serverAddress = server; serverAddress.replace("smtps://", "smtp://"); + const auto versionInfo = getVersionInfo(); + if (useTls && !versionInfo.supportsSsl) { + qCWarning(mailtransportCategory) << "libcurl built without ssl support: " << versionInfo.info; + } + bool enableDebugOutput = QLoggingCategory{"mailtransport"}.isEnabled(QtDebugMsg); QByteArray errorMessage; auto ret = sendMessageCurl(to, numTos, cc, numCcs, -- cgit v1.2.3