Mein Papa (Georg Daher) liebt Arduinos. Jedes Mal, wenn ich Zuhause bin, arbeitet er an einem Projekt mit ihnen. Eines davon ist aktuell, wie man mit einem Arduino Uno E-Mails verschicken kann. Wie das funktioniert, hat er dir aufgeschrieben und kannst du in diesem Artikel lesen – ganz viel Spaß damit:
Jeder Entwickler, der mit dem Arduino-System arbeitet, kommt irgendwann in die Situation, dass E-Mails mit diesem Kleinstrechner gesendet werden sollen. Durch die erhöhten Sicherheitsstandards der Dienstleister ist es fast unmöglich, ohne großen Aufwand, Arduino-Bibliotheken für den begrenzten Speicher zu schreiben, die SMTP-Authentifizierungen, Zertifikate und das Ethernetprotokoll beherrschen.
In meinem Fall geht es um eine Anwendung, in der ich einfach eine E-Mail bekommen möchte, wenn eine Störung, z.B. in einer Heizung oder einem technischen Gerät in einem Gebäude, auftritt.
Beruflich bin ich für die technische Gebäudebetreuung von über 130 Immobilien verantwortlich. Die Störmeldesysteme, die es für solche Anwendungen im Industriebereich gibt, sind in der Regel recht teuer, aufwändig zu warten, bzw. nur mit Sondersoftware z.B. via Codesys, Sonderprogrammen der Hersteller oder speziellen Schnittstellen zu programmieren. Um einfache E-Mails zu senden, müssen meist über 1.000€ investiert werden, oder es gibt Dauerkosten für z.B. SIM-Karten. Für den Heimanwender ist das viel zu aufwändig und zu kostspielig.
Wer keinen Industriestandard mit allen Sicherheitskriterien benötigt, kann in dem Fall andere Wege gehen. Wie kann man es nun hinbekommen, dass ein Arduino Uno mit einem Netzwerk-Shield eine E-Mail senden kann? Der direkte E-Mailversand über einen Mailservice ist zu komplex. Deshalb ist der hier vorgestellt Ansatz – ganz anders aufgebaut.
Die Idee
Vor einiger Zeit habe ich für ein anderes Thema die Webseite Onlex.de kennengelernt. Die Betreiber dieses kostenlosen Services bieten Webseiten-Tools für Counter, Gästebücher und Formmailer an.
An dieser Stelle kam die Idee. Ein Formular auf einer Webseite wird mit Daten gefüllt und an eine vorher eingetragene E-Mail gesendet. Das ist die Dienstleistung des Formmailer-Services. Somit erhalten Administratoren die Daten der Kunden immer exakt gleich als Datensatz zugesendet.
Wenn nun der Arduino diese Formulareingabe „simuliert“ und diese an einen Dienst sendet, dann bekomme ich die gewünschte E-Mail. Der Vorteil ist: Es werden auf Seiten des Arduinos keine Sicherheitsprotokolle benötigt.
Kurzer Exkurs in das Formular einer Webseite
Wenn man eine Website programmiert, werden die Formulardaten in HTML meist derart programmiert (nur ein kleiner Auszug):
<form method="post" accept-charset="UTF-8" action="https://www.onlex.de/_formmailer.php?username=xxxxxxx"
enctype="application/x-www-form-urlencoded">
Hinzu kommen dann noch die Input und Buttons für das Senden.
Mit den HTML-Informationen kommt man beim Arduino aber nicht wirklich weiter.
Nächster Schritt:
Welche Daten werden eigentlich von einem Browser gesendet? Zwei wichtige Begriffe sind in diesem Zusammenhang die Methoden „Get“ und „Post“. Wenn man im Internet nach diesen Begriffen sucht, wird man z.B. auf der SELFHTML-Seite fündig.
Im Beispiel der Get- und Post-Methode sind die Daten zu sehen, die ein Browser sendet:
POST / _formmailer.php?...
Host: www.onlex.de
Content-Type: …
usw...
Wer tiefer in das Thema eintauchen möchte, kann auch das Firefox-Entwicklertool „Netzwerkanalyse“ nutzen, dort werden die gesendeten Daten einer Webseite angezeigt.
Wichtig: Das Onlex-Team nutzt die Post-Methode, diese ist somit zwingend notwendig. Bei der Post-Methode ist es wichtig, dass vor dem Senden der Daten, zwei CR/LF-Bytes gesendet werden. Auf der Webseite https://www.arduino.cc/en/Tutorial/WebClient ist ein gutes Einstiegsbeispiel, das mir als Grundgerüst gedient hat.
Nun wird es praktisch
Benötigtes Material: 1 Arduino Uno, 1 Netzwerk-Shield
Als erstes: Auf der Onlex-Seite einen kostenlosen Account erstellen. Bitte alle Seiten gut lesen, auch die Tutorials für den Formmailer. Dieses Hintergrundwissen hilft bei der Arduino-Programmierung. Sobald man seinen Account hat, werden folgende Daten eingetragen:
- Empfangs-E-Mail, an die ein Formular gesendet wird
- Im Linken Menü „Formmailer“ im Kapitel „Einstellungen“
können alle Vorgaben gesetzt werden- Wartezeit zwischen zwei Formularen
- Passwörter
- …
An dieser Stelle zwei große Bitten:
- Mit dem Arduino nicht die Betreiber der Onlex-Seite ärgern, weil ständig E-Mails gesendet werden, da man z.B. im Programm einen Fehler gemacht hat.
- Die Störungsmailfunktion bitte nicht für lebenswichtige Dinge einsetzen. Ein Arduino Uno erfüllt nicht die Industriestandards. Somit gut aufpassen, was man macht.
Die Routine für dieses How-To ist unüblicher Weise für die Mailsendung in die Setup-Schleife gesetzt, damit es bestimmt auch nur einmal ausgeführt wird und der Programmcode einfach bleibt. Im Programm sind alle relevanten Infos kommentiert (siehe unten).
Den Muster-Code der Arduino.cc–Seite habe ich belassen, da dort einige Fehler für die Netzwerkhardware abgefragt werden und man schön testen kann. Daten werden auf dem seriellen Monitor ausgegeben.
Anpassungen:
In der Zeile
client.println("POST /_formmailer.php?username=XXXXXXX HTTP/1.1");
bitte bei „XXXXXXX“ deinen eigenen Usernamen von Onlex eintragen.
Und an dieser Stelle schreibst du den Text deiner Meldung rein, beachtet aber die String-Länge! Die Anzahl der Bytes bitte bei Lenght anpassen. Achtung: „MSG=“ zählt mit 😊
client.println("Content-Length: 19"); // 1. \r\n Name+TestWert+CR=13
client.println(); // 2. \r\n
client.print("MSG=Heizung_Ausfall"); // Felddaten senden
Anstelle von MSG kannst du natürlich andere Formularfeldnamen nehmen. Das ist schon das ganze Geheimnis. Cool, dass es so einfach geklappt hat.
Der Beispielcode
So könnte das Ganze dann aussehen:


Um dir den Code übersichtlicher zu zeigen, habe ich ihn dir als Bild festgehalten. Du kannst ihn hier bei GitHub als HTML-Skript herunterladen.
Danke
An dieser Stelle vielen Dank an das Onlex-Team für den kostenfreien Service. Wer den Dienst öfter nutzt, kann bestimmt auch eine kleine Unterstützung geben. Ich hoffe, dass dir dieses kleine How-to bei deinen Projekten hilft. Letztendlich ist die Lösung ein gut 20 Zeilen-Programm, um eine E-Mail zu senden. Wie immer: Keine Gewähr oder Haftungsübernahme durch die Nutzung der Software.
Gutes Gelingen und immer Bug-frei bleiben
Georg Daher
Mehr zum Thema „Arduino“
Du hast noch weitere Fragen oder Feedback zum Versenden der E-Mails via Arduino Uno? Gerne. Immer her damit! Kommentiere diesen Artikel, nutze das Kontaktformular oder meine Social-Media-Accounts als Anlaufstelle. Ich freue mich von dir zu hören und leite die Fragen gerne an meinen Papa weiter. 🙂
Quelle Beitragsbild: Georg Daher
SMTP (rfc821) ist viel simpler und kann ohne Probleme auch mit dem Arduino implementiert werden. Es gibt keinen vernünftigen Grund, dafür irgendwelche 3rd Party Dienste zu benutzen.
Ich find das total cool! Insbesondere, weil man auf dem schwachbrüstigen Arduino keine weiteren libraries installieren muss. War in 5 Minuten eingerichtet und erfüllt seinen Zweck (zumindest solange onlex läuft…). Vielen Dank für die tolle Anregung!
Vielen lieben Dank dir! 🙂