summaryrefslogtreecommitdiff
path: root/src/providers/MailerSend.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@mailbox.org>2025-12-28 14:46:44 +0100
committerAldrik Ramaekers <aldrik@mailbox.org>2025-12-28 14:46:44 +0100
commitbe5c11029adb25c586c4fcde6fedfa01d1bdcd49 (patch)
tree251f196c59f5ce2625058c5788e2107059f642ef /src/providers/MailerSend.cpp
parent7c3a271feea4b3693bf93a47924f7c682585e179 (diff)
email send backend
Diffstat (limited to 'src/providers/MailerSend.cpp')
-rw-r--r--src/providers/MailerSend.cpp48
1 files changed, 42 insertions, 6 deletions
diff --git a/src/providers/MailerSend.cpp b/src/providers/MailerSend.cpp
index 961e457..1a633d9 100644
--- a/src/providers/MailerSend.cpp
+++ b/src/providers/MailerSend.cpp
@@ -14,22 +14,58 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <threads.h>
-
#define CPPHTTPLIB_OPENSSL_SUPPORT
#include "httplib.h"
#include "memops.hpp"
#include "strops.hpp"
#include "logger.hpp"
-#include "importer.hpp"
+#include "exporter.hpp"
-bool _MailerSend_send_email(char* sender, char* recipients, u32 recipients_count, const char* subject, const char* text)
+bool _MailerSend_send_email(char* sender, char* recipient, const char* subject, const char* text)
{
- return false;
+ const char *api_key = administration::get_email_service().api_key;
+ httplib::SSLClient cli("api.mailersend.com", 443);
+ cli.enable_server_certificate_verification(false);
+ cli.set_connection_timeout(15, 0);
+
+ size_t body_size = 10000;
+ char* body = (char*)memops::alloc(body_size);
+
+ const char* json = "{\n"
+ " \"from\": {\n"
+ " \"email\": \"%s\",\n"
+ " \"name\": \"%s\"\n"
+ " },\n"
+ " \"to\": [\n"
+ " {\n"
+ " \"email\": \"%s\",\n"
+ " \"name\": \"%s\"\n"
+ " }\n"
+ " ],\n"
+ " \"subject\": \"%s\",\n"
+ " \"text\": \"%s.\"\n"
+ "}";
+
+ strops::format(body, body_size, json, sender, sender, recipient, recipient, subject, text);
+
+ httplib::Headers headers;
+ headers.insert(std::make_pair("Authorization", std::string("Bearer ") + api_key));
+ headers.insert(std::make_pair("Content-Type", "application/json"));
+
+ httplib::Result res = cli.Post("/v1/email", headers, body, "application/json");
+ memops::unalloc(body);
+
+ if (!res || (res->status != 200 && res->status != 202)) {
+ logger::error("Failed to send email.");
+ return E_ERR_FAILED_REQUEST;
+ }
+
+ logger::info("Email sent.");
+ return E_ERR_SUCCESS;
}
-importer::email_provider_impl _mailersend_api_provider = {
+exporter::email_provider_impl _mailersend_api_provider = {
"MailerSend",
_MailerSend_send_email,
}; \ No newline at end of file