Part of work to add emailing of KDMs.
[dcpomatic.git] / src / lib / util.cc
index baa37ae7c4da838027ba6d152cc5383460185146..739a327d6a91ed319db66417e74331622193ea33 100644 (file)
@@ -54,6 +54,7 @@ extern "C" {
 #include <libpostproc/postprocess.h>
 #include <libavutil/pixfmt.h>
 }
+#include <curl/curl.h>
 #include "util.h"
 #include "exceptions.h"
 #include "scaler.h"
@@ -816,4 +817,53 @@ tidy_for_filename (string f)
 
        return t;
 }
+
+struct EmailState
+{
+       string message;
+       int done;
+};
+
+static size_t
+send_email_function (void* ptr, size_t size, size_t nmemb, void* userdata)
+{
+       EmailState* state = reinterpret_cast<EmailState*> (userdata);
+
+       int const now = min (size * nmemb, state->message.length() - state->done);
+
+       memcpy (ptr, state->message.c_str() + state->done, now);
+       state->done += now;
+
+       return now;
+}
        
+bool
+send_email (string from, string to, string message)
+{
+       CURL* curl = curl_easy_init ();
+       if (!curl) {
+               return true;
+       }
+
+       string const url = "smtp://" + Config::instance()->mail_server();
+
+       curl_easy_setopt (curl, CURLOPT_URL, url.c_str ());
+       curl_easy_setopt (curl, CURLOPT_MAIL_FROM, from.c_str ());
+       struct curl_slist* recipients = 0;
+       recipients = curl_slist_append (recipients, to.c_str ());
+       curl_easy_setopt (curl, CURLOPT_READFUNCTION, send_email_function);
+
+       EmailState state;
+       state.message = message;
+       state.done = 0;
+       curl_easy_setopt (curl, CURLOPT_READDATA, &state);
+
+       if (curl_easy_perform (curl) != CURLE_OK) {
+               return true;
+       }
+
+       curl_slist_free_all (recipients);
+       curl_easy_cleanup (curl);
+
+       return false;
+}