Per riceverle neppure, ma non riesco ad utilizzare ciò che ricevo. Nel senso che devo decodificare opportunamente oggetto, corpo del testo ed eventuale allegato. Devo quindi assegnare oggetto e corpo ( solo testo) ad una o piu' variabili, sulle quali fare il parsing del testo ed eseguire le operazioni conseguenti. Il problema è che non riesco ad assegnare le variabili.
La libreria, usando le funzioni pubbliche ( secondo gli esempi della libreria), mi stampa tutte di fila le mail ricevute, opportunamente filtrate.
Suggerimenti per come fare?
diegobincoletto
postato il: 19.07.2021, alle ore 10:18
Pubblica il codice, può servire a capire cosa stai facendo.
Scusate, passavo di qua\'...
L'unica rivoluzione possibile
è quella di migliorare se stessi.
MB54
postato il: 19.07.2021, alle ore 10:41
Grazie, ho risolto. Negli esempi della libreria ci sono delle funzioni che non vedevo richiamare dal main; pensavo fossero ad uso interno della libreria, ma sono proprio gli esempi che stavo cercando sul come usare le variabili della libreria. La soluzione era banale e bene in vista; non averlo capito subito è stato un effetto collaterale della guerra fra i miei neuroni.
diegobincoletto
postato il: 19.07.2021, alle ore 12:33
Sarebbe interessante vedere il codice come riferimento.
Scusate, passavo di qua\'...
L'unica rivoluzione possibile
è quella di migliorare se stessi.
MB54
postato il: 19.07.2021, alle ore 14:30
diegobincoletto: Sarebbe interessante vedere il codice come riferimento.
Sono al momento più di 2500 righe di codice (vuote e commenti compresi, ma le mail occunano solo una piccola parte del codice) e sono poco oltre la metà .
Inviare le mail all' ESP32 mi serve per due cose:
1) inviare comandi semplici (ma anche multipli)che inserisco nell' oggetto della mail, codificandoli in modo opportuno. L' ESP se li va poi a cercare nel testo e fa di conseguenza
2) inviare dei file di riconfigurazione, piuttosto lunghi (sono la programmazione oraria suddivisa nei 12 mesi e per slot orari di 2 ore.
L' ESP32 cerca le reti presenti e vede se ha i codici per una di queste; si connette.
Estrapolando dal codice, ci sono inizialmente le configurazioni necessarie :
Poi una funzione di impostazione dell 'IMAP, nella quale sono filtrati solo i miei messaggi:
void imappone(){
/** Enable the debug via Serial port
* none debug or 0
* basic debug or 1
*/
imap.debug(1);
/* Set the callback function to get the reading results */
imap.callback(imapCallback);
/** In case the SD card/adapter was used for the file storagge, the SPI pins can be configure from
* MailClient.sdBegin function which may be different for ESP32 and ESP8266
* For ESP32, assign all of SPI pins
* MailClient.sdBegin(14,2,15,13)
* Which SCK = 14, MISO = 2, MOSI = 15 and SS = 13
* And for ESP8266, assign the CS pins of SPI port
* MailClient.sdBegin(15)
* Which pin 15 is the CS pin of SD card adapter
*/
/* Set the session config */
session.server.host_name = IMAP_HOST;
session.server.port = IMAP_PORT;
session.login.email = AUTHOR_EMAIL;
session.login.password = AUTHOR_PASSWORD;
/* Message UID to fetch or read */
config.fetch.uid = ';
/* Also search the unseen message */
config.search.unseen_msg = true;
/* Set the storage to save the downloaded files and attachments */
config.storage.saved_path = '/email_data';
/** The file storage type e.g.
* esp_mail_file_storage_type_none,
* esp_mail_file_storage_type_flash, and
* esp_mail_file_storage_type_sd
*/
config.storage.type = esp_mail_file_storage_type_none;
/** Set to download heades, text and html messaeges,
* attachments and inline images respectively.
*/
config.download.header = false;
config.download.text = false;
config.download.html = false;
config.download.attachment = false;
config.download.inlineImg = false;
/** Set to enable the results i.e. html and text messaeges
* which the content stored in the IMAPSession object is limited
* by the option config.limit.msg_size.
* The whole message can be download through config.download.text
* or config.download.html which not depends on these enable options.
*/
config.enable.html = true;
config.enable.text = true;
/* Set to enable the sort the result by message UID in the ascending order */
config.enable.recent_sort = true;
/* Set to report the download progress via the default serial port */
config.enable.download_status = true;
/* Set the limit of number of messages in the search results */
config.limit.search = 5;
/** Set the maximum size of message stored in
* IMAPSession object in byte
*/
config.limit.msg_size = 1024;
/** Set the maximum attachments and inline images files size
* that can be downloaded in byte.
* The file which its size is largger than this limit may be saved
* as truncated file.
*/
config.limit.attachment_size = 1024 * 1024 * 5;
/* Connect to server with the session and config */
if (!imap.connect(&session, &config))
return;
/* {Optional] */
printAllMailboxesInfo(imap);
/* Open or select the mailbox folder to read or search the message */
if (!imap.selectFolder('INBOX'))
return;
/* {Optional] */
printSelectedMailboxInfo(imap);
}
Da notare config.limit.msg_size = 1024; per motivi specifici il testo del messaggio potrà essere lungo (normalmente fra 400 e 900B). Se serve potrò aumentare.
Poi ci sono altre funzioni connesse:
void uso_Email(){
Serial.println();Serial.println('...nuova ricerca mail: ');Serial.println();
config.search.criteria = 'FROM maurxx@tiscali.it';
for (contoMail = ultimo_UID+1; contoMail < nextMsgUID;contoMail++){
String uid = String(contoMail);
config.fetch.uid = uid.c_str();
config.fetch.set_seen = true;/* Set seen flag */
Serial.println(uid);
/** Read or search the Email and keep the TCP session to open
* The second parameter is for close the session. */
MailClient.readMail(&imap, false);
imap.empty();/* Clear all stored data in IMAPSession object */
//Serial.println();
Serial.print('conteggio mail: ');Serial.print(contoMail);
Serial.print(' oggetto:');
Serial.print(testo_Oggetto [contoMail-ultimo_UID-1]);
Serial.println();
Serial.println('testo mail :');
Serial.println(testo_Messaggio);
Serial.println();
verifica_Email();
}
void printMessages(IMAPSession &imap)
{
/* Get the message list from the message list data */
String stringhetta;
IMAP_MSG_List msgList = imap.data();
for (size_t i = 0; i < msgList.msgItems.size(); i++)
{
/* Iterate to get each message data through the message item data */
IMAP_MSG_Item msg = msgList.msgItems[i];
if (msg.attachments.size() > 0)
printAttacements(msg);
Serial.println();
}
}
Nell' ultima funzzione, oggetto della mail e testo sono salvati rispettivamente in un vettore per elaborare fino a 10 mail e in una variabile per il txt. In quest' ultima sono eliminati tutti gli spazi bianchi e i segni di = che si inseriscono da soli nel passaggio IMAP per un motivo a me sconosciuto.
Fatto questo ci sono poi funzioni a piacere per elaborare ed eseguire i comandi. Una nota per le sole mail di riconfigurazione. Si tratta di 287 byte, che al momento per semplicità ho preferito inviare come testo del messaiio in forma di testo letterale, per cui occupano appunto molti byte (potenzialmente fino ad oltre 1024 B ). Se servirà spazio invierò la riconfigurazione come byte grezzi.
Il tutto è abbozzato a fondo, funziona bene e le mail non tradiscono. Potevo fare il tutto con un browser web, magari socket, ma ho preferito provare le mail che evitano di riconfigurare le interfacce web ad ogni modifica o ripensamento.
diegobincoletto
postato il: 19.07.2021, alle ore 17:40
Grazie, Utile per imparare qualcosa di nuovo.
Questo è li spirito di GRIX
Scusate, passavo di qua\'...
L'unica rivoluzione possibile
è quella di migliorare se stessi.
gironico
postato il: 19.07.2021, alle ore 17:53
ottimo lavoro mauro.... quando ho tempo lo provo e vediamo se metto in pensione telegram.......
La vita è troppo breve per bere vini mediocri
MB54
postato il: 19.07.2021, alle ore 18:20
gironico: ottimo lavoro mauro.... quando ho tempo lo provo e vediamo se metto in pensione telegram.......
diegobincoletto: Grazie, Utile per imparare qualcosa di nuovo.
Questo è li spirito di GRIX
Sul forum ho imparato molte cose
Le librerie di Arduino e simili sono estremamente utili, ma mal spiegate. Difficile trovare nel web qualche cosa che vada oltre all' accendo led e spengo led: centinaia di copiaincolla.... CTRL+C, CTRL+V
Sempre per questo progetto sono impazzito ad usare utilmente il doppio core dell' ESP. Vero è che il C non è il mio mestiere.
A stima finirò il programma per inizio settembre... esticazzi...
Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito