/* * Copyright (c) 2025 Aldrik Ramaekers * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #define CPPHTTPLIB_OPENSSL_SUPPORT #include #include "memops.hpp" #include "strops.hpp" #include "logger.hpp" #include "exporter.hpp" bool _MailerSend_send_email(const char* sender, const char* recipient, const char* subject, const char* text) { #if SIMULATE_EMAIL usleep(1000 * 1000); return E_ERR_SUCCESS; #endif 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; } exporter::email_provider_impl _mailersend_api_provider = { "MailerSend", "img/logos/mailsender", _MailerSend_send_email, };