X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fkdm_with_metadata.cc;h=7dee935c4a0346c2b11b97aee5e2268f87055baf;hb=cec8f476253ee20e7bc05dbcc3a6a74b84cc8fa4;hp=a826327ca1bff8f692f019cb0d178663de1baa8d;hpb=2bdee4f8e7712c50125b296a50c967101e619f94;p=dcpomatic.git diff --git a/src/lib/kdm_with_metadata.cc b/src/lib/kdm_with_metadata.cc index a826327ca..7dee935c4 100644 --- a/src/lib/kdm_with_metadata.cc +++ b/src/lib/kdm_with_metadata.cc @@ -38,6 +38,7 @@ using std::function; using std::list; using std::shared_ptr; using std::string; +using std::vector; using boost::optional; @@ -201,7 +202,8 @@ send_emails ( list> kdms, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, - string cpl_name + string cpl_name, + vector extra_addresses ) { auto config = Config::instance (); @@ -210,6 +212,10 @@ send_emails ( throw NetworkError (_("No mail server configured in preferences")); } + if (config->kdm_from().empty()) { + throw NetworkError(_("No KDM from address configured in preferences")); + } + for (auto const& kdms_for_cinema: kdms) { auto first = kdms_for_cinema.front(); @@ -244,7 +250,13 @@ send_emails ( } boost::algorithm::replace_all (body, "$SCREENS", screens.substr (0, screens.length() - 2)); - Emailer email (config->kdm_from(), first->emails(), subject, body); + auto emails = first->emails(); + Emailer email (config->kdm_from(), { emails.front() }, subject, body); + + /* Use CC for the second and subsequent email addresses, so we seem less spammy (#2310) */ + for (auto cc = std::next(emails.begin()); cc != emails.end(); ++cc) { + email.add_cc(*cc); + } for (auto cc: config->kdm_cc()) { email.add_cc (cc); @@ -255,22 +267,38 @@ send_emails ( email.add_attachment (zip_file, container_name_format.get(first->name_values(), ".zip"), "application/zip"); + auto log_details = [](Emailer& email) { + dcpomatic_log->log("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log(email.email(), LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log("Email session follows", LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log(email.notes(), LogEntry::TYPE_DEBUG_EMAIL); + }; + try { email.send (config->mail_server(), config->mail_port(), config->mail_protocol(), config->mail_user(), config->mail_password()); } catch (...) { boost::filesystem::remove (zip_file); - dcpomatic_log->log ("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.email(), LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log ("Email session follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.notes(), LogEntry::TYPE_DEBUG_EMAIL); + log_details (email); throw; } - boost::filesystem::remove (zip_file); + log_details (email); - dcpomatic_log->log ("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.email(), LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log ("Email session follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.notes(), LogEntry::TYPE_DEBUG_EMAIL); + for (auto extra: extra_addresses) { + Emailer email (config->kdm_from(), { extra }, subject, body); + email.add_attachment (zip_file, container_name_format.get(first->name_values(), ".zip"), "application/zip"); + + try { + email.send (config->mail_server(), config->mail_port(), config->mail_protocol(), config->mail_user(), config->mail_password()); + } catch (...) { + boost::filesystem::remove (zip_file); + log_details (email); + throw; + } + + log_details (email); + } + + boost::filesystem::remove (zip_file); } }