Hallo zusammen ich habe folgende Herausvorderung. Ich bin ein Honigverkaufsautomat am programmieren und ich möchte wenn ein Glas verkauft wird eine Meldung über mail zu bekommen.
Ich verwende ein Arduino MEGA2560 Wifi . Die Verbindung in WLAN funktioniert. Nach dem Verkauf verbindet sich mit dem smtp server und nach dem senden der EHLO Befehl geht in Error.
Über Telnet habe getestet und funktioniert.
250-PIPELINING
250-SIZE 33554432
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 CHUNKING
AUTH LOGIN
334 VXNlcm5hbWU6
SMTP_USER_B64
334 UGFzc3dvcmQ6
SMTP_PASS_B64
235 2.7.0 Authentication successful
MAIL FROM:***********@arcor.de
250 2.1.0 Ok
RCPT TO:************@yahoo.de
250 2.1.5 Ok
DATA
354 End data with .
Subject: Glasverkauf Slot 3
From: *************@arcor.de
To: **************@yahoo.de
Das Glas in Slot 3 wurde verkauft.
.
250 2.0.0 Ok: queued as 4Z5N8j3299z9rw8
quit
221 2.0.0 Bye
Fogende Einstellungen habe für SMTP:
// ===== SMTP Einstellungen =====k
//-------------------arcor-----------------------
#define SMTP_SERVER "smtp.vodafone.de"
#define SMTP_PORT 587
//#define SMTP_USER "********@arcor.de" // Deine E-Mail-Adresse
//#define SMTP_PASS "*******" // Dein Passwort (wird in Base64 gesendet)
#define SMTP_USER_B64 "****************" //
#define SMTP_PASS_B64 "**********" // Base64 deines Passworts
#define DEST_EMAIL "************@yahoo.de" // Zieladresse (wo die Mail ankommen soll)
und hier ist meine Send Routine
void sendSMTPEmail(int slot) {
Serial.println("Sende SMTP Email...");
// 1. Verbindung zum SMTP-Server auf Port 587 aufbauen (ohne SSL!)
String cipstart = "AT+CIPSTART=\"TCP\",\"" + String(SMTP_SERVER) + "\",587";
espSerial.println(cipstart);
delay(4000);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 2. EHLO senden (wichtig für SMTP)
espSerial.println("EHLO esp8266\r\n");
delay(4000);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 3. STARTTLS aktivieren (jetzt wird verschlüsselt!)
espSerial.println("STARTTLS\r\n");
delay(4000);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 4. EHLO nochmal senden, weil STARTTLS die Verbindung neu startet
espSerial.println("EHLO esp8266\r\n");
delay(4000);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 5. AUTH LOGIN initiieren
espSerial.println("AUTH LOGIN\r\n");
delay(3500);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 6. Base64-Benutzername senden
espSerial.println(String(SMTP_USER_B64) + "\r\n");
delay(1500);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 7. Base64-Passwort senden
espSerial.println(String(SMTP_PASS_B64) + "\r\n");
delay(1500);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 8. MAIL FROM-Befehl
String mailFrom = "MAIL FROM:<" + String(SMTP_USER_B64) + ">\r\n";
espSerial.println(mailFrom);
delay(1500);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 9. RCPT TO-Befehl (Empfänger-Adresse)
String rcptTo = "RCPT TO:<" + String(DEST_EMAIL) + ">\r\n";
espSerial.println(rcptTo);
delay(1500);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 10. DATA-Befehl – Beginn der Nachricht
espSerial.println("DATA\r\n");
delay(1500);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 11. Email-Inhalt senden
String emailContent = "";
emailContent += "Subject: Glasverkauf Slot " + String(slot) + "\r\n";
emailContent += "From: " + String(SMTP_USER_B64) + "\r\n";
emailContent += "To: " + String(DEST_EMAIL) + "\r\n";
emailContent += "\r\n"; // Leerzeile zwischen Header und Body
emailContent += "Es wurde ein Glas im Slot " + String(slot) + " verkauft.\r\n";
emailContent += "\r\n.\r\n"; // Ende der DATA-Sektion
espSerial.print(emailContent);
delay(3000);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
// 12. QUIT-Befehl senden und Verbindung schließen
espSerial.println("QUIT\r\n");
delay(1500);
while (espSerial.available()) {
Serial.println(espSerial.readString());
}
espSerial.println("AT+CIPCLOSE\r\n");
delay(500);
Serial.println("SMTP Email Request gesendet.");
}
und hier ist die Ausgabe aus den seriellen Monitor. Nach den EHLO Befehl geht in Error.
:40:23.906 -> Münzwert erkannt: 1.00 Euro
14:40:28.290 -> Sende SMTP Email...
14:40:33.328 -> AT+CIPSTART="TCP","smtp.vodafone.de",587
14:40:33.328 -> CONNECT
14:40:33.328 ->
14:40:33.328 -> OK
14:40:33.328 ->
14:40:33.328 -> +IP
14:40:38.284 -> EHLO esp8266
14:40:38.284 -> ERROR
14:40:38.284 ->
14:40:38.284 -> ERROR
14:40:38.325 ->
14:40:43.329 -> STARTTLS
14:40:43.329 -> ERROR
14:40:43.329 ->
14:40:43.329 -> ERROR
14:40:43.329 ->
14:40:48.307 -> EHLO esp8266
14:40:48.307 -> ERROR
14:40:48.307 ->
14:40:48.329 -> ERROR
14:40:48.329 ->
14:40:52.789 -> AUTH LOGIN
14:40:52.789 -> ERROR
14:40:52.789 ->
14:40:52.789 -> ERROR
14:40:52.789 ->
14:40:55.294 -> ****************** SMTP_USER_B64
14:40:55.329 -> ERROR
14:40:55.329 ->
14:40:55.329 -> ERROR
14:40:55.329 ->
14:40:57.797 -> *************** SMTP_PASS_B64
14:40:57.797 -> ERROR
14:40:57.797 ->
14:40:57.797 -> ERROR
14:40:57.837 ->
14:41:00.325 -> MAIL FROM:<*******************>
14:41:00.325 -> ERROR
14:41:00.325 ->
14:41:00.325 -> ER
14:41:02.828 -> RCPT TO:*************@yahoo.de
14:41:02.828 -> ERROR
14:41:02.828 ->
14:41:02.828 -> ERROR
14:41:02.828 ->
14:41:05.316 -> DATA
14:41:05.316 ->
14:41:05.316 -> busy p...
14:41:05.316 ->
14:41:05.316 -> ERROR
14:41:05.316 ->
14:41:09.310 -> Subject: Glasverkauf Slot 7
14:41:09.310 -> ERROR
14:41:09.343 -> From: *******************
14:41:11.837 -> QUIT
14:41:11.837 -> ERROR
14:41:11.837 ->
14:41:11.837 -> ERROR
14:41:11.837 ->
14:41:12.306 -> SMTP Email Request gesendet.
Hat jemand eine Idee was ich falsch mache?
Gruß......Eddie