summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-02-16 00:52:53 +0100
committerCarl Hetherington <cth@carlh.net>2025-02-17 00:30:55 +0100
commite9167bc88529bf5eb71bdefa4e69fdbac790a391 (patch)
treefee677aa0457c07a7ef4677defaebc23ece3da28 /src/lib
parent410624e0548f65b795b192367f9272eb6f5d7bdb (diff)
Add retry for email sending (#2963).2963-retry-email
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/email.cc20
-rw-r--r--src/lib/email.h1
-rw-r--r--src/lib/kdm_with_metadata.cc2
3 files changed, 22 insertions, 1 deletions
diff --git a/src/lib/email.cc b/src/lib/email.cc
index 028624c69..f0ff9f910 100644
--- a/src/lib/email.cc
+++ b/src/lib/email.cc
@@ -21,6 +21,7 @@
#include "compose.hpp"
#include "config.h"
+#include "dcpomatic_log.h"
#include "email.h"
#include "exceptions.h"
#include "util.h"
@@ -110,6 +111,25 @@ Email::get_data(void* ptr, size_t size, size_t nmemb)
void
+Email::send_with_retry(string server, int port, EmailProtocol protocol, int retries, string user, string password)
+{
+ int this_try = 0;
+ while (true) {
+ try {
+ send(server, port, protocol, user, password);
+ return;
+ } catch (NetworkError& e) {
+ LOG_ERROR("Error %1 when trying to send email on attempt %2 of 3", e.what(), this_try + 1, retries);
+ if (this_try == (retries - 1)) {
+ throw;
+ }
+ }
+ ++this_try;
+ }
+}
+
+
+void
Email::send(string server, int port, EmailProtocol protocol, string user, string password)
{
_email = "Date: " + rfc_2822_date(time(nullptr)) + "\r\n"
diff --git a/src/lib/email.h b/src/lib/email.h
index ac4703453..0ef68379b 100644
--- a/src/lib/email.h
+++ b/src/lib/email.h
@@ -35,6 +35,7 @@ public:
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 = "");
+ void send_with_retry(std::string server, int port, EmailProtocol protocol, int retries, std::string user = "", std::string password = "");
std::string notes () const {
return _notes;
diff --git a/src/lib/kdm_with_metadata.cc b/src/lib/kdm_with_metadata.cc
index d09f6930b..b6e027ef3 100644
--- a/src/lib/kdm_with_metadata.cc
+++ b/src/lib/kdm_with_metadata.cc
@@ -277,7 +277,7 @@ send_emails(
};
try {
- email.send(config->mail_server(), config->mail_port(), config->mail_protocol(), config->mail_user(), config->mail_password());
+ email.send_with_retry(config->mail_server(), config->mail_port(), config->mail_protocol(), 5, config->mail_user(), config->mail_password());
} catch (...) {
log_details(email);
throw;