ich beiss mir die zähne aus. es gibt ja zig treffer bei google zu dem thema und beispiele, aber keines "läuft".
im moment gehe ich den umweg und rufe die email funktion via httprequest von meinem raspberry, auf welchem fhem läuft.
nun hätte es ja charme, wenn der esp8266 direkt emails verschicken könnte.
hat evtl. jemand einen funktionierenden sketch um via smtp/ssl eine mail zu verschicken ?!
das wäre toll...vielen dank im voraus.....
Aktuelles ESPEasy (mega branch) sollte das können.
Radio Eriwan: Im Prinzip ja, aber nur unsicher. SSL und TLS werden nicht unterstützt.
Grüße Jörg
Soweit habe ich es mir noch nicht angesehen, aber dann läßt man die emails eben über einen lokalen mta laufen, der via tls nach außen sendet.
hm...sorry, viele wege führen nach rom, einen davon nutze ich ja bereits- umweg über fhem.
jedoch wollte ich ja innerhalb eines sketches die mails verschicken.
da suche ich etwas funktionierendes.
Ich habe das hier noch gefunden: http://www.esp8266.com/viewtopic.php?f=6&t=6173
Vielleicht hilft es ja weiter.
Grüße Jörg
Ansonsten das hier:
#include <ESP8266WiFi.h>
byte sendEmail();
byte eRcv(WiFiClientSecure client);
void efail(WiFiClientSecure client);
const char* SSID = "meineSSID"; // wifi ssid
const char* PASS = "meinPasswort"; // ssid password
const char* user_base64 = "meinGMailAccount"; //your gmail account in base64 - https://www.base64encode.org/
const char* user_password_base64 = "meinKennwort"; //your gmail password in base64
const char* from_email = "MAIL From:<meinUser@gmail.com>"; //dummy from email
const char* to_email = "RCPT TO:<mein@sendeAccount>"; //your gmail account to sent to
int base64_enc_len(int inputLen);
int base64_encode(char *output, char *input, int inputLen);
void setup()
{
Serial.begin(115200);
delay(10);
Serial.println("");
Serial.print("Connecting To ");
WiFi.begin(SSID, PASS);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (sendEmail()) Serial.println(F("Email sent"));
else Serial.println(F("Email failed"));
}
void loop()
{
//theres nothing here unless you wanted to spam your self
}
byte sendEmail() //sending email function
{
WiFiClientSecure client;
if (client.connect("smtp.gmail.com", 465) == 1) {
Serial.println(F("connected"));
} else {
Serial.println(F("connection failed"));
return 0;
}
if (!eRcv(client)) return 0;
Serial.println(F("--- Sending EHLO")); client.println("EHLO 1.2.3.4"); if (!eRcv(client)) return 0;
Serial.println(F("--- Sending login")); client.println("AUTH LOGIN"); if (!eRcv(client)) return 0;
Serial.println(F("--- Sending User base64")); client.println(user_base64); if (!eRcv(client)) return 0;
Serial.println(F("--- Sending Password base64")); client.println(user_password_base64); if (!eRcv(client)) return 0;
Serial.println(F("--- Sending From")); client.println(from_email); if (!eRcv(client)) return 0;
Serial.println(F("--- Sending To")); client.println(to_email); if (!eRcv(client)) return 0;
Serial.println(F("--- Sending DATA")); client.println(F("DATA")); if (!eRcv(client)) return 0;
client.println(F("Subject: Esp8266 email test\r\n"));
client.println(F("******This is from my ESP8266\n"));
client.println(F("Hello "));
client.println(F("."));
if (!eRcv(client)) return 0;
Serial.println(F("--- Sending QUIT"));
client.println(F("QUIT"));
if (!eRcv(client)) return 0;
client.stop();
Serial.println(F("disconnected"));
return 1;
}
byte eRcv(WiFiClientSecure client)
{
byte respCode;
byte thisByte;
int loopCount = 0;
while (!client.available()) {
delay(1);
loopCount++;
// if nothing received for 10 seconds, timeout
if (loopCount > 10000) {
client.stop();
Serial.println(F("\r\nTimeout"));
return 0;
}
}
respCode = client.peek();
while (client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}
if (respCode >= '4')
{
// efail();
return 0;
}
return 1;
}
void efail(WiFiClientSecure client)
{
byte thisByte = 0;
int loopCount = 0;
client.println(F("QUIT"));
while (!client.available()) {
delay(1);
loopCount++;
// if nothing received for 10 seconds, timeout
if (loopCount > 10000) {
client.stop();
Serial.println(F("\r\nTimeout"));
return;
}
}
while (client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}
client.stop();
Serial.println(F("disconnected"));
}
Geht allerdings nur, wenn man seinen GMail-Account unsicher macht
ja, vielen dank. das hatte ich bereits gesehen. ich hatte nicht geschrieben das ich meinen account- nicht gmail nutzen möchte.
kein problem...dann gehe ich halt weite den umweg über fhem.
Vielleicht solltest Du Deine Anforderungen/Wünsche einfach genauer definieren. Aus den bisher gelieferten Informationen kann man Dir nur allgemein antworten. Da die Frage aber auch sehr wenig mit FHEM zu tun hat, wäre es wahrscheinlich auch schlauer ein passenderes Forum dafür zu suchen...
Also der gepostete Code ist nur eine Implementierung der SMTP Befehle zum versenden einer Mail. Das dürfte mit jeden anderen Mailserver genau so funktionieren, außer da wird sowas gefordert wie pop before smtp, dann scheppert es mit dem Code.
Zitat von: dev0 am 05 April 2017, 13:48:24
Vielleicht solltest Du Deine Anforderungen/Wünsche einfach genauer definieren. Aus den bisher gelieferten Informationen kann man Dir nur allgemein antworten. Da die Frage aber auch sehr wenig mit FHEM zu tun hat, wäre es wahrscheinlich auch schlauer ein passenderes Forum dafür zu suchen...
ähm.... Bastelecke »ESP8266 » hätte ja sein können, da ja hier geballtes know how anwesend ist, jemand das umgesetzt hat. wenig mit fhem, heisst ja nicht gar nicht.....
Zitat von: sbiermann am 05 April 2017, 13:59:41
Also der gepostete Code ist nur eine Implementierung der SMTP Befehle zum versenden einer Mail. Das dürfte mit jeden anderen Mailserver genau so funktionieren, außer da wird sowas gefordert wie pop before smtp, dann scheppert es mit dem Code.
ja- daran scheitert es. ich hätte es wohl mit angeben sollten. ich habe einen 1&1 Account, die machen smtp after pop.
daran beisse ich mir die zähne aus. danke dir aber für deine antwort.
Dann mach doch das gleiche mit Pop... einmal einloggen und anschließend kannste E-Mail senden. POP basiert genau so wie SMTP auch nur auf Textkommandos die man senden kann. Man muss sich nur an das Protokoll halten.
Zitat von: sbiermann am 05 April 2017, 14:40:25
Dann mach doch das gleiche mit Pop... einmal einloggen und anschließend kannste E-Mail senden. POP basiert genau so wie SMTP auch nur auf Textkommandos die man senden kann. Man muss sich nur an das Protokoll halten.
hm....du bist gut......werd' ich in kürze testen......
Hier https://www.koepfer.de/index.php/administratoren/hilfe/17-tipps-und-tricks/konfiguration/19-pop3smtpimaptest findest du eine Anleitung wie es mit Telnet geht. Da siehst du welche Kommandos du brauchst damit es funktioniert.