Inviare e-mail tramite ESP32 con SMTP
La connettività Wi-Fi in ESP32 ci permette di poterla adoperare per diverse funzionalità, tra cui l’invio di e-mail di testo semplice o HTML adoperando il protocollo SMTP (Simple Mail Transfer Protocol). Per chi non lo sapesse, SMTP è un protocollo standard in Internet per l’inoltro di e-mail. Pertanto, sarà necessario configurare la ESP32 ad un server SMTP (Gmail, Outlook, etc…) per inviare e-mail.
Fase preliminare
Iniziamo creando un nuovo account di posta a questo LINK, nel nostro esempio adoperiamo Gmail, la e-mail di Google. Compiliamo tutti i campi, assicurandoci di non adoperare password banali.
N.B.: ti consigliamo vivamente di evitare di usare il tuo account Gmail e di crearne uno appositamente pensato per la ESP32, poiché se qualcosa dovesse andare storta nella programmazione e le richieste fossero troppe, Google potrebbe bloccare il tuo account e generare una serie di problematiche di cui non ci assumiamo alcun modo la responsabilità.
Il passo seguente è accedere alla sezione “Gestisci il tuo Account Google” cliccando sull’icona che appare in alto a destra della pagina web.
Nella barra dei menu laterale, clicchiamo su Sicurezza, andando sulla scheda Accesso a Google per impostare la Verifica in due passaggi. Quando avrete impostato la verifica in due passaggi, muoviamoci per impostare una Password per le app.
La procedura è guidata ed è molto semplice; scegliamo come app Posta e come dispositivo Altra (nome personalizzato). Scriviamo il nome da dare al nostro dispositivo.
Per mancanza di fantasia, il nostro dispositivo si chiamerà ESP32. Verrà generata una password per la nostra app, come appare in immagine, che inseriremo nello sketch, quindi va conservata gelosamente.
Ora che abbiamo ricavato il nome della nostra app e la sua password, facciamo una rapida ricerca su Google per trovare i parametri SMTP per Gmail. Per evitarvi la seccatura di cercare, ecco di seguito i parametri necessari:
- Host SMTP: smtp.gmail.com
- Nome utente: [la nostra e-mail]
- Password: [password dell’app]
- Porta SMTP con SSL: 465
- Porta SMTO con TLS: 587
Ricordatevi che è impostato un limite giornaliero di 2000 e-mail.
Codice
Per inviare e-mail con ESP32 sarà necessario affidarci ad una apposita libreria, chiamata ESP-Mail-Client e scaricabile al seguente LINK. Una volta scaricata ed installata sulla IDE di Arduino, andiamo su File->Esempi->ESP Mail Client->SMTP->Send_Text ed apriamo l’esempio. Muoviamoci per configurare assieme lo sketch per l’invio di una semplice e-mail di testo. Inseriamo per primo il nome della nostra rete Wi-Fi e la relativa password.
#define WIFI_SSID "nome-wifi" #define WIFI_PASSWORD "passwordwifi"
Definiamo poi il nome dell’Host come segue:
#define SMTP_HOST "smtp.gmail.com"
Per la porta scegliamo se usare quella con SSL o TLS
#define SMTP_PORT 465
Inseriamo le credenziali della e-mail dalla quale inviare il messaggio.
#define AUTHOR_EMAIL "lamiaemail@gmail.com" #define AUTHOR_PASSWORD "passwordellapp"
Nel VOID SETUP troviamo le impostazioni per il dominio utente della e-mail, da lasciare vuoto,
session.login.user_domain = F("");
e per la impostazioni di invio messaggio, come il nome del mittente (message.sender.name), l’oggetto della e-mail (message.subject), il nome del destinatario e la sua e-mail (message.addRecipient) ed, infine, il messaggio di testo (textMsg).
message.sender.name = F("ESP32"); message.sender.email = AUTHOR_EMAIL; message.subject = F("E-mail di prova da ESP32"); message.addRecipient(F("Nome"), F("xxxxxxxxxx@gmail.com")); String textMsg = "Questa è una semplice e-mail di prova inviata da ESP32."; message.text.content = textMsg;
Non ci resta che selezionare la nostra dev-board, la relativa porta e caricare lo sketch. Se tutto è andato bene, apparirà questo su monitor seriale.
Aprendo poi la casella di posta riceveremo una e-mail.
Per inviare una e-mail contenente HTML basterà andare sul percorso File->Esempi->ESP Mail Client->SMTP->Send_HTML ed apriamo l’esempio. La configurazione di base è quella vista sopra, la sola cosa che cambia sarà modificare la seguente riga:
String htmlMsg = "<p>This is the <span style=\"color:#ff0000;\">html text</span> message.</p><p>The message was sent via ESP device.</p>"; message.html.content = htmlMsg;