ESP8266 & email

OP #5203486
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?
Moderator Persönliche Seite #5203564
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.
OP #5203654
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.
Moderator Persönliche Seite #5203674
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.
Gast #5203700
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.
#5203718
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?
Moderator Persönliche Seite #5203736
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.
Moderator Persönliche Seite #5203749
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.
Moderator Persönliche Seite #5203769
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.
Gast #5203788
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 von einem Moderator gelöscht.
Gast #5203831
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.
Moderator Persönliche Seite #5203872
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.
Gast #5203910
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren