ESP8266 email

Bonjour à tous,
Est-ce moi ou on ne peut plus envoyer de mail depuis un ESP8266?
Tous les tests que je fais ne fonctionnent pas, j'ai téléchargé d'autres façon de faire sur le net, mais à chaque fois c'est pareil.
Je suis chez Free avant ça fonctionnait, et là je n'y arrive plus.
J'ai essayé chez gmail (j'ai un compte) là encore rien.

Pouvez vous soit me dire si ce n'est plus possible ou encore (mieux) me donner un code qui marche.
Merci pour votre aide.

Bonjour

OK à l’instant : ESP8266 → Freebox → smtp Free port 25 → destinataire @gmail.com

j’ai ressorti ce ‘vieux’ code simpliste (smtp FREE , port 25)
l**'ESP8266 se connecte içi à une Freebox** pour atteindre le serveur smtp de Free (fait office d’authentification, protocole simplifié)
le mail est envoyé au serveur smtp, dialogue OK dans la console …
mail relayé et reçu , destinataire @gmail.com

#include <ESP8266WiFi.h>

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

const char* host = "smtp.free.fr";
const int SmtpPort = 25;

// Use WiFiClient class to create TCP connections
WiFiClient client;


void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  Serial.print("connecting to ");
  Serial.println(host);

  if (!client.connect(host, SmtpPort)) {
    Serial.println("connection failed");
    return;
  }

  //simple séquence de commandes sans analyse des retours,
  //SMTP est un protocole, il faufrait traiter les réponses  !!

  client.println("HELO moi"); // identifiant , sans @free.fr
  delay(500);
  client.println("MAIL FROM:<moi@free.fr>");
  delay(500);
  client.println("RCPT TO:<vous@gmail.com>");
  delay(500);
  client.println("DATA");
  delay(1000);
  client.println("From: <moi@free.fr>"); // dans le message
  client.println("Subject: attention... message ");
  client.println("TO: <vous@gmail.com>"); // dans le message
  delay(100);
  client.println("second test");
  client.println("emis par ESP8266");
  client.println();
  client.println(".");
  delay(1000);

  client.println("quit");

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
  ESP.deepSleep(0, WAKE_RF_DEFAULT);

}

void loop() {

}

Ok, merci je vais essayer ça.

Merci beaucoup cette fois c'est la bonne tout fonctionne, j'avais pourtant essayé quelques choses de très approchant, mais j'ai dû rater un trucs. Bref, merci.

Coucou me revoilou...

Je n'y comprend rien, ton petit programme fonctionne, celui que j'ai utilisé aussi quand il est indépendant, mais dans mon programme (là ou il doit fonctionner) hé bien non rien ne va.
Je n'arrive pas à me connecter au smtp dès la ligne : "if (!client.connect(host, SmtpPort)) {" je suis jeté.
J'ai essayé sans les variables, en écrivant explicitement "smtp.free.fr" et 25 dans mon programme il n'y a rien a faire. Pourtant tout fonctionne le web, le ftp, l'ota etc... mais pas la connexion au serveur smtp, dingue non?

Si quelqu'un à une idée à me soumettre, je suis preneur, sinon je vais craquer, 2 jours que je suis là dessus.

Je n'arrive pas à me connecter au smtp dès la ligne : "if (!client.connect(host, SmtpPort)) {" je suis jeté.

que dit l'ESP8266 quand il te 'jette' ?

  • sans ton programme pas facile de comprendre la situation qui produit ce comportement

Voila le bout de programme trouvé sur le net il y a déjà quelques années et qui me donnait satisfaction et qui refuse maintenant de fonctionner. Bien sûr je l’ai adapté à mes besoins.
al1fch: Le programme que tu m’as donné (et je t’en remercie) fonctionne tel quel en y mettant mes coordonnées bien entendu. Il ressemble à celui que j’ai alors je me suis dis que je pourrais adapter, mais rien qu’au regard de la ligne “if (!client.connect(host, SmtpPort)) {” identique dans mon programme je me dis qu’au moins la connexion doit se faire, il n’y a pas de raison. Hé bien non ça ne se connecte pas dans mon programme.
Voici (copié/collé) la partie de mon programme qui ne va pas.

bool sendEmail(String mes, bool testMail) {
  if (testMail == false) {
    int mJour = (hour() * 60) + minute();                                                   // Minutes depuis début du jour (depuis 00:00)
    if (eMailOk == 0) return(false);                                                        // Ne pas envoyer d'email
    if (HeureEnMin(hDebEnvoi) < mJour) return(false);                                       // Pas l'heure d'envoyer des email
    if (HeureEnMin(hFinEnvoi) < mJour) return(false);                                       // Pas l'heure d'envoyer des email
  }
  
  byte thisByte = false;
  byte respCode;
  String chaine = "";
  char SMTP[ServeurSMTP.length()+1];                                                        // Pour des besoins ailleurs dans le programme
                                                                                            // ServeurSMTP est en String
  ServeurSMTP.toCharArray(SMTP, ServeurSMTP.length()+1);
  yield();
 
  if(!client.connect(SMTP, SMTPport)) {                                                     // smtp.free.fr : 25
    Serial.print("connection failed to ");
    Serial.println(SMTP);
    return false;
  }
  Serial.println("connected");
 
  if(!eRcv()) return false;
  Serial.println("Sending helo");

  // change to your public ip
  client.write("helo 1.2.3.4\r\n");
 
  if(!eRcv()) return false;
  Serial.println("Sending From");

  // Charge votre adresse e-mail (expéditeur)
  chaine = "MAIL From: <" + eMailEnvoi + ">\r\n";
  char mailEnvoi[chaine.length()+1];
  chaine.toCharArray(mailEnvoi, chaine.length()+1);
  client.write(mailEnvoi);

  if(!eRcv()) return false;

  // change to recipient address
  Serial.println("Sending To");
  chaine = "RCPT To: <" + eMailDest + ">\r\n";
  char mailRecep[chaine.length()+1];
  chaine.toCharArray(mailRecep, chaine.length()+1);
  client.write(mailRecep);
 
  if(!eRcv()) return false;
 
  Serial.println("Sending DATA");
  client.write("DATA\r\n");
 
  if(!eRcv()) return false;
 
  Serial.println("Sending email");
 
  // Change to recipient address
  chaine = "To: Cedric <" + eMailDest + ">\r\n";
  mailRecep[chaine.length()+1];
  chaine.toCharArray(mailRecep, chaine.length()+1);
  client.write(mailRecep);
 
  // change to your address
  chaine = "From: Chauffage <" + eMailEnvoi + ">\r\n";
  mailEnvoi[chaine.length()+1];
  chaine.toCharArray(mailEnvoi, chaine.length()+1);
  client.write(mailEnvoi);

  chaine = mes + "\r\n";
  char errMes[chaine.length()+1];
  chaine.toCharArray(errMes, chaine.length()+1);
  client.write("Subject: Chauffage\r\n");
  client.write(errMes);
  client.write(".\r\n");
 
  if(!eRcv()) return false;
 
  Serial.println("Sending QUIT");
  client.write("QUIT\r\n");
 
  if(!eRcv()) return false;
 
  client.stop();
 
  Serial.println("disconnected");
  return true;
}
 
bool eRcv() {
  byte respCode;
  byte thisByte;
  int loopCount = 0;
 
  while(!client.available()) {
    delay(1);
    loopCount++;
 
    // if nothing received for 10 seconds, timeout
    if(loopCount > 10000) {
      client.stop();
      Serial.println("\r\nTimeout");
      return false;
    }
  }
 
  respCode = client.peek();
 
  while(client.available()) {  
     thisByte = client.read();    
     Serial.write(thisByte);
   }
 
  if(respCode >= '4') {
     efail();
     return false;  
   }
 
  return true;
}
 
void efail() {
  byte thisByte = false;
  int loopCount = 0;
 
  client.write("QUIT\r\n");
 
  while(!client.available()) {
    delay(1);
    loopCount++;
 
    // if nothing received for 10 seconds, timeout
    if(loopCount > 10000) {
      client.stop();
      Serial.println("\r\nTimeout");
      return;
    }
  }
 
  while(client.available()) {  
    thisByte = client.read();    
    Serial.write(thisByte);
  }
 
  client.stop();
  Serial.println("disconnected");
}

// *******************************************************************************

C'est bon cette fois !
J'utilise une IP fixe et si on ne renseigne pas le DNS dans wifi.config, la connexion au smtp ne peut marcher.
Une fois renseigné, tout va bien.
Merci

You can find a library here, with some features like attachments..