E-Mail-Versand in C++: Bibliotheken und Implementierung

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 praktische Beispiele



Das Versenden von E-Mails ist eine der Kernaufgaben für viele Anwendungen: von Überwachungs- und Benachrichtigungssystemen bis hin zu vollwertigen E-Mail-Clients. Die Sprache C++ bietet keine integrierte Unterstützung für das SMTP-Protokoll, aber es gibt leistungsstarke Drittanbieter-Bibliotheken, die eine einfache Integration des E-Mail-Versands ermöglichen. In diesem Artikel betrachten wir die gängigsten Werkzeuge, ihre Installation und geben funktionierende Codebeispiele.



Hauptmethoden zum Versenden von E-Mails in C++



Es gibt drei Hauptansätze zum Versenden von E-Mails in C++:



  • Verwendung von libcurl – die beliebteste und flexibelste Bibliothek. Unterstützt SMTP, SMTP-SSL, SMTP-STARTTLS.
  • Verwendung von VMime – eine spezialisierte Bibliothek für die Arbeit mit MIME-Nachrichten, Verschlüsselung und Anhängen.
  • Direkte Arbeit mit Sockets – ein Low-Level-Ansatz, der eine manuelle Implementierung des SMTP-Protokolls erfordert.


In dieser Anleitung konzentrieren wir uns auf libcurl als die vielseitigste und am weitesten verbreitete Lösung.



Installation von libcurl



Um mit SMTP über libcurl zu arbeiten, müssen Sie die Bibliothek selbst und ihre Header-Dateien installieren. Beispiele für verschiedene Betriebssysteme:



# Ubuntu / Debiansudo apt-get install libcurl4-openssl-dev

# CentOS / Fedorasudo yum install libcurl-devel

# macOS (über Homebrew)brew install curl

# Windows (über vcpkg)vcpkg install curl


Stellen Sie sicher, dass Ihr curl-Build die Unterstützung für die Protokolle SMTP und SSL enthält. Überprüfen können Sie dies mit dem Befehl:



curl --version | grep -i smtp


Einfaches Beispiel: Senden einer Text-E-Mail



Betrachten wir ein grundlegendes Beispiel für das Senden einer E-Mail über einen Gmail-SMTP-Server mit libcurl. Für einen erfolgreichen Versand benötigen Sie ein App-Passwort (App Password) für Gmail.



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

// Struktur zur Übergabe der E-Mail-Datenstruct upload_status { int lines_read; const char **payload_text;};

// Callback-Funktion zum Lesen des E-Mail-Textkörpersstatic size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) { struct upload_status *upload_ctx = (struct upload_status *)userp; const char *data;

if (upload_ctx->lines_read < 5) { data = upload_ctx->payload_text[upload_ctx->lines_read]; if (data) { size_t len = strlen(data); memcpy(ptr, data, len); upload_ctx->lines_read++; return len; } } return 0;}

int main(void) { CURL *curl; CURLcode res = CURLE_OK; struct curl_slist *recipients = NULL; struct upload_status upload_ctx;

// E-Mail-Text (jede Zeile ist ein separates Element) const char *payload_text[] = { "From: Ihr Name <youremail@gmail.com>\\r", "To: Empfänger <recipient@example.com>\\r", "Subject: Hallo aus C++!\\r", "\\r", // Leerzeile – Trenner zwischen Kopfzeilen und Textkörper "Dies ist eine Test-E-Mail, gesendet mit libcurl in C++.\\r", NULL };

upload_ctx.lines_read = 0; upload_ctx.payload_text = payload_text;

curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();

if (curl) { // Konfiguration des Gmail-SMTP-Servers curl_easy_setopt(curl, CURLOPT_URL, "smtp://smtp.gmail.com:587"); curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); curl_easy_setopt(curl, CURLOPT_USERNAME, "youremail@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "ihr_app_passwort");

// Absender und Empfänger angeben curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<youremail@gmail.com>"); recipients = curl_slist_append(recipients, "<recipie

Empfehlungen