Forum: Mikrocontroller und Digitale Elektronik ESP8266 & email


von Rolf H. (b0d0)


Lesenswert?

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
IP unavaiable, Waiting...
2
Config done, IP is 192.168.821.123
3
S: 220 web.de (mrweb004) Nemesis ESMTP Service ready
4
5
C:EHLO
6
S: 250-web.de Hello 192.168.821.123 [77.180.143.921]
7
S: 250-AUTH LOGIN PLAIN
8
S: 250-SIZE 141557760
9
S: 250 STARTTLS
10
11
C: STARTTLS
12
S: 220 OK
13
14
C: AUTH LOGIN
15
S: 21,3,3,0,2,2,10 (byte sequence)
16
connection closed by server

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?

: Bearbeitet durch User
von Chris (Gast)


Lesenswert?

Ich würde an deiner Stelle mal den Code von einer der zig-tausend freien 
Bibliotheken anschauen :-)

von Benjamin S. (recycler)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

Rolf H. schrieb:
> S: 250 STARTTLS
>
> C: STARTTLS
> S: 220 OK

Ich frage mich ob du verstanden hast, was STARTTLS hier bedeutet.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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

: Bearbeitet durch Moderator
von Rolf H. (b0d0)


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Rolf H. (b0d0)


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Nach den STARTTLS Kommando musst du eine openssl Library verwenden, um 
verschlüsselt weiter zu machen.

von Rolf H. (b0d0)


Lesenswert?

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.

von Rolf H. (b0d0)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> 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.

von Cyblord -. (cyblord)


Lesenswert?

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?

von Rolf H. (b0d0)


Lesenswert?

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.

von Rolf H. (b0d0)


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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?

: Bearbeitet durch User
von Mike99 (Gast)


Lesenswert?

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..."

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

> Allerdings unterstützt smtp.web.de kein SMTPS:

Demnach sollte es gehen:
https://hilfe.web.de/pop-imap/imap/imap-serverdaten.html

Aber auf Port 587.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

> 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.

Beitrag #5203790 wurde vom Autor gelöscht.
von Stefan F. (Gast)


Lesenswert?

> 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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> 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.

von Chris (Gast)


Lesenswert?

Vielleicht kannst du das hier implementieren?
https://tls.mbed.org/download

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Wie gesagt unterstützt Hosteuroe alle drei Varianten. Siehe oben. 
Beitrag "Re: ESP8266 & email"

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> Genau in diesem Beitrag fehlte die Angabe,
> ob SMTPS hier auch über Port 587 geht.

Zitat:
> openssl s_client -connect mailout.stefanfrings.de:465

von Stefan F. (Gast)


Lesenswert?

Bei Hosteurope:
1
Stefan@STEFANSPC2 ~
2
$ echo -en 'wp1022206-stefan\0wp1022206-stefan\0xxxxxxxx' | base64
3
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==
4
5
Stefan@STEFANSPC2 ~
6
$ openssl s_client -connect mailout.stefanfrings.de:465
7
CONNECTED(00000003)
8
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
9
verify return:1
10
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
11
verify return:1
12
depth=0 C = DE, ST = Nordrhein-Westfalen, L = Koeln, O = Host Europe GmbH, CN = *.webpack.hosteurope.de
13
verify return:1
14
---
15
Certificate chain
16
 0 s:/C=DE/ST=Nordrhein-Westfalen/L=Koeln/O=Host Europe GmbH/CN=*.webpack.hosteurope.de
17
   i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2
18
 1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2
19
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
20
---
21
Server certificate
22
-----BEGIN CERTIFICATE-----
23
MIIGOTCCBSGgAwIBAgISESGzwxw1uOE+XLB8L/r+adtEMA0GCSqGSIb3DQEBCwUA
24
...
25
7BKKyd2QSgsqoBLBCNemg+tMit2Yne+LAZlXMIyUE9JoPIycRM1Tw9c2FXiJkxgZ
26
HGt+L5MYtzcfMEPoWw==
27
-----END CERTIFICATE-----
28
subject=/C=DE/ST=Nordrhein-Westfalen/L=Koeln/O=Host Europe GmbH/CN=*.webpack.hosteurope.de
29
issuer=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2
30
---
31
No client certificate CA names sent
32
Peer signing digest: SHA512
33
Server Temp Key: ECDH, P-256, 256 bits
34
---
35
SSL handshake has read 3238 bytes and written 434 bytes
36
---
37
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
38
Server public key is 2048 bit
39
Secure Renegotiation IS supported
40
Compression: NONE
41
Expansion: NONE
42
No ALPN negotiated
43
SSL-Session:
44
    Protocol  : TLSv1.2
45
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
46
    Session-ID: B8A6E7B3FF75AD164B1C12B2E8291B50550993FC07999A0642367D913FE4B0C3
47
    Session-ID-ctx:
48
    Master-Key: B362BE8877A987F8E5682C01EF66A406F802FCD2A19AD222FC4988A08E979EEA4C17E328AEC27F28CF900370240CC51D
49
    Key-Arg   : None
50
    PSK identity: None
51
    PSK identity hint: None
52
    SRP username: None
53
    Start Time: 1510241234
54
    Timeout   : 300 (sec)
55
    Verify return code: 0 (ok)
56
---
57
220 wp039.webpack.hosteurope.de ESMTP Host Europe Mail Service Thu, 09 Nov 2017 16:27:11 +0100
58
EHLO stefan
59
250-wp039.webpack.hosteurope.de Hello ip-176-199-152-217.hsi06.unitymediagroup.de [176.199.152.217]
60
250-SIZE 36700160
61
250-8BITMIME
62
250-PIPELINING
63
250-AUTH PLAIN LOGIN
64
250 HELP
65
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==
66
235 Authentication succeeded

von Rolf H. (b0d0)


Lesenswert?

Hallo Frank, hallo Stefan,

danke für Eure Mühe. Ich versuche morgen mal was auszuprobieren und 
schreib das dann hier rein.

Bis dann ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.