Envoi d'email en C++ : aperçu des bibliothèques et exemples pratiques
L'envoi d'email est l'une des tâches standard dans les applications serveur et de bureau. Bien que C++ ne dispose pas de support intégré pour les protocoles de messagerie, il existe plusieurs bibliothèques matures permettant d'intégrer l'envoi d'email (y compris avec pièces jointes et chiffrement TLS/SSL) dans votre projet. Dans cet article, nous examinerons trois approches principales : l'utilisation de libcurl, de la bibliothèque VMime et de POCO C++ Libraries.
1. Envoi d'email avec libcurl
libcurl est une puissante bibliothèque multiplateforme pour le transfert de données via divers protocoles, notamment SMTP, SMTPS et SMTP avec STARTTLS. Elle fait partie du projet cURL et est disponible pour pratiquement tous les systèmes d'exploitation.
Installation de libcurl
Sur Ubuntu/Debian :
sudo apt-get install libcurl4-openssl-devSur macOS (via Homebrew) :
brew install curlSous Windows, vous pouvez télécharger des DLL pré-compilées ou compiler via vcpkg.
Exemple : email simple sans pièce jointe
Le code suivant se connecte à un serveur SMTP (Gmail SMTP avec SSL), s'authentifie et envoie un email texte.
#include <iostream>#include <string>#include <curl/curl.h>
int main() { CURL *curl = curl_easy_init(); if (!curl) return 1;
// Paramètres SMTP Gmail curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465"); curl_easy_setopt(curl, CURLOPT_USERNAME, "votre_email@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "votre_mot_de_passe_application");
// Données de l'email const char *payload_text = "To: destinataire@example.com\\r" "From: votre_email@gmail.com\\r" "Subject: Email test depuis C++\\r" "\\r" "Bonjour ! Cet email a été envoyé avec libcurl.\\r";
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "votre_email@gmail.com"); struct curl_slist *destinataires = NULL; destinataires = curl_slist_append(destinataires, "destinataire@example.com"); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, destinataires); curl_easy_setopt(curl, CURLOPT_READDATA, payload_text);
// Envoi CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) std::cerr << "Erreur : " << curl_easy_strerror(res) << std::endl;
curl_slist_free_all(destinataires); curl_easy_cleanup(curl); return 0;}Caractéristiques de libcurl
- Support de SMTP, SMTPS (SSL/TLS) et STARTTLS.
- Possibilité d'envoyer des pièces jointes via le formatage MIME (manuel ou avec
curl_mime). - Contrôle de bas niveau — vous composez manuellement les en-têtes et le corps de l'email.
- Excellente documentation et support de la communauté.
2. Bibliothèque VMime
VMime est une bibliothèque C++ spécialisée pour la gestion des emails. Elle fournit une API de haut niveau pour créer, analyser et envoyer des messages avec support MIME, pièces jointes et tous les protocoles de messagerie modernes.
Installation de VMime
Il est recommandé de compiler à partir des sources avec CMake :
git clone https://github.com/kisli/vmime.gitcd vmimemkdir build && cd buildcmake .. -DVMIME_BUILD_SAMPLES=ONmake -j4sudo make installPour le support SSL, les bibliothèques libgsasl et libssl-dev sont nécessaires.
Exemple : envoi d'email avec pièce jointe
#include <vmime/vmime.hpp>#include <iostream>
int main() { try { // Création d'une session vmime::shared_ptr<vmime::net::session> session = vmime::net::session::create();
// Configuration du transport (SMTP avec SSL) vmime::shared_ptr<vmime::net::transport> trans