From 0a93c0df8fd6a40b627cc53d51a249628db6b795 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 7 Mar 2024 16:40:03 +0100 Subject: [PATCH] Store attachment contents in the Email object. --- src/lib/email.cc | 5 ++--- src/lib/email.h | 3 ++- src/lib/kdm_with_metadata.cc | 4 +--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/lib/email.cc b/src/lib/email.cc index 5017f4d28..8557b40e0 100644 --- a/src/lib/email.cc +++ b/src/lib/email.cc @@ -77,7 +77,7 @@ void Email::add_attachment(boost::filesystem::path file, string name, string mime_type) { Attachment a; - a.file = file; + a.file = dcp::ArrayData(file); a.name = name; a.mime_type = mime_type; _attachments.push_back (a); @@ -171,8 +171,7 @@ Email::send(string server, int port, EmailProtocol protocol, string user, string } bio = BIO_push (b64, bio); - ArrayData data (i.file); - BIO_write (bio, data.data(), data.size()); + BIO_write(bio, i.file.data(), i.file.size()); (void) BIO_flush (bio); char* out; diff --git a/src/lib/email.h b/src/lib/email.h index 3bcb8af4a..36398bfd8 100644 --- a/src/lib/email.h +++ b/src/lib/email.h @@ -30,6 +30,7 @@ public: void add_cc (std::string cc); void add_bcc (std::string bcc); + /** Add attachment, copying the contents of the file into memory */ void add_attachment (boost::filesystem::path file, std::string name, std::string mime_type); void send (std::string server, int port, EmailProtocol protocol, std::string user = "", std::string password = ""); @@ -61,7 +62,7 @@ private: std::vector _bcc; struct Attachment { - boost::filesystem::path file; + dcp::ArrayData file; std::string name; std::string mime_type; }; diff --git a/src/lib/kdm_with_metadata.cc b/src/lib/kdm_with_metadata.cc index e7d9aa31c..971eeac76 100644 --- a/src/lib/kdm_with_metadata.cc +++ b/src/lib/kdm_with_metadata.cc @@ -268,6 +268,7 @@ send_emails ( } email.add_attachment (zip_file, container_name_format.get(first->name_values(), ".zip"), "application/zip"); + dcp::filesystem::remove(zip_file); auto log_details = [](Email& email) { dcpomatic_log->log("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); @@ -279,13 +280,10 @@ send_emails ( try { email.send (config->mail_server(), config->mail_port(), config->mail_protocol(), config->mail_user(), config->mail_password()); } catch (...) { - dcp::filesystem::remove(zip_file); log_details (email); throw; } log_details (email); - - dcp::filesystem::remove(zip_file); } } -- 2.30.2