Inviare email con esp8266 e Arduino (Libreria v1.x)

Spread the love

Ho finalmente upgradato questa libreria con il supporto ad Arduino (Ethernet, UIPEthernet e SD), esp32 (SPIFFS e SD) e esp8266 (SD e SPIFFS) e la possibilità di allegare files.
Fai riferimento a quest’articolo per la versione 2.x della libreria “Inviare email con allegati (libreria v2.x)“.

Un metodo semplice per notificare un problema è utilizzare la posta elettronica, è utile e semplice da condividere, quindi ho creato una libreria per farlo. Prendo del codice da un’altra libreria (GSender) una libreria abbastanza semplice, ma non così completa e configurabile.

Libreria EMailSender per esp8266 e Arduino

Questa libreria utilizza il protocollo SMTP:

Simple Mail Transfer Protocol (SMTP) è un protocollo standard per la trasmissione di email. Inizialmente proposto nella RFC 778 nel 1981, poi aggiornato con RFC 821 nel 1982 ed ulteriormente modificato nel 2008 con l’introduzione di extended SMTP (RFC 1869 e RFC 5321), che è il protocollo attualmente in uso.
Anche se i 
server di posta elettronica utilizzano SMTP per inviare e ricevere mail, i client mail a livello utente utilizzano SMTP solo per inviare il messaggio al server mail, il quale si occupa dell’invio del messaggio stesso. Per recuperare i messaggi, le applicazioni client usano solitamente protocolli come IMAP o POP3.
La comunicazione tra i server mail utilizza il protocollo 
TCP sulla porta 25. I client mail, tuttavia, spesso inviano le mail in uscita al server sulla porta 587. Anche se deprecata, i provider mail e alcuni produttori come Apple, permettono ancora l’uso della porta non standard 465 per questa operazione. (Cit. Wiki)

Per gli esempi utilizzo un account dedicato di Gmail, creo un nuovo account perché è necessario ridurre la sicurezza per utilizzarlo con un programma esterno.

Retrocompatibilità

Dalla versione successiva alla esp8266 core 2.4.2 cioè successiva o uguale alla 2.5.2 qualcosa è cambiato e per supportare la vecchia versione 2.4.2 aggiungo una definizione per permetterti di lavorare con quel core.

Quindi se hai un esp8266 core 2.4.2 o meno devi decommentare questa linea

// Uncomment if you use esp8266 core <= 2.4.2
#define ARDUINO_ESP8266_RELEASE_2_4_2

Library

Puoi trovare la mia libreria qui.

Per scaricare.

Clicca il bottone DOWNLOADS sull’angolo in alto a destra, e rinomina la cartella decompressa EMailSender.

Controlla che la cartella EMailSender contenga EMailSender.cpp e EMailSender.h.

Posizione la libreria EMailSender nella tua cartella /libraries/.

Potresti dover creare la sottocartella libraries se è la tua prima libreria.

Riavvia l’IDE.

Usage

Costruttore: il valore predefinito è abbastanza semplice e usa GMail come server smtp.

EMailSender emailSend("smtp.account@gmail.com", "password");

Se si desidera utilizzare un altro fornitore, è possibile utilizzare un costruttore più complesso (ma comunque semplice)

EMailSender(const char* email_login, const char* email_password, bool isSecure = false);

EMailSender(const char* email_login, const char* email_password, const char* email_from, bool isSecure = false);

EMailSender(const char* email_login, const char* email_password, const char* email_from, const char* smtp_server, uint16_t smtp_port, bool isSecure = false);
  • email_login: login account smtp
  • email_password: password account smtp
  • email_from: email del mittente
  • smtp_server: server SMTP
  • smtp_port: porta SMTP
  • isSecure = false: if false BearSSL permette una connessione insicura TLS

È necessario connettersi a WIFI: P.

Crea un messaggio con la struttura EMailMessage

    EMailSender::EMailMessage message;
    message.subject = "Subject";
    message.message = "Hi, How are you<br>Fine.";

Invia un messaggio:

    EMailSender::Response resp = emailSend.send("account_to_send@gmail.com", message);

E controlla la response:

    Serial.println("Sending status: ");
    Serial.println(resp.code);
    Serial.println(resp.desc);
    Serial.println(resp.status);

Esempio di serial output:

Connection: ESTABLISHED
Got IP address: 192.168.1.104
Sending status: 
1
0
Message sent!

Abilita GMail

Allow less secure apps in Gmail

Consenti alle app meno sicure di accedere al tuo account Gmail

Google potrebbe bloccare i tentativi di accesso da alcune app o dispositivi che non utilizzano i moderni standard di sicurezza. Poiché queste app e dispositivi sono più facili da violare, il loro blocco aiuta a proteggere il tuo account.

Per disabilitare questa funzione di sicurezza:

  1. Accedi a Gmail
  2. Fai clic qui per accedere a Accesso meno sicuro all’app  nel mio account.
  3. Accanto a “Consenti app meno sicure:  OFF ”, selezionare l’interruttore per accendere  su ON .

Questa impostazione potrebbe non essere disponibile per:

Per gli utenti di G-Suite: abilitazione delle app meno sicure per accedere agli account

  1. Accedi  alla tua Console di amministrazione Google (accedi utilizzando un  account amministratore , non il tuo account corrente.
  2. Fai clic su  Sicurezza> Impostazioni di base .
  3. In  App meno sicure , seleziona  Vai a impostazioni per app meno sicure .
  4. Nella finestra secondaria, selezionare il pulsante di opzione  Consenti agli utenti di gestire il loro accesso ad app meno sicure  .

Dopo aver impostato  Consenti agli utenti  di gestire il loro accesso ad app meno sicure  , gli utenti interessati all’interno del gruppo selezionato o Unità organizzativa saranno in grado di attivare o disattivare le app meno sicure.

Amministratori di G-Suite: imporre l’accesso ad app meno sicure per tutti gli utenti

Utilizzare questa impostazione quando si desidera che l’accesso da un’app meno sicura sia disponibile per tutti per un periodo di tempo limitato, ad esempio per gli aggiornamenti.

  1. Accedi  alla tua Console di amministrazione Google. Accedi utilizzando un  account amministratore
  2. Fai clic su  Sicurezza> Impostazioni di base .
  3. In  App meno sicure , seleziona  Vai a impostazioni per app meno sicure .
  4. Nella finestra secondaria, seleziona il  pulsante di opzione  Imponi accesso ad app meno sicure per tutti gli utenti .

Una volta impostato  Applica l’accesso ad app meno sicure per tutti gli utenti  , gli utenti interessati all’interno del gruppo selezionato o Unità organizzativa non saranno in grado di disattivare l’accesso per le app meno sicure. Dovrai ripristinare le impostazioni su  Consenti agli utenti di gestire il loro accesso ad app meno sicure  per consentire loro di attivare o disattivare le app meno sicure.

Grazie

Libreria GitHub


Spread the love

12 Risposte

  1. Rosario ha detto:

    Sto provando ad usare questa libreria. Se invio da GMAIL, è tutto ok, ma da Alice no…
    mi da un errore “Could not connect to mail server” ed uso l’istruzione:
    EMailSender emailSend ( “xxxxx@alice.it”, “xxxxx”, “xxx@alice.it”, “out.alice.it”, 80);
    cosa può essere?

    • Renzo Mischianti ha detto:

      Ciao,
      La prima cosa che noto è che la porta ė probabilmente errata.
      Immetti la porta smtp corretta e riprova.
      Se hai ancora problemi fammi sapere.
      Ciao Renzo

      • Alessandro ha detto:

        Salve. Io non riesco a far connettere l’ESP al WiFi.
        Puó darmi una mano?
        Grazie mille in anticipo

        • Renzo Mischianti ha detto:

          Ciao Alessandro,
          prova con uno sketch di questo tipo

          
          #include         // Include the Wi-Fi library
          
          const char* ssid     = "SSID";         // The SSID (name) of the Wi-Fi network you want to connect to
          const char* password = "PASSWORD";     // The password of the Wi-Fi network
          
          void setup() {
            Serial.begin(115200);         // Start the Serial communication to send messages to the computer
            delay(10);
            Serial.println('\n');
            
            WiFi.begin(ssid, password);             // Connect to the network
            Serial.print("Connecting to ");
            Serial.print(ssid); Serial.println(" ...");
          
            int i = 0;
            while (WiFi.status() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
              delay(1000);
              Serial.print(++i); Serial.print(' ');
            }
          
            Serial.println('\n');
            Serial.println("Connection established!");  
            Serial.print("IP address:\t");
            Serial.println(WiFi.localIP());         // Send the IP address of the ESP8266 to the computer
          }
          void loop() { }
          

          Imposta correttamente il SSID e la PASSWD. Se non funziona, apri un topic sul forum con i problemi che riscontri.
          Ciao Renzo

  2. Ninni ha detto:

    Ciao scusa l ignoranza. La prima cosa che non so, è quale scheda Esp8266 tu hai usato… Poi per favore come e su quali pin l hai connesso. Io ho nodemcu, pensi la tua libreria possa funzionare?

  3. Salvatore ha detto:

    Ciao Renzo,
    grazie per la tua guida molto dettagliata.
    Io avrei la necessità di inviare email utilizzando l’Arduino Mega.
    Sapresti dirmi se mi sarebbe possibile utilizzare la tua libreria o eventualmente dirmi cosa modificare per far si che funzioni?
    Grazie tante per l’aiuto
    Ciao
    Salvatore

    • Renzo Mischianti ha detto:

      Ciao Salvatore,
      andrebbe riscritto l’handshake di invio con le specifiche dell’ethernrt client, ma oggi hanno specifiche abbastanza lontane.
      Se trovo un po’di tempo provo a darci un occhio.
      Ciao Renzo

    • Renzo Mischianti ha detto:

      Ciao Salvatore,
      ho creato un branch della libreria che ancora non ho rilasciato come stabile, e supporta Arduino con UIPEthernet o Ethernet con la possibilità di inviare anche allegati, ma per quanto riguarda Arduino non supporta il protocollo SSL e TLS, perciò devi usare provider tipo SendGrid.
      La puoi provare in anteprima qui.
      Github re
      Ciao Renzo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *