/* * 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 #include "logger.hpp" #include "strops.hpp" #include "memops.hpp" #include "locales.hpp" #include "exporter.hpp" extern exporter::email_provider_impl _mailersend_api_provider; exporter::email_provider_impl exporter::get_email_provider_implementation(email_provider provider) { switch(provider) { case EMAIL_PROVIDER_MAILERSEND: return _mailersend_api_provider; default: assert(0); break; } return exporter::email_provider_impl {0}; } static int _send_email_t(void* arg) { exporter::export_request* request = (exporter::export_request*)arg; request->status = exporter::status::EXPORT_WAITING_FOR_RESPONSE; exporter::email_provider_impl impl = exporter::get_email_provider_implementation(administration::get_email_service().provider); request->error = impl.send_email(request->sender, request->recipient, request->subject, request->text); request->status = exporter::status::EXPORT_DONE; request->done_at = time(NULL); if (request->callback) request->callback(request->error); return 0; } exporter::export_request* exporter::send_email(const char* sender, const char* recipient, const char* subject, const char* text, send_email_callback ev) { exporter::export_request* result = (exporter::export_request*)memops::alloc(sizeof(exporter::export_request)); result->started_at = time(NULL); result->error = E_ERR_SUCCESS; result->status = exporter::status::EXPORT_STARTING; result->sender = sender; result->recipient = recipient; result->subject = subject; result->text = text; result->callback = ev; thrd_t thr; if (thrd_create(&thr, _send_email_t, result) != thrd_success) { return 0; } return result; }