Отправка email на C++: обзор библиотек и практические примеры
Отправка электронной почты — одна из стандартных задач в серверных и десктопных приложениях. Несмотря на то, что C++ не имеет встроенной поддержки работы с почтовыми протоколами, существует несколько зрелых библиотек, позволяющих интегрировать отправку email (в том числе с вложениями и шифрованием TLS/SSL) в ваш проект. В этой статье мы рассмотрим три основных подхода: использование libcurl, библиотеки VMime и POCO C++ Libraries.
1. Отправка email с помощью libcurl
libcurl — это мощная кроссплатформенная библиотека для передачи данных по различным протоколам, включая SMTP, SMTPS и SMTP с STARTTLS. Она является частью проекта cURL и доступна практически для всех операционных систем.
Установка libcurl
На Ubuntu/Debian:
sudo apt-get install libcurl4-openssl-dev
На macOS (через Homebrew):
brew install curl
В Windows можно скачать предварительно собранные DLL или собрать через vcpkg.
Пример: простое письмо без вложений
Следующий код подключается к SMTP-серверу (Gmail SMTP с SSL), аутентифицируется и отправляет текстовое письмо.
#include <iostream>
#include <string>
#include <curl/curl.h>
int main() {
CURL *curl = curl_easy_init();
if (!curl) return 1;
// Настройки SMTP Gmail
curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465");
curl_easy_setopt(curl, CURLOPT_USERNAME, "ваш_email@gmail.com");
curl_easy_setopt(curl, CURLOPT_PASSWORD, "ваш_пароль_приложения");
// Данные письма
const char *payload_text =
"To: recipient@example.com\r\n"
"From: ваш_email@gmail.com\r\n"
"Subject: Тестовое письмо из C++\r\n"
"\r\n"
"Привет! Это письмо отправлено с помощью libcurl.\r\n";
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "ваш_email@gmail.com");
struct curl_slist *recipients = NULL;
recipients = curl_slist_append(recipients, "recipient@example.com");
curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
curl_easy_setopt(curl, CURLOPT_READDATA, payload_text);
// Отправка
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK)
std::cerr << "Ошибка: " << curl_easy_strerror(res) << std::endl;
curl_slist_free_all(recipients);
curl_easy_cleanup(curl);
return 0;
}
Особенности libcurl
- Поддержка SMTP, SMTPS (SSL/TLS) и STARTTLS.
- Возможность отправки вложений через MIME-форматирование (ручное или с помощью
curl_mime). - Низкоуровневый контроль — вручную составляете заголовки и тело письма.
- Отличная документация и поддержка сообщества.
2. Библиотека VMime
VMime — это специализированная C++ библиотека для работы с электронной почтой. Она предоставляет высокоуровневый API для создания, разбора и отправки сообщений с поддержкой MIME, вложений и всех современных почтовых протоколов.
Установка VMime
Рекомендуется собрать из исходников с помощью CMake:
git clone https://github.com/kisli/vmime.git
cd vmime
mkdir build && cd build
cmake .. -DVMIME_BUILD_SAMPLES=ON
make -j4
sudo make install
Для работы с SSL потребуется библиотека libgsasl и libssl-dev.
Пример: отправка письма с вложением
#include <vmime/vmime.hpp>
#include <iostream>
int main() {
try {
// Создаем сессию
vmime::shared_ptr<vmime::net::session> session =
vmime::net::session::create();
// Настройка транспорта (SMTP с SSL)
vmime::shared_ptr<vmime::net::transport> transport =
session->getTransport(vmime::net::service::infos(
"smtp.gmail.com", 465,
vmime::net::service::infos::SECURITY_SSL));
transport->setProperty("auth.username", "ваш_email@gmail.com");
transport->setProperty("auth.password", "пароль_приложения");
// Создаем