E-Mail-Versand in C++: libcurl und SMTP-Clients

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

E-Mail-Versand in C++: Überblick über Bibliotheken und Werkzeuge

Das Versenden von E-Mails ist eine grundlegende Aufgabe für viele Anwendungen – von Überwachungssystemen bis hin zu Benachrichtigungen. In C++ wird diese Aufgabe auf verschiedene Weise gelöst – von der direkten Verwendung von Sockets bis hin zu leistungsstarken Bibliotheken, die Verschlüsselung, MIME und Anhänge unterstützen. In diesem Artikel betrachten wir die besten Werkzeuge zum Versenden von E-Mails in C++ und zeigen Codebeispiele.



Warum C++ für den E-Mail-Versand?

C++ bietet volle Kontrolle über Netzwerkverbindungen, Leistung und Speicher. Die Standardbibliothek von C++ enthält jedoch keine integrierten Mittel für die Arbeit mit E-Mail-Protokollen (SMTP, POP3, IMAP). Daher verwenden Entwickler entweder externe Bibliotheken oder implementieren das Protokoll manuell über Sockets. Wir konzentrieren uns auf fertige Lösungen, die Zeit sparen und Stabilität gewährleisten.



Wichtige Bibliotheken zum Versenden von E-Mails in C++

  • libcurl – die beliebteste plattformübergreifende Bibliothek zur Datenübertragung. Unterstützt SMTP, SMTP mit SSL/TLS, Authentifizierung und MIME-Anhänge.
  • VMime – eine spezialisierte Bibliothek für die Arbeit mit E-Mails. Vollständige Unterstützung für MIME, S/MIME-Verschlüsselung, benutzerdefinierte Header und alle E-Mail-Protokolle.
  • c-icap und libESMTP – eher low-level Bibliotheken, die auf SMTP-Sitzungen ausgerichtet sind.
  • Boost.Asio + eigene SMTP-Implementierung – für diejenigen, die minimale Abhängigkeiten wünschen und bereit sind, das Protokoll manuell zu schreiben.

In diesem Artikel konzentrieren wir uns auf libcurl, da es am vielseitigsten und am weitesten verbreitet ist.



Installation von libcurl

Um mit libcurl zu arbeiten, muss es installiert werden:

  • Linux (Ubuntu/Debian): sudo apt install libcurl4-openssl-dev
  • macOS: brew install curl
  • Windows: Laden Sie vorkompilierte Binärdateien von der offiziellen Website herunter oder verwenden Sie vcpkg: vcpkg install curl


Beispiel 1: Senden einer einfachen E-Mail über Gmail (SSL)

In diesem Beispiel wird libcurl verwendet, um eine E-Mail über den Gmail-SMTP-Server mit SSL-Verschlüsselung zu senden.

#include <stdio.h>#include <string.h>#include <curl/curl.h>

int main(void) { CURL *curl; CURLcode res;

curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();

if(curl) { // SMTP-Einstellungen curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465"); curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); curl_easy_setopt(curl, CURLOPT_USERNAME, "ihre.email@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "app_passwort");

// Absender und Empfänger curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<ihre.email@gmail.com>"); struct curl_slist *recipients = NULL; recipients = curl_slist_append(recipients, "<empfaenger@example.com>"); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);

// E-Mail-Text const char *payload_text = "From: Ihr Name <ihre.email@gmail.com>\\r" "To: Empfänger <empfaenger@example.com>\\r" "Subject: Test-E-Mail aus C++\\r" "\\r" "Hallo! Diese E-Mail wurde mit libcurl in C++ gesendet.\\r";

curl_easy_setopt(curl, CURLOPT_READDATA, payload_text); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

// Ausführung res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "Fehler: %s", curl_easy_strerror(res)); else printf("E-Mail gesendet!");

curl_slist_free_all(recipients); curl_eas

Empfehlungen