Отправка email на C++: библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Отправка 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", "пароль_приложения");

        // Создаем                    

Рекомендаций