Give better errors when incorrect KDMs are used (#1326).
[dcpomatic.git] / src / lib / emailer.cc
index ceb26caf6ae15e12ea1c42cb93e1d9e358812647..57b06ed616663cc05e4b2cecb38a2ad3d9e20567 100644 (file)
@@ -101,14 +101,14 @@ Emailer::get_data (void* ptr, size_t size, size_t nmemb)
 void
 Emailer::send (string server, int port, string user, string password)
 {
-       char date_buffer[32];
+       char date_buffer[128];
        time_t now = time (0);
        strftime (date_buffer, sizeof(date_buffer), "%a, %d %b %Y %H:%M:%S ", localtime (&now));
 
        boost::posix_time::ptime const utc_now = boost::posix_time::second_clock::universal_time ();
        boost::posix_time::ptime const local_now = boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local (utc_now);
        boost::posix_time::time_duration offset = local_now - utc_now;
-       sprintf (date_buffer + strlen(date_buffer), "%s%02d%02d", (offset.hours() >= 0 ? "+" : "-"), abs (offset.hours()), offset.minutes());
+       sprintf (date_buffer + strlen(date_buffer), "%s%02d%02d", (offset.hours() >= 0 ? "+" : "-"), int(abs(offset.hours())), int(offset.minutes()));
 
        _email = "Date: " + string(date_buffer) + "\r\n"
                "To: " + address_list (_to) + "\r\n"
@@ -177,7 +177,12 @@ Emailer::send (string server, int port, string user, string password)
                throw NetworkError ("Could not initialise libcurl");
        }
 
-       curl_easy_setopt (curl, CURLOPT_URL, String::compose ("smtp://%1:%2", server.c_str(), port).c_str());
+       if (port == 465) {
+               /* "Implicit TLS"; I think curl wants us to use smtps here */
+               curl_easy_setopt (curl, CURLOPT_URL, String::compose ("smtps://%1:465", server).c_str());
+       } else {
+               curl_easy_setopt (curl, CURLOPT_URL, String::compose ("smtp://%1:%2", server, port).c_str());
+       }
 
        if (!user.empty ()) {
                curl_easy_setopt (curl, CURLOPT_USERNAME, user.c_str ());
@@ -214,7 +219,7 @@ Emailer::send (string server, int port, string user, string password)
 
        CURLcode const r = curl_easy_perform (curl);
        if (r != CURLE_OK) {
-               throw KDMError (String::compose (_("Failed to send email (%1)"), curl_easy_strerror (r)));
+               throw KDMError (_("Failed to send email"), curl_easy_strerror (r));
        }
 
        curl_slist_free_all (recipients);