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

Простое письмо в C++

Простое письмо состоит из одной текстовой части без HTML и вложений.

Тело кладут после пустой строки, которая отделяет заголовки от содержимого. Запишем строку сообщения, выведем ее и зададим опции curl для загрузки этой строки на учебный адрес smtp://127.0.0.1:2525:

#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: ann@example.com\r\n" "Subject: Plain sample\r\n" "\r\n" "The shipment left the warehouse at noon.\r\n"; std::cout << message; curl_global_init(CURL_GLOBAL_DEFAULT); CURL* curl = curl_easy_init(); if (curl) { 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, "ann@example.com"); 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_easy_cleanup(curl); } curl_global_cleanup(); return 0; }

В консоли - полный текст письма с заголовками. Колбэк readCallback отдает байты строки порциями, если позже вызвать передачу на работающий SMTP; здесь достаточно проверить формат и опции.

Сформируйте письмо с темой "Status" и текстом "All items packed." для ann@example.com. Выведите строку сообщения целиком.

Задайте тело из двух строк: "Line one" и "Line two" через символ перевода строки в std::string. Выведите сообщение после сборки.

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