ESP8266 NodeMCU Envoyer des e-mails Serveur SMTP : HTML, texte, pièces jointes (Arduino)

ESP8266 NodeMCU Envoyer des e-mails Serveur SMTP : HTML, texte, pièces jointes (Arduino)

Dans ce didacticiel, vous apprendrez à envoyer des e-mails avec la carte ESP8266 NodeMCU à l’aide d’un serveur SMTP. Nous montrerons comment envoyer un e-mail avec du texte brut, du texte HTML et comment envoyer des pièces jointes telles que des images et des fichiers (.SMS). Nous allons programmer la carte ESP8266 NodeMCU avec le noyau Arduino.

ESP8266 NodeMCU Envoyer des e-mails à l'aide d'un serveur SMTP Texte HTML et pièces jointes Arduino IDE

Dans ce tutoriel, nous abordons les sujets suivants :

Nous avons un tutoriel similaire pour la carte ESP32 : ESP32 Send Emails using a SMTP Server : HTML, Text, and Attachments (Arduino IDE)

Présentation des serveurs SMTP

SMTP veux dire Protocole de transfert de courrier simple et c’est une norme Internet pour la transmission d’e-mails. Pour envoyer des e-mails à l’aide d’un ESP8266, vous devez le connecter à un serveur SMTP.

Bibliothèque ESP-Mail-Client

Pour envoyer des e-mails avec la carte ESP8266 NodeMCU, nous utiliserons le Bibliothèque ESP-Mail-Client. Cette bibliothèque permet à l’ESP8266 d’envoyer et de recevoir des e-mails avec ou sans pièces jointes via les serveurs SMTP et IMAP. Si vous aimez cette bibliothèque et que vous l’utiliserez dans vos projets, pensez à soutenir le travail du développeur—voir la page GitHub de la bibliothèque.

Dans ce didacticiel, nous utiliserons SMTP pour envoyer un e-mail avec et sans pièces jointes. À titre d’exemple, nous enverrons une image (.png) et un texte (.SMS) déposer. Les fichiers à envoyer par e-mail peuvent être enregistrés dans le système de fichiers ESP8266 (SPIFFS ou LittleFS) ou sur une carte microSD (non abordée dans ce tutoriel).

Installation de la bibliothèque ESP-Mail-Client

Avant de poursuivre ce didacticiel, vous devez installer le Bibliothèque ESP-Mail-Client. Cette bibliothèque n’est pas disponible pour l’installation via le gestionnaire de bibliothèque IDE Arduino. Suivez les étapes suivantes pour installer la bibliothèque :

  1. Cliquez ici pour télécharger le dossier .zip de la bibliothèque ESP-Mail-Client.
  2. Dans votre IDE Arduino, accédez à Esquisser > Inclure la bibliothèque > Ajouter une bibliothèque .ZIP.
  3. Sélectionnez le .Zip *: français fichier que vous venez de télécharger.

Ensuite, si vous allez à Déposer > Exemples > ESP-Mail-Client, vous trouverez plusieurs exemples que vous pouvez essayer. Vous pouvez également accéder aux exemples dans la page GitHub de la bibliothèque—ici.

Si vous utilisez l’ESP8266 avec VS Code + PlatformIO, vous devez copier ce qui suit sur votre platformio.ini fichier pour inclure la bibliothèque.

lib_deps = mobizt/ESP Mail Client @ ^1.1.7

E-mail de l’expéditeur (nouveau compte)

Nous vous recommandons de créer un nouveau compte de messagerie pour envoyer les e-mails à votre adresse e-mail personnelle principale. N’utilisez pas votre messagerie personnelle principale pour envoyer des e-mails via ESP8266. Si quelque chose ne va pas dans votre code ou si vous faites trop de demandes par erreur, vous pouvez être banni ou faire désactiver temporairement votre compte.

Nous utiliserons un compte Gmail.com nouvellement créé pour envoyer les e-mails, mais vous pouvez utiliser n’importe quel autre fournisseur de messagerie. L’e-mail du destinataire peut être votre e-mail personnel sans aucun problème.

Créer un compte de messagerie d’expéditeur

Créez un nouveau compte de messagerie pour envoyer des e-mails avec l’ESP8266. Si vous souhaitez utiliser un compte Gmail, allez sur ce lien pour en créer un nouveau.

Gmail Créer un nouveau compte

Autoriser les applications moins sécurisées

Autorisez les applications moins sécurisées à accéder à ce nouveau compte Gmail afin de pouvoir envoyer des e-mails. Tu peux Ouvrez ce lien pour accéder à ce menu.

Gmail permet aux applications moins sécurisées d'envoyer des e-mails avec ESP32

Paramètres du serveur SMTP de Gmail

Si vous utilisez un compte Gmail, voici les détails du serveur SMTP :

  • Serveur SMTP : smtp.gmail.com
  • Nom d’utilisateur SMTP : adresse Gmail complète
  • Mot de passe SMTP : votre mot de passe Gmail
  • Port SMTP (TLS) : 587
  • Port SMTP (SSL) : 465
  • SMTP TLS/SSL requis : Oui

Paramètres du serveur SMTP Outlook

Pour les comptes Outlook, voici les paramètres du serveur SMTP :

  • Serveur SMTP : smtp.office365.com
  • Nom d’utilisateur SMTP : adresse e-mail Outlook complète
  • Mot de passe SMTP : votre mot de passe Outlook
  • Port SMTP : 587
  • SMTP TLS/SSL requis : Oui

Paramètres du serveur SMTP en direct ou Hotmail

Pour les comptes Live ou Hotmail, voici les paramètres du serveur SMTP :

  • Serveur SMTP : smtp.live.com
  • Nom d’utilisateur SMTP : adresse e-mail complète Live/Hotmail
  • Mot de passe SMTP : votre mot de passe Windows Live Hotmail
  • Port SMTP : 587
  • SMTP TLS/SSL requis : Oui

Si vous utilisez un autre fournisseur de messagerie, vous devez rechercher ses paramètres de serveur SMTP. Maintenant, vous avez tout prêt pour commencer à envoyer des e-mails avec votre ESP8266.

Dans votre IDE Arduino, vous pouvez accéder à Déposer > Exemples > ESP-Mail-Client et expérimentez avec les exemples fournis : vous devez insérer vos informations de messagerie (comptes expéditeur et destinataire), les paramètres du serveur SMTP, ainsi que votre SSID et votre mot de passe.


Envoyer un e-mail avec HTML ou texte brut avec ESP8266

Le code suivant envoie un e-mail via SMTP Server avec HTML ou texte brut. À titre d’exemple, l’ESP8266 envoie un e-mail une fois au démarrage. Ensuite, vous devriez pouvoir modifier le code et l’intégrer dans vos propres projets.

Ne téléchargez pas encore le code, vous devez apporter quelques modifications pour qu’il fonctionne pour vous.

/*
  Rui Santos
  Complete project details at:
   - ESP32: https://Raspberryme.com/esp32-send-email-smtp-server-arduino-ide/
   - ESP8266: https://Raspberryme.com/esp8266-nodemcu-send-email-smtp-server-arduino/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
  Example adapted from: https://github.com/mobizt/ESP-Mail-Client
*/

//To use send Email for Gmail to port 465 (SSL), less secure app option should be enabled. https://myaccount.google.com/lesssecureapps?pli=1

#include <Arduino.h>
#if defined(ESP32)
  #include <WiFi.h>
#elif defined(ESP8266)
  #include <ESP8266WiFi.h>
#endif
#include <ESP_Mail_Client.h>

#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 465

/* The sign in credentials */
#define AUTHOR_EMAIL "[email protected]"
#define AUTHOR_PASSWORD "YOUR_EMAIL_PASS"

/* Recipient's email*/
#define RECIPIENT_EMAIL "[email protected]"

/* The SMTP Session object used for Email sending */
SMTPSession smtp;

/* Callback function to get the Email sending status */
void smtpCallback(SMTP_Status status);

void setup(){
  Serial.begin(115200);
  Serial.println();
  Serial.print("Connecting to AP");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(200);
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  /** Enable the debug via Serial port
   * none debug or 0
   * basic debug or 1
  */
  smtp.debug(1);

  /* Set the callback function to get the sending results */
  smtp.callback(smtpCallback);

  /* Declare the session config data */
  ESP_Mail_Session session;

  /* Set the session config */
  session.server.host_name = SMTP_HOST;
  session.server.port = SMTP_PORT;
  session.login.email = AUTHOR_EMAIL;
  session.login.password = AUTHOR_PASSWORD;
  session.login.user_domain = "";

  /* Declare the message class */
  SMTP_Message message;

  /* Set the message headers */
  message.sender.name = "ESP";
  message.sender.email = AUTHOR_EMAIL;
  message.subject = "ESP Test Email";
  message.addRecipient("Sara", RECIPIENT_EMAIL);

  /*Send HTML message*/
  String htmlMsg = "<div style="color:#2f4468;"><h1>Hello World!</h1><p>- Sent from ESP board</p></div>";
  message.html.content = htmlMsg.c_str();
  message.html.content = htmlMsg.c_str();
  message.text.charSet = "us-ascii";
  message.html.transfer_encoding = Content_Transfer_Encoding::enc_7bit;

  /*
  //Send raw text message
  String textMsg = "Hello World! - Sent from ESP board";
  message.text.content = textMsg.c_str();
  message.text.charSet = "us-ascii";
  message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;
  
  message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;
  message.response.notify = esp_mail_smtp_notify_success | esp_mail_smtp_notify_failure | esp_mail_smtp_notify_delay;*/

  /* Set the custom message header */
  //message.addHeader("Message-ID: <[email protected]>");

  /* Connect to server with the session config */
  if (!smtp.connect(&session))
    return;

  /* Start sending Email and close the session */
  if (!MailClient.sendMail(&smtp, &message))
    Serial.println("Error sending Email, " + smtp.errorReason());
}

void loop(){

}

/* Callback function to get the Email sending status */
void smtpCallback(SMTP_Status status){
  /* Print the current status */
  Serial.println(status.info());

  /* Print the sending result */
  if (status.success()){
    Serial.println("----------------");
    ESP_MAIL_PRINTF("Message sent success: %dn", status.completedCount());
    ESP_MAIL_PRINTF("Message sent failled: %dn", status.failedCount());
    Serial.println("----------------n");
    struct tm dt;

    for (size_t i = 0; i < smtp.sendingResult.size(); i++){
      /* Get the result item */
      SMTP_Result result = smtp.sendingResult.getItem(i);
      time_t ts = (time_t)result.timestamp;
      localtime_r(&ts, &dt);

      ESP_MAIL_PRINTF("Message No: %dn", i + 1);
      ESP_MAIL_PRINTF("Status: %sn", result.completed ? "success" : "failed");
      ESP_MAIL_PRINTF("Date/Time: %d/%d/%d %d:%d:%dn", dt.tm_year + 1900, dt.tm_mon + 1, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec);
      ESP_MAIL_PRINTF("Recipient: %sn", result.recipients);
      ESP_MAIL_PRINTF("Subject: %sn", result.subject);
    }
    Serial.println("----------------n");
  }
}

Afficher le code brut

Vous devez insérer vos informations d’identification réseau, ainsi que définir l’e-mail de l’expéditeur, les détails du serveur SMTP, le destinataire et le message.

Comment fonctionne le code

Ce code est adapté d’un exemple fourni par la bibliothèque. L’exemple est bien commenté afin que vous compreniez ce que fait chaque ligne de code. Jetons simplement un coup d’œil aux pièces pertinentes dont vous avez besoin ou que vous pourriez avoir besoin de changer.

Tout d’abord, insérez vos identifiants réseau dans les lignes suivantes :

#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

Insérez les paramètres de votre serveur SMTP. Si vous utilisez un compte Gmail pour envoyer les e-mails, voici les paramètres :

#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 465

Insérez les identifiants de connexion de l’e-mail de l’expéditeur (e-mail complet et mot de passe)

#define AUTHOR_EMAIL "[email protected]"
#define AUTHOR_PASSWORD "YOUR_EMAIL_PASS"

Insérez l’e-mail du destinataire :

#define RECIPIENT_EMAIL "[email protected]"

Définissez les en-têtes de message dans les lignes suivantes dans le mettre en place()—nom de l’expéditeur, e-mail de l’expéditeur, objet de l’e-mail, ainsi que le nom et l’e-mail du destinataire :

/* Set the message headers */
message.sender.name = "ESP";
message.sender.email = AUTHOR_EMAIL;
message.subject = "ESP Test Email";
message.addRecipient("Sara", RECIPIENT_EMAIL);

Dans les lignes suivantes, définissez le contenu du message (texte brut) dans le champ textMsg variable:

//Send raw text message
String textMsg = "Hello World! - Sent from ESP board";
message.text.content = textMsg.c_str();
message.text.charSet = "us-ascii";
message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;

Si vous souhaitez plutôt envoyer du texte HTML, décommentez les lignes suivantes : vous devez insérer votre texte HTML dans le champ htmlMsg variable.

/*Send HTML message*/
/*String htmlMsg = "<div style="color:#2f4468;"><h1>Hello World!</h1><p>- Sent from ESP board</p></div>";
message.html.content = htmlMsg.c_str();
message.html.content = htmlMsg.c_str();
message.text.charSet = "us-ascii";
message.html.transfer_encoding = Content_Transfer_Encoding::enc_7bit;*/

Enfin, les lignes suivantes envoient le message :

if (!MailClient.sendMail(&smtp, &message))
    Serial.println("Error sending Email, " + smtp.errorReason());

Manifestation

Téléchargez le code sur votre ESP8266. Après le téléchargement, ouvrez le moniteur série à un débit en bauds de 115 200.

Si tout se passe comme prévu, vous devriez obtenir un message similaire dans le moniteur série.

ESP8266 NodeMCU envoie un message électronique avec succès Moniteur série

Vérifiez votre compte de messagerie. Vous devriez avoir reçu un email de votre carte ESP8266.

E-mail reçu du compte Gmail de la carte ESP8266

Si vous définissez l’option pour envoyer un message avec du texte HTML, voici à quoi ressemble le message :

Serveur SMTP ESP8266 Envoyer un e-mail au format texte Body HTML

Si vous avez activé le message texte brut, c’est l’e-mail que vous devriez recevoir.

Serveur SMTP ESP8266 Envoyer un e-mail au format de texte brut Body

Envoyer des pièces jointes par e-mail avec ESP8266 (Arduino IDE)

Cette section vous montrera comment envoyer des pièces jointes dans vos e-mails envoyés par l’ESP8266. Nous allons vous montrer comment envoyer .SMS fichiers ou images. Cela peut être utile pour envoyer un .SMS fichier avec les lectures des capteurs des dernières heures ou d’autres applications.

Vous devez enregistrer les fichiers que vous souhaitez envoyer dans le système de fichiers ESP8266 (SPIFFS ou LittleFS). Vous pouvez également envoyer des pièces jointes enregistrées sur une carte microSD, mais nous n’aborderons pas ce sujet dans ce tutoriel.

Configuration du système de fichiers

Pour envoyer des fichiers par e-mail, vous devez les enregistrer dans le système de fichiers ESP8266. Vous pouvez utiliser SPIFFS ou LittleFS. Pour télécharger des fichiers sur le système de fichiers à l’aide d’Arduino IDE, vous devez installer un plugin Filesystem Uploader. Lisez l’un des tutoriels suivants et installez le plugin en fonction du système de fichiers que vous souhaitez utiliser :

Si vous utilisez VS Code + PlatformIO, suivez le tutoriel suivant pour apprendre à télécharger des fichiers sur LittleFS :

IMPORTANT

Noter: Pour utiliser LittleFS avec la bibliothèque ESP-Mail-Client, vous devez modifier les fichiers de la bibliothèque (ESP_Mail_FS.h) pour utiliser ce système de fichiers spécifique. Lisez la section suivante si vous souhaitez utiliser LittleFS. Autrement, passer à cette section.

Modifier les fichiers de bibliothèque pour utiliser LittleFS

Le système de fichiers par défaut utilisé par la bibliothèque ESP-Mail-Client est SPIFFS. Si vous souhaitez utiliser SPIFFS, vous pouvez ignorer cette section. Sinon, continuez à lire pour savoir comment modifier la bibliothèque pour utiliser LittleFS à la place.

Pour utiliser LittleFS, vous devez modifier le ESP_Mail_FS.h déposer.

Accédez à votre installation Arduino Bibliothèques dossier. Dans mon cas, il se trouve dans le chemin suivant (le vôtre peut être similaire):

C:UsersUSERNAMEDocumentsArduinolibraries

Aller à ESP-Mail-Client-master > src et ouvrez le ESP_Mail_FS.h fichier avec un éditeur de texte.

Localisez la section suivante.

Système de fichiers de modification de la bibliothèque ESP-Mail-Client

Remplacez-le par ce qui suit :

#if defined(ESP32)
  #define ESP_Mail_DEFAULT_FLASH_FS SPIFFS
#endif

#if defined(ESP8266)
  #include <LittleFS.h>
  #define ESP_Mail_DEFAULT_FLASH_FS LittleFS
#endif

De cette façon, il utilise le système de fichiers SPIFFS par défaut pour l’ESP32 et LittleFS pour l’ESP8266.

ESP-Mail-Client Change Filesystem ESP32 et ESP8266

Enregistrez le fichier. Désormais, la bibliothèque utilisera LittleFS comme système de fichiers par défaut pour l’ESP8266.

Télécharger des fichiers dans le système de fichiers

Créez une nouvelle esquisse Arduino et enregistrez-la. Aller à Esquisser > Afficher l’esquisse dossier. Dans le dossier d’esquisse Arduino, créez un dossier appelé Les données. Déplacer un .png fichier et .SMS fichier à votre Les données dossier.

Vous pouvez également cliquer ici pour télécharger le dossier du projet.

Noter: avec le code par défaut, vos fichiers doivent être nommés image.png et fichier_texte.txt ou vous pouvez modifier le code pour importer des fichiers avec un nom différent.

Nous enverrons ces des dossiers:

Téléchargez les fichiers sur le système de fichiers pour les envoyer en pièce jointe d'un e-mail

Votre structure de dossiers devrait ressembler à ceci (télécharger le dossier du projet):

Envoyer des pièces jointes à un e-mail structure de dossier système de fichiers organisation des fichiers

Après avoir déplacé les fichiers vers le Les données dossier, dans votre IDE Arduino, accédez à Outils > ESP8266 Téléchargement de données d’esquisse ou ESP8266 Téléchargement de données LittleFS selon le système de fichiers et attendez que les fichiers soient téléchargés.

Outils ESP8266 Téléchargement de données LittleFS Arduino IDE

Vous devriez obtenir un message de réussite dans la fenêtre de débogage. Si les fichiers ont été téléchargés avec succès, passez à la section suivante.

Message de réussite du téléchargement de l'image SPIFFS

Code

Le code suivant envoie un e-mail avec un .SMS fichier et une photo en pièce jointe. Avant de télécharger le code, assurez-vous d’avoir inséré les paramètres de votre e-mail d’expéditeur ainsi que votre e-mail de destinataire.

/*
  Rui Santos
  Complete project details at:
   - ESP8266: https://Raspberryme.com/esp8266-nodemcu-send-email-smtp-server-arduino/
   
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
  Example adapted K. Suwatchai (Mobizt): https://github.com/mobizt/ESP-Mail-Client Copyright (c) 2021 mobizt
*/

//To use send Email for Gmail to port 465 (SSL), less secure app option should be enabled. https://myaccount.google.com/lesssecureapps?pli=1
//The file systems for flash and sd memory can be changed in ESP_Mail_FS.h.

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP_Mail_Client.h>

#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

#define SMTP_HOST "smtp.gmail.com"

/** The smtp port e.g. 
 * 25  or esp_mail_smtp_port_25
 * 465 or esp_mail_smtp_port_465
 * 587 or esp_mail_smtp_port_587
*/
#define SMTP_PORT 465

/* The log in credentials */
#define AUTHOR_EMAIL "[email protected]"
#define AUTHOR_PASSWORD "YOUR_EMAIL_PASS"

/* Recipient's email*/
#define RECIPIENT_EMAIL "[email protected]"
/* The SMTP Session object used for Email sending */
SMTPSession smtp;

/* Callback function to get the Email sending status */
void smtpCallback(SMTP_Status status);

void setup(){
  Serial.begin(115200);
  Serial.println();
  Serial.print("Connecting to AP");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(200);
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  if (!LittleFS.begin()) {
  // Uncomment to use SPIFFS
  //if (!SPIFFS.begin()) {
    Serial.println("An error has occurred while mounting the filesystem");
  }
  else{
    Serial.println("Filesystem mounted successfully");
  }

  /** Enable the debug via Serial port
   * none debug or 0
   * basic debug or 1
  */
  smtp.debug(1);

  /* Set the callback function to get the sending results */
  smtp.callback(smtpCallback);

  /* Declare the session config data */
  ESP_Mail_Session session;

  /* Set the session config */
  session.server.host_name = SMTP_HOST;
  session.server.port = SMTP_PORT;
  session.login.email = AUTHOR_EMAIL;
  session.login.password = AUTHOR_PASSWORD;
  session.login.user_domain = "";

  /* Declare the message class */
  SMTP_Message message;

  /* Enable the chunked data transfer with pipelining for large message if server supported */
  message.enable.chunking = true;

  /* Set the message headers */
  message.sender.name = "ESP";
  message.sender.email = AUTHOR_EMAIL;

  message.subject = "Email with attachments";
  message.addRecipient("Sara", RECIPIENT_EMAIL);

  String htmlMsg = "This message contains attachments: image and text file.";
  message.html.content = htmlMsg.c_str();
  message.html.charSet = "utf-8";
  message.html.transfer_encoding = Content_Transfer_Encoding::enc_qp;

  message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_normal;
  message.response.notify = esp_mail_smtp_notify_success | esp_mail_smtp_notify_failure | esp_mail_smtp_notify_delay;

  /* The attachment data item */
  SMTP_Attachment att;

  /** Set the attachment info e.g. 
   * file name, MIME type, file path, file storage type,
   * transfer encoding and content encoding
  */
  att.descr.filename = "image.png";
  att.descr.mime = "image/png"; 
  att.file.path = "/image.png";
  att.file.storage_type = esp_mail_file_storage_type_flash;
  att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64;

  /* Add attachment to the message */
  message.addAttachment(att);

  message.resetAttachItem(att);
  att.descr.filename = "text_file.txt";
  att.descr.mime = "text/plain";
  att.file.path = "/text_file.txt";
  att.file.storage_type = esp_mail_file_storage_type_flash;
  att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64;

  /* Add attachment to the message */
  message.addAttachment(att);

  /* Connect to server with the session config */
  if (!smtp.connect(&session))
    return;

  /* Start sending the Email and close the session */
  if (!MailClient.sendMail(&smtp, &message, true))
    Serial.println("Error sending Email, " + smtp.errorReason());
}

void loop(){
}

/* Callback function to get the Email sending status */
void smtpCallback(SMTP_Status status){
  /* Print the current status */
  Serial.println(status.info());

  /* Print the sending result */
  if (status.success()){
    Serial.println("----------------");
    ESP_MAIL_PRINTF("Message sent success: %dn", status.completedCount());
    ESP_MAIL_PRINTF("Message sent failled: %dn", status.failedCount());
    Serial.println("----------------n");
    struct tm dt;

    for (size_t i = 0; i < smtp.sendingResult.size(); i++){
      /* Get the result item */
      SMTP_Result result = smtp.sendingResult.getItem(i);
      time_t ts = (time_t)result.timestamp;
      localtime_r(&ts, &dt);

      ESP_MAIL_PRINTF("Message No: %dn", i + 1);
      ESP_MAIL_PRINTF("Status: %sn", result.completed ? "success" : "failed");
      ESP_MAIL_PRINTF("Date/Time: %d/%d/%d %d:%d:%dn", dt.tm_year + 1900, dt.tm_mon + 1, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec);
      ESP_MAIL_PRINTF("Recipient: %sn", result.recipients);
      ESP_MAIL_PRINTF("Subject: %sn", result.subject);
    }
    Serial.println("----------------n");
  }
}

Afficher le code brut

Comment fonctionne le code

Ce code est très similaire au précédent, nous allons donc juste jeter un œil aux parties pertinentes pour envoyer des pièces jointes.

Dans le mettre en place(), vous devez initialiser le système de fichiers : SPIFFS ou LittleFS.

if (!LittleFS.begin()) {
// Uncomment to use SPIFFS
//if (!SPIFFS.begin()) {
  Serial.println("An error has occurred while mounting the filesystem");
}
else{
  Serial.println("Filesystem mounted successfully");
}

Vous devez créer une pièce jointe comme suit :

/* The attachment data item */
SMTP_Attachment att;

Ensuite, ajoutez les détails de la pièce jointe : nom de fichier, type MIME, chemin d’accès au fichier, type de stockage de fichier et codage de transfert. Dans les lignes suivantes, nous envoyons le fichier image.

att.descr.filename = "image.png";
att.descr.mime = "image/png"; 
att.file.path = "/image.png";
att.file.storage_type = esp_mail_file_storage_type_flash;
att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64;

Enfin, ajoutez la pièce jointe au message :

message.addAttachment(att);

Si vous souhaitez envoyer plus de pièces jointes, vous devez appeler la ligne suivante après avoir ajouté la pièce jointe précédente :

message.resetAttachItem(att);

Ensuite, saisissez les détails de l’autre pièce jointe (fichier texte) :

att.descr.filename = "text_file.txt";
att.descr.mime = "text/plain";
att.file.path = "/text_file.txt";
att.file.storage_type = esp_mail_file_storage_type_flash;
att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64;

Et ajoutez cette pièce jointe au message :

message.addAttachment(att);

Enfin, il vous suffit d’envoyer le message comme vous l’avez fait avec l’exemple précédent :

if (!MailClient.sendMail(&smtp, &message, true))
  Serial.println("Error sending Email, " + smtp.errorReason());

Manifestation

Après avoir téléchargé le code, ouvrez le moniteur série à un débit en bauds de 115 200. Si tout se passe comme prévu, vous devriez obtenir un message similaire sur le moniteur série.

ESP8266 NodeMCU envoie un message électronique avec succès Moniteur série

Si vous allez dans votre boîte de réception, vous devriez recevoir le message avec les deux pièces jointes :

Envoyer un e-mail avec pièces jointes ESP8266 NodeMCU Compte Gmail Arduino IDE

Conclusion

Dans ce didacticiel, vous avez appris à envoyer des e-mails avec la carte ESP8266 NodeMCU à l’aide d’un serveur SMTP. Vous avez appris à envoyer du texte HTM, du texte brut et des pièces jointes.

Maintenant, l’idée est de modifier le code et de l’inclure dans vos propres projets. Par exemple, il peut être utile d’envoyer un .SMS fichier avec les lectures des capteurs de la dernière heure, les notifications lorsqu’un mouvement est détecté, et bien plus encore.

Nous espérons que vous avez trouvé ce tutoriel intéressant. Nous avons un guide similaire pour l’ESP32 :

En savoir plus sur l’ESP8266 avec nos ressources :

Merci d’avoir lu.