Envoi d'Email en C++ : bibliothèques et implémentation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi d'Email en C++ : aperçu des bibliothèques et exemples pratiques



L'envoi d'e-mails est l'une des tâches clés pour de nombreuses applications : des systèmes de surveillance et de notification aux clients de messagerie complets. Le langage C++ ne dispose pas de prise en charge intégrée du protocole SMTP, mais il existe de puissantes bibliothèques tierces qui permettent d'intégrer facilement l'envoi d'email. Dans cet article, nous examinerons les outils les plus populaires, leur installation et fournirons des exemples de code fonctionnels.



Principales méthodes d'envoi d'Email en C++



Il existe trois approches principales pour envoyer des e-mails en C++ :



  • Utilisation de libcurl — la bibliothèque la plus populaire et la plus flexible. Prend en charge SMTP, SMTP-SSL, SMTP-STARTTLS.
  • Utilisation de VMime — une bibliothèque spécialisée pour travailler avec les messages MIME, le chiffrement et les pièces jointes.
  • Travail direct avec les sockets — une approche de bas niveau nécessitant une implémentation manuelle du protocole SMTP.


Dans ce guide, nous nous concentrerons sur libcurl comme la solution la plus universelle et la plus largement utilisée.



Installation de libcurl



Pour travailler avec SMTP via libcurl, vous devrez installer la bibliothèque elle-même et ses fichiers d'en-tête. Exemples pour différents systèmes d'exploitation :



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

# CentOS / Fedorasudo yum install libcurl-devel

# macOS (via Homebrew)brew install curl

# Windows (via vcpkg)vcpkg install curl


Assurez-vous que votre version de curl inclut la prise en charge des protocoles SMTP et SSL. Vous pouvez le vérifier avec la commande :



curl --version | grep -i smtp


Exemple simple : envoi d'un e-mail texte



Considérons un exemple de base d'envoi d'email via le serveur SMTP de Gmail en utilisant libcurl. Pour un envoi réussi, vous aurez besoin d'un mot de passe d'application (App Password) pour Gmail.



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

// Structure pour transmettre les données de l'e-mailstruct upload_status { int lines_read; const char **payload_text;};

// Fonction de rappel pour lire le corps de l'e-mailstatic 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;

// Texte de l'e-mail (chaque ligne est un élément séparé) const char *payload_text[] = { "From: Votre Nom <youremail@gmail.com>\\r", "To: Destinataire <recipient@example.com>\\r", "Subject: Bonjour depuis C++!\\r", "\\r", // ligne vide — séparateur entre les en-têtes et le corps "Ceci est un e-mail de test envoyé avec libcurl en 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) { // Configuration du serveur SMTP Gmail 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, "votre_mot_de_passe_application");

// Spécifier l'expéditeur et le destinataire curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<youremail@gmail.com>"); recipients = curl_slist_append(recipients, "<recipie

Recommendations