Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Connecter compteur eau impulsion

voila le code les mails arrivent bien maintenant
Répondre

Non j ai encore demandé de l’aide à ChatGPT
Je n ai pas vérifié mais voici le code optimisé suggéré.
Teste le pour voir si c est plus stable , les explications données me paraissent crédibles

Je laisse Mike faire la vérification et apporter sa patte d expert


Code :
#include <WiFi.h>
#include <WebServer.h>
#include <Arduino.h>
#include <WiFiClientSecure.h>
#include <ESP_Mail_Client.h>

const char* ssid = "tonssid";
const char* password = "tonpwd wifi";

SMTPSession smtp;
WebServer server(80);

volatile bool mailPending = false;  // Flag pour envoyer le mail en arrière-plan
volatile bool mailStatusReady = false;
String mailStatus = "";

// --- Fonction pour envoyer le mail en arrière-plan ---
void sendMailTask() {
  ESP_Mail_Session session;
  session.server.host_name = "smtp.orange.fr";
  session.server.port = 465;
  session.login.email = "ton_mail_orange@orange.fr";
  session.login.password = "ton_pwd_orange";
  session.login.user_domain = "";

  SMTP_Message message;
  message.sender.name = "ESP32";
  message.sender.email = "ton_mail_orange@orange.fr";
  message.addRecipient("Destinataire", "tondestinataire@domain.fr");
  message.subject = "Test ESP32";
  message.text.content = "Bonjour ! Email envoyé depuis ESP32.";

  smtp.debug(1);

  if (!smtp.connect(&session)) {
    Serial.println("Erreur de connexion SMTP !");
    mailStatus = "<p style='color:red'>Erreur de connexion SMTP !</p>";
  } else if (!MailClient.sendMail(&smtp, &message)) {
    Serial.println("Erreur d'envoi !");
    mailStatus = "<p style='color:red'>Erreur d'envoi !</p>";
  } else {
    Serial.println("Email envoyé !");
    mailStatus = "<p style='color:green'>Email envoyé !</p>";
  }

  smtp.closeSession();
  mailStatusReady = true;
  mailPending = false; // Reset du flag
}

// --- Handler HTTP pour la page racine ---
void handleRoot() {
  String page = R"rawliteral(
  <html>
  <body style="font-family:Arial; text-align:center; margin-top:60px;">
    <h2>Envoi en cours...</h2>
    <div id='resultat' style="margin-top:20px; font-size:20px;"></div>

    <script>
      fetch('/sendMail')
      .then(response => response.text())
      .then(txt => {
        document.getElementById('resultat').innerHTML = txt;
      })
      .catch(err => {
        document.getElementById('resultat').innerHTML = "Erreur de communication !";
      });
    </script>
  </body>
  </html>
  )rawliteral";

  server.send(200, "text/html", page);
}

// --- Handler HTTP pour déclencher l'envoi du mail ---
void handleSendMail() {
  if (!mailPending) {
    mailPending = true;
    mailStatusReady = false;
    mailStatus = "Envoi en cours...";

    // On crée une tâche pour envoyer le mail sans bloquer le serveur
    xTaskCreate(
      [](void*){ sendMailTask(); vTaskDelete(NULL); }, // Fonction lambda
      "SendMailTask", 4096, NULL, 1, NULL
    );
  }

  // On répond immédiatement avec le statut actuel
  server.send(200, "text/plain", mailStatusReady ? mailStatus : "Envoi en cours...");
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("\nConnexion au WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }

  Serial.println("\nConnexion établie !");
  Serial.print("Adresse IP: ");
  Serial.println(WiFi.localIP());

  server.on("/", handleRoot);
  server.on("/sendMail", handleSendMail);
  server.begin();
  Serial.println("Serveur web actif");
}

void loop() {
  server.handleClient();
}
Répondre

#include <WiFi.h>
#include <WebServer.h>
#include <Arduino.h>
#include <WiFiClientSecure.h>

#include <ESP_Mail_Client.h>

const char* ssid = "";
const char* password = "";

SMTPSession smtp;
WebServer server(80);

void handleRoot() {
ESP_Mail_Session session;
session.server.host_name = "smtp.orange.fr";
session.server.port = 465;
session.login.email = "";
session.login.password = "";
session.login.user_domain = "";

SMTP_Message message;
message.sender.name = "ESP32";
message.sender.email = "";
message.addRecipient("Destinataire", "");
message.subject = "Test ESP32";
message.text.content = "Bonjour ! Email envoyé depuis ESP32.";

smtp.debug(1);

String page = "<html><body>";
page += "<h2>Status d'envoi :</h2>";

if (!smtp.connect(&session)) {
Serial.println("Erreur de connexion SMTP !");
page += "<p style='color:red'>Erreur de connexion SMTP !</p>";
page += "</body></html>";
server.send(200, "text/html", page);
return;
}

if (!MailClient.sendMail(&smtp, &message)) {
Serial.println("Erreur d'envoi !");
page += "<p style='color:red'>Erreur d'envoi !</p>";
} else {
Serial.println("Email envoyé !");
page += "<p style='color:green'>Email envoyé !</p>";
}

smtp.closeSession();

page += "</body></html>";
server.send(200, "text/html", page);
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\n");
WiFi.begin(ssid, password);
Serial.print("Attente de connexion ...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}

Serial.println("\n");
Serial.println("Connexion etablie !");
Serial.print("Adresse IP: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.begin();
Serial.println("Serveur web actif");
Serial.print("Waiting for NTP server time reading");
configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", "fr.pool.ntp.org", "time.nist.gov");
while (time(nullptr) < ESP_MAIL_CLIENT_VALID_TS)
{
delay(100);
}
}

void loop() {
server.handleClient();
}
Répondre

Il faut se méfier des IA Wink
Ce code ne marchera pas dans notre cas car chatGPT utilise du javascript sur la page root afin de déclencher une requête sur /sendMail pour pouvoir envoyer le mail.
Si la page est ouverte avec un navigateur alors le javascript sera executé et ça devrait marcher.
En revanche si on fait un HTTP GET sur / comme le fait l'ecodevice, on va simplement récupérer le code html de la page mais le javascript ne sera pas évalué et donc le mail ne partira pas.
Répondre

C est pour ça que j ai précisé que je n avais pas vérifié la rep de ChatGPT ce soir je suis sur un téléphone donc dur dur
Mais en tout cas les causes de blocage expliquées sont credibles.
Sinon plus simple à tester ce serait de rajouter

// --- Ajout pour désactiver la mise en veille du Wi-Fi ---
esp_wifi_set_ps(WIFI_PS_NONE);

Juste après WiFi.begin(ssid, password);

Peut être que c est le wifi de l esp qui s endort s il n est pas sollicité…
Peut été faudrait il rajouter dans la loop une reconnexion wifi qui pourrait être perdue pour x raisons…
Pour l’instant c est moi qui m’endort lol
En tout cas 14 pages mais c est quasi gagné et de bonnes pistes pour stabiliser le tout
Répondre

Vu que le code fonctionne, tu peux aussi le laisser tel quel pour le moment mais utiliser une bonne alim et voir si tu continues de le perdre de temps en temps.
Cela permettra de confirmer ou d’écarter la piste de l'alim.

(19-11-2025, 12:21 AM)Lolo69 a écrit : C est pour ça que j ai précisé que je n avais pas vérifié la rep de ChatGPT ce soir je suis sur un téléphone donc dur dur
Mais en tout cas les causes de blocage expliquées sont credibles.

Mis à part ce que j'ai expliqué plus haut et donc que ça ne marchera pas dans notre cas, son code est pas mal sinon, il permet de mieux gérer le cas où de multiples requêtes sont effectuées simultanément.
Dans le cas de Tupolev, vu qu'il y aura peu de requêtes et probablement jamais en simultané, autant garder la simplicité du code initial au moins dans un premier temps. 
A l'usage Tupolev nous dira s'il ressent le besoin d'avoir une amélioration sur tel ou tel point et on essayera de le faire en moins de 14 pages Smile
Répondre

lol pas facile de collaborer par forum interposé.
Répondre

JE COMPILE LE NOUVEAU CODE j’injecte et je teste
Répondre

(19-11-2025, 12:42 AM)tupolev89 a écrit : JE COMPILE LE NOUVEAU CODE  j’injecte et je teste


Quel nouveau code ? celui de chatGPT ? comme expliqué plus haut, il ne fonctionnera pas avec une requête en provenance de l'ecodevice.
Répondre

(19-11-2025, 12:46 AM)Mike a écrit :
(19-11-2025, 12:42 AM)tupolev89 a écrit : JE COMPILE LE NOUVEAU CODE  j’injecte et je teste


Quel nouveau code ? celui de chatGPT ? comme expliqué plus haut, il ne fonctionnera pas avec une requête en provenance de l'ecodevice.

alors le code du message 132 de lolo ne fonctionne pas jai de nouveau le time ino qui chagrine

#include <WiFi.h>
#include <WebServer.h>
#include <Arduino.h>
#include <WiFiClientSecure.h>

#include <ESP_Mail_Client.h>

const char* ssid = "";
const char* password = "";

SMTPSession smtp;
WebServer server(80);

void handleRoot() {
ESP_Mail_Session session;
session.server.host_name = "smtp.orange.fr";
session.server.port = 465;
session.login.email = "";
session.login.password = "";
session.login.user_domain = "";

SMTP_Message message;
message.sender.name = "ESP32";
message.sender.email = "";
message.addRecipient("Destinataire", "");
message.subject = "Test ESP32";
message.text.content = "Bonjour ! Email envoyé depuis ESP32.";

smtp.debug(1);

String page = "<html><body>";
page += "<h2>Status d'envoi :</h2>";

if (!smtp.connect(&session)) {
Serial.println("Erreur de connexion SMTP !");
page += "<p style='color:red'>Erreur de connexion SMTP !</p>";
page += "</body></html>";
server.send(200, "text/html", page);
return;
}

if (!MailClient.sendMail(&smtp, &message)) {
Serial.println("Erreur d'envoi !");
page += "<p style='color:red'>Erreur d'envoi !</p>";
} else {
Serial.println("Email envoyé !");
page += "<p style='color:green'>Email envoyé !</p>";
}

smtp.closeSession();

page += "</body></html>";
server.send(200, "text/html", page);
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\n");
WiFi.begin(ssid, password);
Serial.print("Attente de connexion ...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}

Serial.println("\n");
Serial.println("Connexion etablie !");
Serial.print("Adresse IP: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.begin();
Serial.println("Serveur web actif");
Serial.print("Waiting for NTP server time reading");
configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", "fr.pool.ntp.org", "time.nist.gov");
while (time(nullptr) < ESP_MAIL_CLIENT_VALID_TS)
{
delay(100);
}
}

void loop() {
server.handleClient();
}



ce code la fonctionne

je viens de m’apercevoir que chez orange ils ont fait comme gmail, pour les applications moins sécurisées maintenant il génère un mot de passe commun pour toutes les applications mail non reconnu par orange, du coup j’ai généré ce nouveau mot de passe je lai mis dans le code ça fonctionne pour l’instant, c’était peut-être ça le problème de perte du serveur SMTP, qui m’obligeait a rebouter esp pour retrouver le serveur???
Répondre



Atteindre :


Utilisateur(s) parcourant ce sujet :
14 visiteur(s)

Moteur MyBB, © 2002-2025 Melroy van den Berg.