Envoyer e-mail depuis arduino.

Bonjour à toutes et à tous,

Comme indiqué dans le sujet, j'aimerais pouvoir envoyer des e-mails depuis ma carte arduino. Pour cela je dispose d'une carte arduino UNO et un shield ethernet. Etant débutant dans le domaine, je voudrais donc savoir comment m'y prendre pour pouvoir aboutir à ce problème.Quel programme utiliser? comment bien configurer le shield ethernet?

Merci d'avance!

avec :

shield ethernet arduino tuto

dans GG, tu trouveras un tas d'adresses, notamment celle ci

autrement, dans la librairie éthernet.h, regardes, il y a surement des exemples

Merci de votre réponse. Mais votre liens ne marche pas ;) Et où est-ce que je peux trouver cette librairy?

bonjour
un exemple de base d’envoi de mail par SMTP
(modifier les adresses mail et serveur SMTP)
fonctionne et testé avec livebox orange

 #include <SPI.h>
    #include <Ethernet.h>
     
    // this must be unique
    byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };  
    // change network settings to yours
    IPAddress ip( 192, 168, 1, 179 );    
    IPAddress gateway( 192, 168, 1, 1 );
    IPAddress subnet( 255, 255, 255, 0 );
     
    // change server to your email server ip or domain
    // IPAddress server( 1, 2, 3, 4 );
    char server[] = "smtp.orange.fr";
     
    EthernetClient client;
     
    void setup()
    {
      Serial.begin(9600);
      pinMode(4,OUTPUT);
      digitalWrite(4,HIGH);
      Ethernet.begin(mac, ip, gateway, gateway, subnet);
      delay(2000);
      Serial.println(F("Ready. Press 'e' to send."));
    }
     
    void loop()
    {
      byte inChar;
     
      inChar = Serial.read();
     
      if(inChar == 'e')
      {
          if(sendEmail()) Serial.println(F("Email sent"));
          else Serial.println(F("Email failed"));
      }
    }
     
    byte sendEmail()
    {
      byte thisByte = 0;
      byte respCode;
     
      if(client.connect(server,25)) {
        Serial.println(F("connected"));
      } else {
        Serial.println(F("connection failed"));
        return 0;
      }
     
      if(!eRcv()) return 0;
      Serial.println(F("Sending helo"));
     
    // change to your public ip
      client.println(F("helo 192.168.1.179"));
     
      if(!eRcv()) return 0;
      Serial.println(F("Sending From"));
     
    // change to your email address (sender)
      client.println(F("MAIL From: <xxxx@wanadoo.fr>"));
     
      if(!eRcv()) return 0;
     
    // change to recipient address
      Serial.println(F("Sending To"));
      client.println(F("RCPT To: <yyyyy@aliceadsl.fr>"));
     
      if(!eRcv()) return 0;
     
      Serial.println(F("Sending DATA"));
      client.println(F("DATA"));
     
      if(!eRcv()) return 0;
     
      Serial.println(F("Sending email"));
     
    // change to recipient address
      client.println(F("To:  <yyyyy@aliceadsl.fr>")); 
     
    // change to your address
      client.println(F("From:  <xxxxxx@wanadoo.fr>"));
     
      client.println(F("Subject: Arduino  email test\r\n"));
     
      client.println(F("This is from my Arduino!  millis= "));
      client.println(millis());
     
      client.println(F("."));
     
      if(!eRcv()) return 0;
     
      Serial.println(F("Sending QUIT"));
      client.println(F("QUIT"));
     
      if(!eRcv()) return 0;
     
      client.stop();
     
      Serial.println(F("disconnected"));
     
      return 1;
    }
     
    byte 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(F("\r\nTimeout"));
          return 0;
        }
      }
     
      respCode = client.peek();
     
      while(client.available())
      {  
        thisByte = client.read();    
        Serial.write(thisByte);
      }
     
      if(respCode >= '4')
      {
        efail();
        return 0;  
      }
     
      return 1;
    }
     
     
    void efail()
    {
      byte thisByte = 0;
      int loopCount = 0;
     
      client.println(F("QUIT"));
     
      while(!client.available()) {
        delay(1);
        loopCount++;
     
        // if nothing received for 10 seconds, timeout
        if(loopCount > 10000) {
          client.stop();
          Serial.println(F("\r\nTimeout"));
          return;
        }
      }
     
      while(client.available())
      {  
        thisByte = client.read();    
        Serial.write(thisByte);
      }
     
      client.stop();
     
      Serial.println(F("disconnected"));
      Serial.println(F("Ready. Press 'e' to send."));
    }

Est-ce que c’est ça pour la librairy?

https://www.arduino.cc/en/Main/ArduinoEthernetShield

aestano:
Est-ce que c’est ça pour la librairy?

https://www.arduino.cc/en/Main/ArduinoEthernetShield

normalement toutes les libs dont tu a besoin sont installées avec l’IDE

Merci pour le code! Je vais essayer ça! avant j'ai quelques question à poser:

  • "IPAddress ip( 192, 168, 1, 179 ); " Cette adresse IP correspond à l'adresse IP du shield ethernet ou de celle de l'ordinateur?
  • Est-ce que il y a besoin d'une librairie spécifique pour faire marcher ce programe?

aestano: Merci pour le code! Je vais essayer ça! avant j'ai quelques question à poser:

  • "IPAddress ip( 192, 168, 1, 179 ); " Cette adresse IP correspond à l'adresse IP du shield ethernet ou de celle de l'ordinateur?
  • Est-ce que il y a besoin d'une librairie spécifique pour faire marcher ce programe?

c'est l'adresse affectée au shield ethernet (IP fixe) les libs specifiques (SPI et ETHERNET) sont "livrées" avec l'IDE arduino

https://tutoarduino.com/lethernet-shield/

D'accord merci! Par contre le soucis c'est que je sais pas comment trouver l'IP fixe du shield ethernet étant donné que je travail avec du matériel de mon lycée (pour mon projet de BAC) et sur le shield ethernet il n'y a qu'un autocollant en dessous avec l'adresse MAC et après il n'y a aucune autre indication.

aestano:
D’accord merci! Par contre le soucis c’est que je sais pas comment trouver l’IP fixe du shield ethernet étant donné que je travail avec du matériel de mon lycée (pour mon projet de BAC) et sur le shield ethernet il n’y a qu’un autocollant en dessous avec l’adresse MAC et après il n’y a aucune autre indication.

tu n’a pas à la trouver puisque c’est toi qui l’indique !
mais tu peux aussi passer en DHCP , remplace le debut du code par ça

    #include <SPI.h>
    #include <Ethernet.h>
     
    // this must be unique
    byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };  
    // change network settings to yours
    //IPAddress ip( 192, 168, 1, 179 );    
    //IPAddress gateway( 192, 168, 1, 1 );
    //IPAddress subnet( 255, 255, 255, 0 );
     
    // change server to your email server ip or domain
    // IPAddress server( 1, 2, 3, 4 );
    char server[] = "smtp.orange.fr";
     
    EthernetClient client;
     
    void setup()
    {
      Serial.begin(9600);
      pinMode(4,OUTPUT);
      digitalWrite(4,HIGH);
      Ethernet.begin(mac);
      delay(2000);
      Serial.println(F("Ready. Press 'e' to send."));
    }

Ok merci le smtp utilisé dépend de l'adresse utilisée pour envoyer l'e-mail ou de l'opérateur de la box (free, orange, sfr...)?

aestano: Ok merci le smtp utilisé dépend de l'adresse utilisée pour envoyer l'e-mail ou de l'opérateur de la box (free, orange, sfr...)?

le serveur SMTP est celui du reseau et comme tu es surement dans un reseau interne au lycée , il faut que tu obtienne l'info"de ton prof" Si ça se trouve tu ne peux peut etre meme pas utiliser par securité utiliser le protocole SMTP.

Et si admettons je ne peux pas utiliser le protocole SMTP existe-t-il une autre solution?

aestano: Et si admettons je ne peux pas utiliser le protocole SMTP existe-t-il une autre solution?

faudrait peut etre avoir un cahier des charges , ou a minima poser des questions pertinentes à votre prof : "c'est bien gentil de nous demander d'envoyer des mails à partir d'un arduino, mais on dispose de quels acces sur le reseau du lycée ? " parce que si vous n'avez pas d'acces "simple" , les solutions à base d'authentification risquent d'etre hors de portée d'un arduino.

Mon cahier des charges:

Le but du projet et de créer un prototype d'un système d'alarme pour une maison. Le projet se découpe en plusieurs parties: - Une pré-alarme, c'est à dire un faisceau laser ferra le tour du périmètre de la propriété (le jardin). - Différent capteurs disposés dans la maison (capteur de vibration pour la porte, capteur de contact placés sous les objets). -Un clavier matrciel qui permettra d'activer et de désactivé le système. -Une synthèse vocale qui va diffuser des messages de dissuasion aux éventuels malfaiteurs. - Un système de notification qui permettra de nous prévenir à distance d'une éventuelle intrusion.

Nous sommes un groupe de 5 élèves; Chaque élève s'occupe d'une seul partie du projet. comme vous l'avez compris, je m'occupe de la notification.

Pour ma pars j'ai d'abord réfléchis aux différentes façons de notifier l'utilisateur en cas d'intrusion: - J'ai dans un premier temps pensé à une alerte par SMS. En effet, cette solution impliquait l'utilisation d'un shield GSM pour arduino. En ayant parlé avec mon professeur, il m'a dit que cette solution serrait trop coûteuse car il faudrait payer le shield GSM que le lycée ne possède pas. il aurait aussi été nécessaire d'acheter un abonnement téléphonique.

  • J'ai donc pensé à de la notification par e-mail car le lycée possède un shield ethernet.

Pour être rentrer dans nos "normes", le système de notification doit fonctionner avec arduino et être accessible depuis un smartphone.

aestano: Mon cahier des charges: ...

Oui OK , mais il n'y a là aucune info concernant le "serveur email"

question :si tu veux envoyer un mail (par exemple à tes parents) depuis ton poste de travail au lycée tu utilise quel programme ?

Personnellement je suis chez gmail et je me connecte tout simplement sur gmail ;) Je n'utilise pas de programme particulier tels que Outlook.

aestano: Personnellement je suis chez gmail et je me connecte tout simplement sur gmail ;) Je n'utilise pas de programme particulier tels que Outlook.

gmail par navigateur utilise du HTTPS , la gestion de la securité est hors de portée d'un arduino Il faut que tu fasse le point avec ton prof sur ces points qui sont independants de l'arduino , "il" n'a peut etre pas en tete "ce genre de points particuliers"

Salut,

Pour informations, dans les lycées, les seuls ports TCP-IP ouverts sont : 80 et 443 donc http et https, donc le port 25 pour le smtp n'est pas ouvert, donc pas d'envoi de mail.

@+