Hallo zusammen,
in einem vorhergehenden Beitrag habe ich gezeigt, wie ein ESP-Prozessor Ping-Pakete schicken und empfangen kann. Heute möchte ich zeigen, dass dies auch mit SMTP via GMail möglich ist. Bei meiner Recherche bin ich auf eine praktische Library aufmerksam geworden.
Benötigte Hardware:
- NodeMCU mit ESP8266
Vorarbeiten:
- Versionsprüfung der Boardefinitionen im Boardverwalter
- G-Mail Konto anlegen
- Dienste für "unsichere Apps" zulassen.
Ich würde allen unseren Lesern nahe legen für dieses Projekt ein eigenes Konto anzulegen um seine Accountsicherheit nicht zu gefährden.
Wie man ein Google Konto anlegt wird hier ausreichend beschrieben, um nicht näher darauf eingehen zu müssen:
Ist der Account erstellt und aktiviert können wir uns bei Google einloggen und die Einstellungen für das Konto öffnen, Sie finden diesen Punkt in der oberen rechten Ecke des Browsers. "G Suite -> Google Konto" Sie können die Seite auch über die Eingabe der URL aus dem Screenshot erreichen:
Navigieren Sie wie oben zu sehen zum Punkt "Sicherheit", dort haben Sie die Möglichkeit den Zugriff durch weniger sichere Apps zu erlauben, dieser Zugriff muss aktiviert werden:
Als nächstes kümmern wir uns um die Boarddefinitionen in der Arduino-IDE
Wie man die ESP-Boards in Betrieb nimmt beschreiben wir ausführlich in unseren E-Books. Für dieses Projekt ist jedoch u. U. ein Downgrade der Boarddefinitionen auf 2.4.2 erforderlich. Dazu entfernen wir das Modul im Boardverwalter und intallieren es im Anschluss neu:
Danach stehen die Boards wieder wie gewohnt zur Verfügung.
Um mit verschiedenen Versionständen, der Definitionen und Librarys besser zurechtzukommen möchte ich dem etwas fortgeschrittenen Bastler an dieser Stelle PlatformIO nahe legen.
Die benötigte Library für den SMTP-Versand gibt es hier zum Download. Diese können wir als *.zip downloaden und in der Arduino-IDE unter Sketch -> Bibliothek einbinden -> .Zip-Bibliothek hinzufügen.
Der Anschließende Neustart der Arduino-IDE ist obligatorisch.
Nach dem erfolgreichen Import steht uns in der IDE unter: "Datei -> Beispiele -> Beispiele aus eigenen Bibliotheken -> ESP8266SMTP -> ESP8266SMTP_Gmail.ino" ein Beispiel zur Verfügung welches wir jedoch noch anpassen müssen.
Da der ESP eine WiFi Verbindung benötigt um eine E-Mail senden zu können passen wir zuerst im Header die SSID und das W-Lan-Passwort an.
Die nächsten notwendigen Anpassungen sind in der Void-Schleife zu finden:
Tragen Sie im unteren Abschnitt ab SMTP.setEmail Ihre jeweiligen Daten ein. In den ersten beiden Zeilen den soeben erstellten Benutzeraccount und Ihr Passwort, unter .Subject den Betreff der zu sendenden E-Mail. Im Abschnitt .setFrom können Sie den Absender eintragen, welcher beim Empfang der Mail angezeigt werden soll (der echte Absender bleibt Ihr neuer Google-Mail-Account).
Im nächsten Abschnitt werden dann die Empfänger, sowie der Inhalt der E-Mail festgelegt:
Ich habe für mein Beispiel eine Mail an info@az-delivery.com schicken lassen, tragen Sie hier bitte EINE IHRER ADRESSEN ein. Haben Sie mehrere Empfänger können Sie diese, getrennt mit einem Komma, an der selben Stelle einfügen.
Der zweite Teil, hier "The European languages....." enthält die Nachricht der zu verschickenden Email und ist in der Vorlage mit einem Textgenerator erstellt worden. Hier das Ergebnis:
Zum besseren Verständnis habe ich den Block noch einmal geändert:
Den vollständigen Code stelle ich heute nicht für Copy&Paste zur Verfügung und bitte Sie, Ihr Wissen mit Bedacht zu nutzen.
Bis zum nächsten Beitrag ;)
Update 03.02.20:
Blogbeitrag überprüft, funktioniert nach wie vor. Kein Anfängerprojekt!
Anlaufstelle für Fortgeschrittene: Debugging in esp8266SMTP.h Zeile 14 einschalten, auf den Versionsstand der genutzten Pakete/Librarys achten!
19 comments
Andreas Wolter
@dev: ich vermute, dass die SMTP Bibliothek, die hier verwendet wurde, nicht mehr zu den Anforderungen des GMAIL Kontos passt. Mit einem Blick auf Github in die Issues dieser Bibliothek gewinne ich schnell den Eindruck, dass das nicht mehr passt. Ich kann leider keine Alternative anbieten. Allerdings könnte man einen ESP32 und dazugehörige andere Bibliotheken verwenden.
Grüße,
Andreas Wolter
AZ-Delivery Blog
dev
Grüße!
Logging in…Diese Anleitung ist genau das was ich gesucht habe, danke sehr! Allerdings habe ich auch das Problem, dass selbst mit App-Passwort kein Versand möglich ist:
> C: send SMTP command, AUTH PLAIN
> C:
> C: *******************
< S: 235 2.7.0 Accepted
10 Closing the session…
> C: terminate the SMTP session
Message sent success: 0
Message sent failled: 0
-——————-
Error sending Email, the Session_Config object was not assigned
Free Heap: 36584
Muss man das noch was mit dem Session_Config object machen?
Georg
Hallo,
habe ein App-Passwort erzeugt, aber die Anmeldung schlägt immer noch fehl. Kann es sein, dass dieser einfache Code jetzt mit Gmail doch nicht mehr funktioniert?
Achim
Hi, es funktionieren die G-Mail-Accounts nur noch mit App-Passwort. Ein App-Passwort ist ein 16-stelliger Sicherheitscode. Zunächst die 2 Faktor-Authentifizierung einrichten. Danach der Google-Anleitung folgen:
“Öffnen Sie Ihr Google-Konto.
Wählen Sie Sicherheit aus.
Wählen Sie unter “Bei Google anmelden” die Option App-Passwörter aus. Möglicherweise müssen Sie sich anmelden. Wenn diese Option nicht verfügbar ist, kann dies folgende Gründe haben:
Die Bestätigung in zwei Schritten ist für Ihr Konto nicht eingerichtet.
Die Bestätigung in zwei Schritten ist nur für Sicherheitsschlüssel eingerichtet.
Sie nutzen ein Konto über Ihren Arbeitsplatz, Ihre Bildungseinrichtung oder eine andere Organisation.
Sie haben das erweiterte Sicherheitsprogramm aktiviert.
Tippen Sie unten auf App auswählen und wählen Sie die entsprechende App aus und dann Gerät auswählen. Wählen Sie dann das entsprechende Gerät aus und dann Erstellen.
Folgen Sie der Anleitung, um das App-Passwort einzugeben. Das App-Passwort ist der 16-stellige Code in der gelben Leiste auf Ihrem Gerät.
Tippen Sie auf Fertig."
https://support.google.com/accounts/answer/185833?hl=de
Raimund
Hallo,
Habe seit dem 4.6.2022 das gleiche Problem! Bin Dazo hat mir mein Brifkasten immer eine Mail nach Einwurf gesendet. Eine Email wird jetzt nicht mehr an mein Gmail-Konto verschickt. Die Einstellung für die Unsicheren Apps hat Google wohl deaktiviert. Gibt es eine andere Möglichkeit zum Versenden von Nachrichten?
Vielen Grüße
Andreas Wolter
@Celestino: muchas gracias por esta pista
Ich übersetze kurz, was Celestino geschrieben hat, denn ich halte es für sehr wichtig:
“Hallo, ich habe Probleme mit Google Mail-Konten, denn nach einer Weile wird der Zugriff auf das Konto für unsichere Anwendungen automatisch gesperrt. Außerdem haben sie angekündigt, dass sie diese Option Mitte Mai 2022 endgültig deaktivieren werden. Wir müssten also nach anderen E-Mail-Konten suchen, die dies zulassen, oder die Bibliotheken in Arduino ändern, um die neuen Sicherheitsanforderungen zu erfüllen. Mit freundlichen Grüßen.”
Ich hoffe, dass die Programmierer der Bibliothek diese Änderungen vornehmen.
Grüße,
Andreas Wolter
Celestino
Hola.
Estoy teniendo problemas con las cuentas de gmail, ya que automáticamente después de un tiempo bloquea el acceso a la cuenta por aplicaciones poco seguras.
Además han anunciado que ha mediados de Mayo de 2022 desactivarán definitivamente esta opción, con lo que habría que buscar otras cuentas de correo que lo permitan o que en arduino las librerías cambien par cumplir los nuevos requisitos de seguridad.
Un saludo.
Peter
Hallo,
ich habe das ganze mal ausprobiert. und siehe, es läuft soweit einwandfrei. super Anleitung. Das einzige was mir noch Kopfschmerzen bereitet, ist, dass eingegebene Zeilenumbrüche nicht in der empfangenen E-mail auftauchen.
Ich habe es sowohl mit \r\n als auch char(10) + char(13) versucht. bei der seriellen Ausgabe erscheinen die Meldungen untereinander. So wie es sein soll. In der E-mail jedoch ist alles in einer Zeile. als wären die Zeilenumbrüche entfernt worden.
Was übersehe ich ?
Grüße
Peter
Patrick
Wie man bei Google die 2-Faktor-Authentifizierung aktiviert: https://www.google.de/intl/de/landing/2step/#tab=how-it-works
App-Passwort einrichten:
https://support.google.com/accounts/answer/185833?hl=de
Patrick
„Dienste für “unsichere Apps” zulassen“ ist bei Gmail nun nicht mehr notwendig. Ihr müsst lediglich die 2-Faktor-Authentifizierung aktivieren und könnt danach extra für diesen Zweck wie hier App-Passwörter generieren. Dabei kann und sollte jede App ihr eigenes Passwort erhalten, welches einfach über die Google-Oberfläche generiert wird. Dann in den Accountdaten im Quelltext statt euren normalen Google-Passworts das extra für diese App generierte Passwort eintragen und es funktioniert.
Jims
it works well after the add of client insecure in the .cpp file.
the next challenge should be to add a message content !
regards
Jims
Wolfgang
Warum wurden hier nicht wie in anderen Beispielen die Acountdaten mit Base64 verschlüsselt?
JB
Hallo,
ich erhalte immer die Fehlermeldung
SMTH AUTH Erro. Wenn ich dann die Änderung von Rolba v. 05.01.20 vornehme
kommt:
WiFiClientSecure has no member setInSecure
Kennt jemand die Ursache und kann weiterhelfen?
Rolba
Google hat seine Sicherheitsabfrage geändert, daher folgende Schritte:
1. Librarie ESP8266SMTP.cpp ändern
Code:
WiFiClientSecure client; // Zeile 121
client.setInsecure(); // neuen Eintrag einfügen
2. Google Gmailkonto den Zugriff weniger sicherer Apps erlauben !
LG
Roland
jakob
ich habe das gleiche problem wie Erhardsson
“Error sending message: Could not connect to mail server”
komme leider nicht weiter. kann es sein, dass hier ein problem mit ssl ist?
andreas
Hallo
ich möchte anstatt eines Textes, wie hier in deinem Beispiel
if(SMTP.Send(“me8az-delivery.com” Die Lichtschranke an der Vorderseite …."
nicht den Text “Die Lichtschranke…” sondern eine Variable mit einen Wert versenden.
Da aber der SMTP.Send Befehl einen String verlangt, bekomme ich es einfach nicht hin,,,
Kann Du mir sagen wie das geht ?
Jonas
Hallo,
erstmal vielen Dank für den Beitrag. Habe es ausprobiert und es hat nach dem Downgrade der Version auch funktioniert. Ich benötige aber die atuellste Version (2.5.0), ich einen Webserver mit einbinden möchte, der aber bei der älteren Version nicht stabil läuft. Gibt es da eventuell noch eine Lösung, dass der E-Mailversand auch auf der aktuellen Version läuft?
Wäre super, wenn mir da jemand weiterhelfen könnte.
Gruß
Jonas
Erhardsson
Hallo,
ich bekomme immer die Meldung:
“Error sending message: Could not connect to mail server”
Benutzername und Password sind OK.
Was tun?
veit
sehr schön!
notifications an android handys schicken wäre auch fein ….