using std::list;
using std::shared_ptr;
using std::string;
+using std::vector;
using boost::optional;
if (!boost::filesystem::exists (path) || confirm_overwrite (path)) {
boost::filesystem::create_directories (path);
write_files(kdm, path, filename_format, confirm_overwrite);
+ written += kdm.size();
}
- written += kdm.size();
}
return written;
list<list<KDMWithMetadataPtr>> kdms,
dcp::NameFormat container_name_format,
dcp::NameFormat filename_format,
- string cpl_name
+ string cpl_name,
+ vector<string> extra_addresses
)
{
auto config = Config::instance ();
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();
- if (first->emails().empty()) {
- continue;
- }
-
auto zip_file = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
boost::filesystem::create_directories (zip_file);
zip_file /= container_name_format.get(first->name_values(), ".zip");
}
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();
+ std::copy(extra_addresses.begin(), extra_addresses.end(), std::back_inserter(emails));
+ if (emails.empty()) {
+ continue;
+ }
+
+ 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);
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);
+ boost::filesystem::remove (zip_file);
}
}