Mandare e-mail

Buongiorno.
Vorrei sapere, se esiste, quale metodo utilizzare per implementare un semplice servizio di invio email tramite arduino.

Per semplificare, puo andar bene anche l'utilizzo di un servizio senza autenticazione crittografata.
Adesso ho un arduino UNO con scheda ethernet esterna, come sappiamo piuttosto limitato come risorse disponibili (gestisce gia un display, un sensore bme280, la scheda ethernet e un servizio di logging e invio in rete tramite socket udp), ma mi andrebbe benone anche se fosse implementabile su altri modelli, in quanto vorrei prendere una piu moderna e potente.

Grazie :slight_smile:

Conosci un solo provider che oggi accetti connessioni NON protette ed autenticate ? ? ?

Guglielmo

gpb01:
Conosci un solo provider che oggi accetti connessioni NON protette ed autenticate ? ? ?

Guglielmo

certo, per esempio libero, alice...

... sicuro? A me non risulta, un tempo era così, ma oggi vogliono tutti SSL/TSL ... altrimenti sarebbero subissati da gente che li usa per fare SPAM ... ::slight_smile:

Controlla bene, perché dubito che riesci ad aprire una porta POP3 o SMTP ed inviare o ricevere posta senza passare per SSL/TSL ...

Guglielmo

Ecco, questo è quanto scrive libero sul suo sito:

PARAMETRI di CONFIGURAZIONE (per esperti)

  • SERVER DI POSTA IN ARRIVO:

  • IMAP:
    – Server: imapmail.libero.it
    – Porta: 993 con SSL

  • POP:
    – Server: popmail.libero.it
    – Porta: 995 con SSL

  • SERVER DI POSTA IN USCITA:

  • SMTP*(con SSL):
    – Server: smtp.libero.it
    (selezionando la richiesta di autenticazione)*

  • –* Porta: 465 con SSL

... più o meno le stesse cose scrive alice che richiede sempre l'autenticazione.

Guglielmo

Credo che al massimo puoi usare un servizio free fino a tot numero di email mese,
esempio smpt2go https://www.smtp2go.com/pricing/
dovrebbe essere gratuito fino a massimo 1000 email al mese e mi pare di averlo provato circa 6 mesi fa ed è possibile
settarlo/usarlo senza ssl. Dovrebbe.

...
char server[] = "mail.smtp2go.com"; 
int port = 2525;     // also 25
...
byte sendEmail()
{ byte respCode, thisByte = 0;

  if(client.connect(server,port) == 1) 
  { Serial.println(F("connected"));
  } 
  else 
  { Serial.println(F("connection failed"));
    return 0;
  }
  if(!eRcv()) return 0;
  Serial.println(F("Sending hello"));
  client.println("EHLO 192.168.1.111");   // replace 1.2.3.4 with your Arduino's ip
  if(!eRcv()) return 0;
  Serial.println(F("Sending auth login"));
  client.println("auth login");
  if(!eRcv()) return 0;
  Serial.println(F("Sending User"));      // Change to your base64 encoded user
  client.println(F("aWdvci5ub3JvQHZpcmdpbGlvLml0"));     // igor.noro@virgilio.it->https://www.base64decode.org
  if(!eRcv()) return 0;
  Serial.println(F("Sending Password"));   // change to your base64 encoded password
  client.println(F("bWV0dGlsYXR1YQ=="));   // mettilatua
  if(!eRcv()) return 0;
                            // change to your email address (sender)
  Serial.println(F("Sending From"));
  client.println("MAIL From: <pippo@pippo.it>");
  if(!eRcv()) return 0;
  // change to recipient address
  Serial.println(F("Sending To"));
  client.println("RCPT To: <dest@gmail.com>");
  if(!eRcv()) return 0;
  Serial.println(F("Sending DATA"));
  client.println("DATA");
  if(!eRcv()) return 0;
  Serial.println(F("Sending email"));
  // change to recipient address
  client.println("To: Destinazione <dest@gmail.com>");
  // change to your address
  client.println("From: Caruso <pippo@pippo.it>");
  client.println("Subject: Your Subject"); 
  client.println("");
  client.println("Hi! Simple test message");
  client.println("");
  client.println(".");
  if(!eRcv()) return 0;
  Serial.println(F("Sending QUIT"));
  client.println("QUIT");
  if(!eRcv()) return 0;
  client.stop();
  Serial.println(F("disconnected"));
  return 1;
}
byte eRcv()
{ byte respCode, 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"));
}[code]

Ciao a tutti.
Dopo un po di tempo riesumo questo post.
Volevo aggiornare quanti hanno risposto che alla fine sono riuscito nel mio intento.

Ho utilizzato le librerie EMailSender di Renzo Mischianti. Ho dovuto mettervi mano per compattarle, rimuovendo alcune funzioni (tipo invio allegati e compatibilità con altri chip) perchè troppo ingombranti per il mio arduino uno. Inoltre ho dovuto apportare alcune correzioni all'algoritmo.

In secondo luogo, come dicevo, ho usato libero. Per andare senza autenticazione TLS non bisogna usare la porta 465 bensì la classica 587, tuttora aperta e funzionante.

Ho utilizzato le librerie EMailSender di Renzo Mischianti. Ho dovuto mettervi mano per compattarle, rimuovendo alcune funzioni (tipo invio allegati e compatibilità con altri chip) perchè troppo ingombranti per il mio arduino uno. Inoltre ho dovuto apportare alcune correzioni all’algoritmo.

Buona ed utile informazione, grazie.
Ma se hai fatto delle correzioni alla libreria segnalale all’autore (Renzo Mischianti). Se poi ne hai fatto anche una versione “lite”, o la mandi all’autore per farla pubblicare come “EMailSenderLite” o la pubblichi tu come variante di quella originale (ovviamente se l’autore è d’accordo, e mantenendo il riferimento al lavoro orginale).

Per andare senza autenticazione TLS non bisogna usare la porta 465 bensì la classica 587

Vorrei precisare meglio, per evitare che qualcuno possa fare delle prove che fallirebbero.

La porta 587 è quella “nuova” utilizzata per l’SMTP, ma richiede autenticazione (altrimenti sarebbe identica alla 25…) ossia devi comunque mettere le credenziali utente specifiche di QUEL servizio/provider. Quello che è possibile evitare su quella porta è la cifratura tramite TLS (non “autenticazione TLS”) della comunicazione che quindi è in chiaro se il client non usa STARTTLS.

Si si, tutto corretto.

Per la verità riguardo alla libreria, sarebbe stata la mia prossima domanda, come fare per renderla disponibile. Contatterò l'autore, grazie!

Makkio:
Per la verità riguardo alla libreria, sarebbe stata la mia prossima domanda, come fare per renderla disponibile.

Puoi iscriverti su GitHub e pubblicare lì la libreria in un tuo repository, ma essendo solo una “rivisitazione” di una libreria esistente, per correttezza io contatterei l’autore non solo per segnalargli eventualmente le correzioni che hai trovato, ma anche per chiedergli se preferisca inglobare la tua variante nel suo progetto (te ne darà paternità comunque nel README) facendone quindi una libreria “light”, oppure pubblicarla (e manutenerla) direttamente tu sul suo repository GitHub.