Vous êtes ici :

Arduino et enc28j60 : envoyer des emails avec SMTP

arduino enc28j60 logo

J"ai passé plusieurs (longs) jours à essayer d'envoyer des emails avec mon enc28j60 et la bibliothèque EtherCard, mais sans succès.

Mais avec UIPEthernet, la chose s'est avéré beaucoup plus simple. Après une journée de labeur, mon arduino a envoyé pas moins de 900 emails cette nuit !!! Une vraie spam machine :D

 

 

 

 

Historique

Utilisateur du shield officiel (à base de W5100) depuis quelques temps, je me suis tourné vers l'enc28j60 pour des raisons de ... coût. Malheureusement, EtherCard (la lib permettant de l'utiliser) n'a pas répondu à mes attentes.

Aussi, las de me casser les dents sur le SMTP, j'ai fait appel à mon ami Google : il m'a conforté dans l'idée que la chose n'allait pas être facile. Mais, il m'a aussi renvoyer sur un post du forum Arduino qui parlait d'une nouvelle bibliothèque utilisable avec le module enc28j60.

Et les choses se sont considérablement simplifiées.

Bon assez de blahblah, du code maintenant.

Le code

Le branchement de l'enc28j60 sur mon arduino Mega 2560 est des plus classiques, vous pouvez en trouver un exemple dans mon article précédent.

Tout d'abord, il faut récupèrer la bibliothèque UIPEthernet  dans le dépôt du développeur ainsi que FullIP sur mon github. Vous pouvez utiliser le lien Download Zip en bas et à droite de la page d'accueil des repositories.

Arpès avoir décompacté l'archive dans librairie, il faut modifier le fichier d'entête (FullIP/FullIP.h) afin de spécifier quelle carte vous allez utiliser. Décommentez la ligne suivante pour complier avec l'enc28j60. Si vous la commentez (avec //), vous pourrez alors utiliser votre sketch avec une W5100.

#define FULLIP_UIP

De même, commentez la ligne suivante si vous ne pensez pas utilisez la carte SD dans votre sketch. 

//#define FULLIP_SD

Démarrez maintenant votre arduino et ouvrez l'exemple SMTP client.

/*
* UIPEthernet SmtpClient example.
*
* UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based
* Ethernet-shield.
*
* UIPEthernet uses the fine uIP stack by Adam Dunkels
*
* -----------------
*
* This SMTPClient example gets its local ip-address via dhcp and send
* emails every 10 seconds.
* Actually, there is no support for auth mechanism.
*
* Copyright (C) 2013 by Norbert Truchsess
* Copyright (C) 2013 by bibi21000
*/
#include <UIPEthernet.h>
SMTPClient smtpclient;
signed long next;
//The name of your SMTP server
char server_name[] = "smtp.yourisp.com";
//The domain that your emails will come from
char domain_name[] = "yourdomain.com";
//The sender
char from[] = "Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. ";
//The receiver
char to[] = "Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. ";
//The subject
char subject[] = "This is the subject";
//And the body
char body[] = "And here is the body";

void setup() {
    Serial.begin(115200);
    Serial.println("[SmtpClient]");
    
uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};
    Ethernet.begin(mac);
    
Serial.print("localIP: ");
    Serial.println(Ethernet.localIP());
    smtpclient.begin(server_name,domain_name);
    next = 0;
    delay(500);
}

void loop() {
    //Call this function in your loop to send message in the "background"
    smtpclient.maintain();
    if (((signed long)(millis() - next)) > 0) {
        Serial.print("freeMemory()=");
        Serial.println(freeMemory());
        if (smtpclient.isSent()) {
            Serial.println("Message was sent");
       
} else {
            Serial.println("Message was NOT sent");
        }
        next = millis() + 10000;
        Serial.println("SMTP Client try to connect to server");
        if (smtpclient.sendMail(from,to,subject,body)==1) {
            Serial.println("Message is in queue");
        } else
            Serial.println("Can't connect to server");
    }
}

Après avoir modifié les paramètres, le résultat est le suivant :

 

arduino enc28j60 smtp

Ne laissez pas votre Arduino branché trop longtemps, sinon il va vous pourrir votre boîte mail. Une vraie spam machine quoi ;)

Pour de plus amples informations, vous pouvez consulter la documentation officielle en ligne : http://bibi21000.gallet.info/index.php/fr/component/sphinxdoc/documentation/8-fullip-for-arduino/readme.html

 

jmx2munin-2.0.jar

Commentaires   

 
0 #7 bibi21000 09-06-2015 00:34
Désolé pour la réponse tardive mais les post intéressants étaient noyés dans les spams.
Je n'ai plus trop le temps de m'occuper de ce projet. N'hésitez pas à le cloner sur github et à me proposer des Pull request
Citer
 
 
0 #6 mathieu 29-04-2015 20:22
Bonjour

Felicitations pour cette fonction, tout fonctionne très bien. J'aurais une question, est ce qu'il serait possible de modifier le type de variable pour subject. En effet, je voudrais changer la chaine de caractere en fonction de differentes alarmes

Cordialement
Mathieu
Citer
 
 
0 #5 mathieu 21-01-2015 20:57
Bonjour,

est ce possible d'avoir des chaines de caracteres modifiables à la place des const char pour la fonction sendmail?
Merci d'avance
Citer
 
 
0 #4 mathieu 18-01-2015 15:44
bonjour,

J'ai utilisé votre code pour envoyer un mail, tout est ok. Cependant les parametres de la fonction sendmail sont des constantes et j'aurai besoin d'avoir des variables. Est ce possible?
Merci
Citer
 
 
0 #3 phil135 27-11-2014 16:42
bonjour

dans l'exemple il a fallu que j'ajoute #include pour que SmtpClient passe à la compilation. maintenant c'est ok

le pb que j'ai ensuite est freeMemory
où donc aller chercher ce freememory ?

merci
Citer
 
 
0 #2 bibi21000 07-04-2014 22:55
Citation en provenance du commentaire précédent de Marco :
Goodmorning,
in first thankyou for your job. I appreciate it.
I contact you because I have the need to send email with an enc28j60, but at the moment I don't know to do it.
(Send mail with gmail or something else).
Have you a sketch with the code to implement it?
Best regards

Install the lib and run the example sketch.
Look at https://github.com/bibi21000/arduino-fullip/blob/master/doc/smtpclient.txt.
Citer
 
 
0 #1 Marco 04-04-2014 08:44
Goodmorning,
in first thankyou for your job. I appreciate it.
I contact you because I have the need to send email with an enc28j60, but at the moment I don't know to do it.
(Send mail with gmail or something else).
Have you a sketch with the code to implement it?
Best regards
Citer
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Free business joomla templates