curl_slist_append.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpMlSvr 670 of 696 menu
◀ ▶

Несколько получателей в C++

Заголовок To может перечислять несколько адресов через запятую.

В libcurl каждый получатель для SMTP добавляют через curl_slist_append, а указатель списка передают в CURLOPT_MAIL_RCPT. Запишем письмо для двух адресатов, выведем текст и настроим curl:

#include <iostream> #include <string> #include <cstring> #include <curl/curl.h> struct UploadCtx { const std::string* data; std::size_t offset; }; std::size_t readCallback( char* ptr, std::size_t size, std::size_t nmemb, void* userdata ) { UploadCtx* ctx = static_cast<UploadCtx*>(userdata); if (ctx->offset >= ctx->data->size()) { return 0; } std::size_t room = size * nmemb; std::size_t left = ctx->data->size() - ctx->offset; std::size_t copy = std::min(room, left); std::memcpy(ptr, ctx->data->data() + ctx->offset, copy); ctx->offset += copy; return copy; } int main() { std::string message = "From: writer@example.com\r\n" "To: alpha@example.com, beta@example.com\r\n" "Subject: Shared bulletin\r\n" "\r\n" "One send, two inboxes.\r\n"; std::cout << message; curl_global_init(CURL_GLOBAL_DEFAULT); CURL* curl = curl_easy_init(); if (curl) { struct curl_slist* rcpt = nullptr; rcpt = curl_slist_append(rcpt, "alpha@example.com"); rcpt = curl_slist_append(rcpt, "beta@example.com"); curl_easy_setopt(curl, CURLOPT_URL, "smtp://127.0.0.1:2525"); curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "writer@example.com"); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, rcpt); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); UploadCtx ctx{&message, 0}; curl_easy_setopt(curl, CURLOPT_READFUNCTION, readCallback); curl_easy_setopt(curl, CURLOPT_READDATA, &ctx); curl_slist_free_all(rcpt); curl_easy_cleanup(curl); } curl_global_cleanup(); return 0; }

В строке To перечислены оба учебных адреса. Список curl_slist дублирует их для команды RCPT на сервере, когда SMTP действительно слушает порт.

Добавьте третьего получателя gamma@example.com в заголовок и в три вызова curl_slist_append. Выведите строку To из сообщения.

Оставьте только alpha@example.com и beta@example.com с темой "Pair". Выведите тему из заголовков собранной строки.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить