diff options
Diffstat (limited to 'src/providers')
| -rw-r--r-- | src/providers/MailerSend.cpp | 48 |
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 |
