#include <ESP8266WiFi.h>
#include <ESP_Mail_Client.h>
int envoi=0;
#define ssid "SSID"
#define mot_de_passe "Mot_de_passe"

SMTPSession smtp;
SMTP_Message message;
int envoi=0;
void setup(){
  Serial.begin(74880);
  connexion_reseau();
  ESP_Mail_Session session;
    /* Configuration du serveur NTP qui pemret de récupérer l'heure réelle ( */
    //session.time.ntp_server = "europe.pool.ntp.org,time.nist.gov,fr.pool.ntp.org,time4.google.com";
    //session.time.gmt_offset = 1;
    //session.time.day_light_offset = 1;

    /* Declare the message class */
  
    /* Définition des entêtes de l'email (Nom, mail de l'expéditeur , sujet et email du destinaire */
    message.sender.name = "Nom de l'expediteur";// Accent non possible
    message.sender.email = "Email de l'expéditeur";
    message.subject = "Sujet de l'email";
    message.addRecipient(F("Nom Prénom du destinaire"), "email du destinaire");
    //
    //message.addRecipient("Nom Prénom du deuxième destinaire", "Mail du deuxième destinataire"); /: Ajout d'un autre email
    //message.addCc("Mail d'un destinaire en copie (cc)");// Ajout d'un email en copie
    //message.addBcc("Mail d'un destinaire en copie cachée (bcc)");// Ajout d'un destinataire en copie cachée

    //Send raw text message
    String textMsg = "Bonjour, \r\nvoici \run email envoyé par l'ESP8266. Bonne journée";
    message.text.content = textMsg.c_str();
    message.text.charSet = "UTF-8";
    message.text.transfer_encoding = Content_Transfer_Encoding::enc_base64;//enc_7bit;
    //Possibilité de communiquer un niveau de priorité
    //* esp_mail_smtp_priority_high esp_mail_smtp_priority_normal esp_mail_smtp_priority_low 
    //message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;
}


void connexion_reseau(){
  delay(10);  
  Serial.print("Tentative de connexion: "); 
  Serial.println(ssid); 
  WiFi.begin(ssid, mot_de_passe);  
  while (WiFi.status() != WL_CONNECTED) { 
    delay(500); 
    Serial.print("."); 
  } 
  Serial.println("Connexion au réseau Wi-Fi réalisée"); 
  Serial.println("L'adresse IP est: "); 
  Serial.println(WiFi.localIP());
}

void loop(){
  //Serial.println(ESP.getFreeHeap());
  if(envoi== 0){ 
    ESP_Mail_Session session;
    MailClient.networkReconnect(true);
     
     /* Définition des paramètres du serveur SMTP (adresse, port, identifiant (souvent l'email) et mot de passe - dans certains cas, il est nécessiare de renseigner le domaine de l'utilisateur - à laisser vide sinon)*/
    session.server.host_name = "Adresse du serveur SMTP";
    session.server.port = 587; // Port à configurer
    session.login.email = "Login pour le serveur SMTP";
    session.login.password = "Mot de passe SMTP";
    session.login.user_domain = "";
    /* Connexion au serveur avec la session configurée */
    if (!smtp.connect(&session))
      return;
  
    /* Envoi de l'email et fermeture de session */
    if (!MailClient.sendMail(&smtp, &message)){
      Serial.println("Erreur lors de l'envoi du message, " + smtp.errorReason());  
    }else{
      Serial.println("Mail envoyé");
      envoi=1;  
    }
   }else{ 
  connexion_reseau(); 
    } 
  //}
  delay(10000);
}
