Envoyer un courriel
Envoyer un courriel en C++ peut être réalisé à l'aide de bibliothèques tierces, car le langage lui-même ne fournit pas d'API intégrée pour l'envoi de courriels. Voici un guide sur la manière de le faire en utilisant différentes approches, notamment avec libcurl ou SMTP Client de bibliothèques tierces.
Utilisation de libcurl pour envoyer un courriel
libcurl est une bibliothèque populaire en C/C++ pour effectuer des requêtes réseau, y compris via SMTP. Voici un code souce d'exemple pour envoyer un courriel :
- #include <iostream>
- #include <curl/curl.h>
-
- int main() {
- CURL *curl;
- CURLcode res = CURLE_OK;
-
- const char *smtp_server = "smtp://smtp.example.com:587"; /* Adresse du serveur SMTP */
- const char *username = "votre-email@example.com"; /* Votre adresse de courriel */
- const char *password = "votre-mot-de-passe"; /* Votre mot de passe SMTP */
-
- /* Message du courriel (entêtes et corps) */
- const char *payload_text =
- "To: destinataire@exemple.com\r\n"
- "From: votre-email@exemple.com\r\n"
- "Subject: Test de courriel avec libcurl\r\n"
- "\r\n"
- "Ceci est un test d'envoi de courriel via libcurl.\r\n";
-
- struct curl_slist *recipients = NULL;
-
- /* Initialisation de libcurl */
- curl = curl_easy_init();
- if (curl) {
- /* Configuration du serveur SMTP */
- curl_easy_setopt(curl, CURLOPT_URL, smtp_server);
-
- /* Authentification SMTP */
- curl_easy_setopt(curl, CURLOPT_USERNAME, username);
- curl_easy_setopt(curl, CURLOPT_PASSWORD, password);
-
- /* Spécifier l'expéditeur */
- curl_easy_setopt(curl, CURLOPT_MAIL_FROM, username);
-
- /* Ajouter le destinataire */
- recipients = curl_slist_append(recipients, "destinataire@example.com");
- curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
-
- /* Spécifier le contenu du courriel */
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, [](void *ptr, size_t size, size_t nmemb, void *userp) -> size_t {
- const char **payload = static_cast<const char **>(userp);
- if (*payload) {
- size_t len = strlen(*payload);
- size_t copylen = (size * nmemb < len) ? size * nmemb : len;
- memcpy(ptr, *payload, copylen);
- *payload += copylen;
- return copylen;
- }
- return 0;
- });
-
- curl_easy_setopt(curl, CURLOPT_READDATA, &payload_text);
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
-
- /* Envoi du courriel */
- res = curl_easy_perform(curl);
-
- if (res != CURLE_OK) std::cerr << "Erreur : " << curl_easy_strerror(res) << std::endl;
- else std::cout << "Courriel envoyé avec succès !" << std::endl;
-
- /* Nettoyage */
- curl_slist_free_all(recipients);
- curl_easy_cleanup(curl);
- }
- return (int)res;
- }
Pour utiliser SMTP avec libcurl, il suffit de spécifier l'adresse de votre serveur SMTP en utilisant le format smtp://. Par exemple, pour Gmail, l'adresse serait smtp://smtp.gmail.com:587. Le port à utiliser dépend de votre fournisseur SMTP : généralement, le port 587 est utilisé avec STARTTLS, tandis que le port 465 est utilisé avec SSL. Pour l'authentification, les options CURLOPT_USERNAME et CURLOPT_PASSWORD permettent de fournir les informations d'identification nécessaires à votre compte. Quant au message, il doit être entièrement construit manuellement, y compris les entêtes (comme To, From et Subject), puis transmis à libcurl via l'option CURLOPT_READDATA.
Dépendances pour libcurl
Pour utiliser cet exemple, vous devez installer libcurl :
- Sous Linux :
- Sous Windows : Téléchargez les binaires de curl et configurez les chemins d'accès à la bibliothèque.
sudo apt-get install libcurl4-openssl-dev |
Utilisation de bibliothèques SMTP tierces
Si vous préférez une solution plus haut niveau, plusieurs bibliothèques SMTP sont disponibles en C++, par exemple, il existe POCO C++ Libraries, Boost.Beast de Boost,...