diff --git a/src/shared/backend_interface.cc b/src/shared/backend_interface.cc index 5f77e12..d9b8d01 100644 --- a/src/shared/backend_interface.cc +++ b/src/shared/backend_interface.cc @@ -4,7 +4,7 @@ #include #include #include -//#include +#include namespace exam_system { @@ -33,15 +33,15 @@ BackendImpl::BackendImpl() { email_config_.password = "your_authorization_code"; // 注意:这是授权码,不是登录密码 email_config_.use_curl = true; - // 初始化libcurl - // curl_global_init(CURL_GLOBAL_DEFAULT); + 初始化libcurl + curl_global_init(CURL_GLOBAL_DEFAULT); Logger::Log(Logger::Level::INFO, "BackendImpl初始化完成"); } -// BackendImpl::~BackendImpl() { -// // curl_global_cleanup(); -// } +BackendImpl::~BackendImpl() { + curl_global_cleanup(); +} bool BackendImpl::SendVerificationCode(const std::string& email) { if (email.empty() || email.find('@') == std::string::npos) { @@ -339,82 +339,82 @@ bool BackendImpl::SendEmail(const std::string& recipient, bool BackendImpl::SendEmailViaCurl(const std::string& recipient, const std::string& subject, const std::string& body) { - // CURL* curl; - // CURLcode res = CURLE_OK; - // struct curl_slist* recipients = nullptr; - // std::string response_string; - - // curl = curl_easy_init(); - // if (!curl) { - // Logger::Log(Logger::Level::ERROR, "libcurl初始化失败"); - // return false; - // } - - // // 设置SMTP服务器 - // curl_easy_setopt(curl, CURLOPT_URL, ("smtp://" + email_config_.smtp_server + ":" + std::to_string(email_config_.smtp_port)).c_str()); - - // // 设置用户名和密码 - // curl_easy_setopt(curl, CURLOPT_USERNAME, email_config_.username.c_str()); - // curl_easy_setopt(curl, CURLOPT_PASSWORD, email_config_.password.c_str()); - - // // 设置发件人和收件人 - // curl_easy_setopt(curl, CURLOPT_MAIL_FROM, email_config_.username.c_str()); - // recipients = curl_slist_append(recipients, recipient.c_str()); - // curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients); - - // // 设置邮件内容 - // std::string email_data = - // "To: " + recipient + "\r\n" - // "From: " + email_config_.username + "\r\n" - // "Subject: " + subject + "\r\n" - // "\r\n" + body + "\r\n"; - - // curl_easy_setopt(curl, CURLOPT_READFUNCTION, [](char* buffer, size_t size, size_t nitems, void* instream) -> size_t { - // std::string* email_data = static_cast(instream); - // size_t buffer_size = size * nitems; + CURL* curl; + CURLcode res = CURLE_OK; + struct curl_slist* recipients = nullptr; + std::string response_string; + + curl = curl_easy_init(); + if (!curl) { + Logger::Log(Logger::Level::ERROR, "libcurl初始化失败"); + return false; + } + + // 设置SMTP服务器 + curl_easy_setopt(curl, CURLOPT_URL, ("smtp://" + email_config_.smtp_server + ":" + std::to_string(email_config_.smtp_port)).c_str()); + + // 设置用户名和密码 + curl_easy_setopt(curl, CURLOPT_USERNAME, email_config_.username.c_str()); + curl_easy_setopt(curl, CURLOPT_PASSWORD, email_config_.password.c_str()); + + // 设置发件人和收件人 + curl_easy_setopt(curl, CURLOPT_MAIL_FROM, email_config_.username.c_str()); + recipients = curl_slist_append(recipients, recipient.c_str()); + curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients); + + // 设置邮件内容 + std::string email_data = + "To: " + recipient + "\r\n" + "From: " + email_config_.username + "\r\n" + "Subject: " + subject + "\r\n" + "\r\n" + body + "\r\n"; + + curl_easy_setopt(curl, CURLOPT_READFUNCTION, [](char* buffer, size_t size, size_t nitems, void* instream) -> size_t { + std::string* email_data = static_cast(instream); + size_t buffer_size = size * nitems; - // if (email_data->empty()) { - // return 0; - // } + if (email_data->empty()) { + return 0; + } - // size_t copy_size = std::min(buffer_size, email_data->size()); - // memcpy(buffer, email_data->c_str(), copy_size); - // email_data->erase(0, copy_size); + size_t copy_size = std::min(buffer_size, email_data->size()); + memcpy(buffer, email_data->c_str(), copy_size); + email_data->erase(0, copy_size); - // return copy_size; - // }); + return copy_size; + }); - // curl_easy_setopt(curl, CURLOPT_READDATA, &email_data); - // curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); + curl_easy_setopt(curl, CURLOPT_READDATA, &email_data); + curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); - // // 启用TLS - // curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); + // 启用TLS + curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); - // // 设置服务器证书验证(生产环境应该设为1) - // curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); - // curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); + // 设置服务器证书验证(生产环境应该设为1) + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); - // // 设置响应回调 - // curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); - // curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string); + // 设置响应回调 + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string); - // // 设置超时 - // curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L); + // 设置超时 + curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L); - // // 发送邮件 - // res = curl_easy_perform(curl); + // 发送邮件 + res = curl_easy_perform(curl); - // // 清理 - // curl_slist_free_all(recipients); - // curl_easy_cleanup(curl); + // 清理 + curl_slist_free_all(recipients); + curl_easy_cleanup(curl); - // if (res != CURLE_OK) { - // Logger::Log(Logger::Level::ERROR, - // "邮件发送失败: " + std::string(curl_easy_strerror(res))); - // return false; - // } + if (res != CURLE_OK) { + Logger::Log(Logger::Level::ERROR, + "邮件发送失败: " + std::string(curl_easy_strerror(res))); + return false; + } - // Logger::Log(Logger::Level::INFO, "邮件发送成功: " + recipient); + Logger::Log(Logger::Level::INFO, "邮件发送成功: " + recipient); return true; }