Durch einen Foren-Beitrag animiert habe ich versucht vom ESP aus eine
Email zu versenden.
Um sicher zu sein, dass das auch klappt, habe ich das zuerst in Java
implementiert und es geht.
Doch beim Versuch, es mit dem SMTP-Protokoll auf dem ESP zum Laufen zu
bringen, stoße ich auf ein Problem, das ich (noch) nicht lösen kann.
Die Protokoll-Sequenz sieht wie folgt aus. 'S' ist der Email-Server und
'C' der ESP (client).
1
IPunavaiable,Waiting...
2
Configdone,IPis192.168.821.123
3
S:220web.de(mrweb004)NemesisESMTPServiceready
4
5
C:EHLO
6
S:250-web.deHello192.168.821.123[77.180.143.921]
7
S:250-AUTHLOGINPLAIN
8
S:250-SIZE141557760
9
S:250STARTTLS
10
11
C:STARTTLS
12
S:220OK
13
14
C:AUTHLOGIN
15
S:21,3,3,0,2,2,10(bytesequence)
16
connectionclosedbyserver
Nach dem Kommando STARTTLS geht es irgendwie nicht weiter. Egal was sich
senden, es kommen 7 Bytes zurück, wie oben aufgelistet.
Meine Vermutung ist, dass das Protokoll irgendwie in den TLS/SSL-Modus
wechselt. Dazu habe ich leider nirgendwo eine Beschreibung finden
können. In Jave versteckt sich das hinter irgendwelchen Bibliotheken.
Dazu 2 Fragen:
Hat jemand Erfahrung mit dem Versenden von Emails von einem μC aus?
Hat das auch schon mal jemand vom ESP aus hinbekommen?
Nach STARTTLS muss du den cryptographischen Exchange starten, also den
Schlüsselaustausch.
Such dir einen Server ohne SSL und teste es damit.
Danach kannst du auf STARTTLS weiter machen.
Es wäre aber zu empfehlen, dass du eine Bibliothek mit Support
verwendest.
Rolf H. schrieb:> S: 250 STARTTLS
Server sagt: Ich kann auch verschlüsseln, wenn Du es wünschst!
> C: STARTTLS
Client sagt: Ja, lass uns verschlüsseln!
Warum bestätigst Du die Verschlüsselung, wenn Du es mit dem ESP gar
nicht kannst?
Siehe auch:
https://de.wikipedia.org/wiki/STARTTLS
Frank M. schrieb:> Warum bestätigst Du die Verschlüsselung, wenn Du es mit dem ESP gar> nicht kannst?
Nun ja, laut Doku sollte die SDK es können, aber wie muss ich das
machen?
https://nodemcu.readthedocs.io/en/master/en/modules/tls/
Es wird z.B. im Zusammenhang mit MQTT diskutiert, und da scheint es zu
gehen.
Rolf H. schrieb:> Nun ja, laut Doku sollte die SDK es können, aber wie muss ich das> machen?>> https://nodemcu.readthedocs.io/en/master/en/modules/tls/
Wenn Du den Wiki-Artikel gelesen hättest, wie ich es Dir empfohlen habe,
wäre Dir folgender Satz aufgefallen:
"Für HTTP gibt es mit RFC 2817 ein zu STARTTLS vergleichbares Verfahren,
um TLS-Verbindungen aufzubauen. Üblicherweise wird hier aber HTTPS nach
RFC 2818 verwendet."
Das ist wohl mit der dokumentierten Lib unter
https://nodemcu.readthedocs.io/en/master/en/modules/tls/
gemeint. Das lässt sich aber meiner Meinung nach nicht einfach auf
SMTP/STARTTLS anwenden.
Also: Teste das doch erstmal ohne Verschlüsselung, d.h. nimm das Angebot
des Servers eben nicht an.
Hallo Frank, natürlich hab ich den WiKi Artikel gelesen, aber nur andere
Schlüsse draus gezogen.
Frank M. schrieb:> Wenn Du den Wiki-Artikel gelesen hättest, wie ich es Dir empfohlen habe, ...
Ich nehme mal an, das war jetzt etwas überspitzt formuliert ;)
Also die Alternative wäre dann SMTPS. Geht aber nicht. Und ja, der
Server besteht auf STARTTLS. Da das mit Java geht, aber in der
Bibliothek verborgen ist, meine Fragen.
Allerdings scheint es auch bei HTTPS bzgl. TLS noch ein paar Probleme
mit der SDK zu geben. Ich versuche das mal zu klären.
PS: Meine Eingangsfrage war daher auch, WER hat damit Erfahrung und hat
das hinbekommen.
Rolf H. schrieb:> Ich nehme mal an, das war jetzt etwas überspitzt formuliert ;)
Natürlich :-)
> Und ja, der Server besteht auf STARTTLS.
Stimmt, habe es gerade mit telnet auf smtp.web.de getestet:
1
$ telnet smtp.web.de 25
2
Trying 213.165.67.108...
3
Connected to smtp.web.de.
4
Escape character is '^]'.
5
220 web.de (mrweb003) Nemesis ESMTP Service ready
6
ehlo me
7
250-web.de Hello me [x.x.x.x]
8
250-AUTH LOGIN PLAIN
9
250-SIZE 141557760
10
250 STARTTLS
11
mail from: president@whitehouse.gov
12
530 Must issue a STARTTLS command first
Mittlerweile bestehen immer mehr SMTP-Server auf Verschlüsselung - was
ja prinzipiell erstmal nicht schlecht ist. Wenn Du keinen Zugang auf
einen öffentlichen Mailsserver hast, bei dem noch Plain Text übertragen
werden kann, könntest Du einen lokalen Mailserver aufsetzen, der die
Mails dann an einen öffentlichen weiterleitet. Ja, ich weiß.... jede
Menge Mehraufwand.
Oder Du findest halt eine geeignete Lib, die das für Dich übernimmt.
Frank M. schrieb:> ... könntest Du einen lokalen Mailserver aufsetzen ...
... das werde ich dann wohl machen müssen, falls nicht jemand anderes
noch eine Lösung für mein Problem hat.
Stefan U. schrieb:> Nach den STARTTLS Kommando musst du eine openssl Library verwenden, um> verschlüsselt weiter zu machen.
Und genau das scheint die TLS-Lib nicht zu bieten, auf jeden Fall finde
ich dazu keine Hinweise und auch keine Beispiele im Internet.
> finde ich dazu keine Hinweise und auch keine Beispiele im Internet.
Ich hatte danach mal vor ein par Monaten gesucht und auch keine Lösung
gefunden. Für so etwas ist der Chip wohl doch eine Nummer zu klein.
Eigentlich sollte er ohnehin aus Sicherheitsgründen keinen direkten
Zugang zum Internet haben.
Cyblord -. schrieb:> Muss es denn SMTP sein? Kann man nicht einen Web basierten E-Mail Dienst> nutzen/aufsetzen, welcher via HTTP eine E-Mail entgegennimmt und> versendet?
Naja, HTTP geht ja, aber nun wollte ich SMTP probieren. Das war mein
Kernanliegen. Aber der Umweg über einen Web-Dienst wäre natürlich auch
eine Möglichkeit.
Stefan U. schrieb:> Für so etwas ist der Chip wohl doch eine Nummer zu klein.
Das hätte ich auch vermutet, aber mit MQTT scheint das wohl zu gehen.
Also wenn es nur ein Zeitproblem ist (wie lange der ESP rechnen muss),
soll es mir egal sein.
Cyblord -. schrieb:> Muss es denn SMTP sein?
Sagen wir mal so: SMTP ist sehr sehr einfach - Das "S" in "SMTP" steht
ja auch für "Simple".
SMTP als Plain-Text-Kommunikation ist allemal einfacher als einen
Webrequest mit Formulardaten zusammenzustricken.
Rolf H. schrieb:> Naja, HTTP geht ja, aber nun wollte ich SMTP probieren. Das war mein> Kernanliegen. Aber der Umweg über einen Web-Dienst wäre natürlich auch> eine Möglichkeit.
Die Frage ist, was du erreichen willst. Willst du nur zum testen mal
SMTP machen, dann nimm einen lokalen Server der unverschlüsselt
arbeitet.
> SMTP als Plain-Text-Kommunikation ist allemal einfacher als einen> Webrequest mit Formulardaten zusammenzustricken.
1.) Müssen es keine Formulare sein, wenn man den Dienst selbst aufsetzt
kann man das Datenformat wählen.
2.) Sind Formulare deutlich einfacher als TLS.
3.) Als Plain Text geht es halt nicht, fast alle Sever akzeptieren das
nicht mehr, das ist ja das Problem des TE, also was hilft ihm deine
Aussage nun?
Rolf H. schrieb:> ...ein paar Probleme mit der SDK...
Bevor du dich damit weiter lächerlich machst: "SDK" steht für "Software
Development Kit", ist sächlich, also heißt es "das SDK" und in deinem
Satz eben "... ein paar Probleme mit dem SDK..."
Ich habe auch mal ein wenig recherchiert:
STARTTLS für SMTP (Wandeln einer unsicheren Verbindung in eine
verschlüsselte) wird offenbar bis heute nicht unterstützt.
Was aber geht:
SMTPS mit SSL auf Port 465, siehe:
http://www.esp8266.com/viewtopic.php?f=6&t=6173
Allerdings unterstützt smtp.web.de kein SMTPS:
1
$ telnet smtp.web.de smtps
2
Trying 213.165.67.124...
3
Trying 213.165.67.108...
4
telnet: Unable to connect to remote host: Connection refused
Da musst Du Dir einen anderen Mailprovider suchen, z.B. Google.
Cyblord -. schrieb:> also was hilft ihm deine Aussage nun?
Du hast mich falsch verstanden:
Einen lokalen SMTP-Server, der Plain-Text unterstützt, aufzusetzen ist
eine Sache von 5 Minuten. Warum soll man da einen HTTP-Request mit
eigenem Protokoll erst entwickeln, wenn es dafür einen wirklich simplen
Standard gibt? SMTP ist wirklich so einfach, einfacher geht es nicht.
Es ist allemal einfacher als einen Webserver aufzusetzen und ein eigenes
Protokoll zur Datenübermittlung einer Mail zu erfinden und zu
implementieren.
Wenn es ein lokaler SMTP-Server ist, der lediglich Request von der
ESP-IP annimmt, kann man neben der Verschlüsselung sogar die
Authentifizierung weglassen:
1
helo me
2
mail from: meine-absender-adresse.de
3
rcpt to: empfaenger-adresse.de
4
data
5
Hallo Willi,
6
7
die Temperatur ist heute schon wieder um 5 Grad gestiegen.
8
9
Bye bye
10
.
Fertig.
Der lokale SMTP-Server kann dabei zum Beispiel ein RasPI sein.
Stefan U. schrieb:> Demnach sollte es gehen:> https://hilfe.web.de/pop-imap/imap/imap-serverdaten.html>> Aber auf Port 587.
Gerade mit telnet ausprobiert. Auch hier kommt die Meldung:
530 Must issue a STARTTLS command first
Man muss wohl erst das Kommando STARTTLS absetzen und dann verschlüsselt
SSL vereinbaren. Hier haben wir dann wohl mit dem ESP8266 das
Henne-Ei-Problem.
Unter SMTPS auf Port 465 versteht man auch was anderes. Da liegt direkt
der SSL-Layer unter der Kommunikation. Da kann auch zu Anfang nichts im
Klartext gesendet werden wie bei SMTP in Kombination mit STARTTLS.
> Gerade mit telnet ausprobiert.
Telnet macht keine verschlüsselte Verbindung. Du must openssh verwenden.
bei meinem Webserver geht es so:
TLS:
openssl s_client -connect mailout.stefanfrings.de:465
STARTTLS:
openssl s_client -connect mailout.stefanfrings.de:25 -starttls smtp
Unverschlüsselt:
nc -v mailout.stefanfrings.de 25
TLS klappt aber bei web.de nicht, trotz deren Doku. Komisch.
> es kann also durchaus sein
geht nicht, habe ich gerade probiert. Bei HostEurope geht es aber. Dort
geht es auch unverschlüsselt.
Ich bin dort nur Kunde, das soll keine Schleichwerbung sein.
Stefan U. schrieb:> geht nicht, habe ich gerade probiert. Bei HostEurope geht es aber.
Auf Port 587?
Ich bekomme SMTPS mit smtp.gmail.com auf Port 465 hin, Port 587 klappt
hier auch nicht.
> Auf Port 587?
Ich habe viele Ports durchprobiert (25, 465, 587, 143, 993). Die gehen
alle bei smtp.web.de alle nicht mit openssl. Und den geratenen Host
smtps.wb.de scheint es nicht zu geben.
Stefan U. schrieb:>> Auf Port 587?>> Ich habe viele Ports durchprobiert (25, 465, 587, 143, 993). Die gehen> alle bei smtp.web.de alle nicht mit openssl.
Meine Frage nach Port 587 galt SMTPS über HostEurope, nicht web.de.
Stefan U. schrieb:> Wie gesagt unterstützt Hosteuroe alle drei Varianten. Siehe oben.> Beitrag "Re: ESP8266 & email"
Genau in diesem Beitrag fehlte die Angabe, ob SMTPS hier auch über Port
587 geht. Aber ich habs jetzt selbst getestet. Es geht auch bei
Hosteurope nur über Port 465.
Das heisst, wir haben noch keinen Server gefunden, der sowohl SMTPS als
auch SMTP/STARTTLS über einen Port - nämlich 587 - anbietet. Kann ich
mir auch kaum vorstellen, sowohl Klartext als auch SSL-Verbindung
gleichzeitig von Anfang an ohne jede vorherige Vereinbarung anzubieten.
Ist auch egal, der TO soll einfach SMTPS mit SSL auf Port 465 mithilfe
http://www.esp8266.com/viewtopic.php?f=6&t=6173
ausprobieren.
web.de fällt dafür aus, gmail geht, hosteurope geht. Es gibt sicher noch
ein paar mehr Anbieter.