Update: 2019-08-24

Der Sketch zum E-Mail senden.

EspEmail.ino

// ****************************************************************
// Sketch E-mail senden (Antwort nicht blockierend)
// created: Jens Fleischer, 2018-04-29
// last mod: Jens Fleischer, 2019-08-24
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: Esp8266, ESP32
// Software: Esp8266 Arduino Core 2.4.2 / 2.5.0 / 2.5.2
// Software: Esp32 Arduino Core 1.0.0
// Software: https://smtp2go.com/
/******************************************************************
  Copyright (c) 2018 Jens Fleischer. All rights reserved.

  This file is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  This file is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
*******************************************************************/
#ifdef ESP8266
#include <ESP8266WiFi.h>
#else
#include <WiFi.h>
#endif
#include <Base64.h>
#include <ArduinoOTA.h>
uint32_t sendezeit;
bool response = true, error = false;
const char* mailServer = "mail.smtp2go.com";
const uint16_t port = 2525;     // ports 25, 2525, 8025, 587, 80
#ifdef ESP8266
const char* sender = "ESP8266";
#else
const char* sender = "ESP32";
#endif
const char* betreff = "Wichtige Mitteilung! Von zu Hause!";
const char* ssid = "Netzwerkname";            // << kann bis zu 32 Zeichen haben
const char* password = "PasswortvomNetzwerk"; // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen
const char* user = "deinUsername";            // https://www.smtp2go.com/
const char* mailpass = "deinPasswort";        // https://www.smtp2go.com/
const char* emfaenger = "deineMailAdresse";   // Adresse zu der gesendet werden soll

WiFiClient client;

void setup() {
  Serial.begin(115200);
  Serial.print("\n");

  byte i = 0;
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000); i++;
    Serial.printf(" %i sek\n", i);
    if (i > 9) {
      Serial.print("\nVerbindung zum AP fehlgeschlagen !\n\n");
      ESP.restart();
    }
  }
  Serial.println("\nVerbunden mit: " + WiFi.SSID());
#ifdef ESP8266
  Serial.println("Esp8266 IP: " + WiFi.localIP().toString());
  WiFi.hostname("Mail Client");
#else
  Serial.println("Esp32 IP: " + WiFi.localIP().toString());
  WiFi.setHostname("Mail Client");
#endif

  sendmails();
  ArduinoOTA.begin();
}

void loop() {
  ArduinoOTA.handle();
  if (!response) {
    readResponse();
  }
}

void sendmails() {    // SMTP2GO Free hat ein Limit von 25 E-Mails pro Stunde / 1.000 E-Mails pro Monat
  if (!client.connect(mailServer, port)) {
    Serial.printf("Verbindung  mit Server: %s über Port: %d fehlgeschlagen\n", mailServer, port);
  }
  else {
    response = false;
    sendezeit = millis();
    Serial.printf("Verbunden mit Server: %s über Port: %d\n", mailServer, port);
    client.printf("EHLO\nAUTH LOGIN\n%s\n%s\nMAIL From: <RbL@rbl.io>\nRCPT To: <%s>\nDATA\n", base64::encode(user).c_str(), base64::encode(mailpass).c_str(), emfaenger);
    client.printf("To: <%s>\nFrom: %s <RbL@rbl.io>\nSubject:%s %s\n", emfaenger, sender, sender, betreff);
#ifdef ESP8266
    client.printf("Hallo!\nDer %s %s meldet.\n", sender, WiFi.hostname().c_str());
#else
    client.printf("Hallo!\nDer %s %s meldet.\n", sender, WiFi.getHostname());
#endif
    client.printf("Emfangsstaerke: %d dBm\n", WiFi.RSSI());   // Inhalt der E-Mail
    client.printf("Der Esp freut sich dir mitteilen zu können, das alles in Ordnung ist!\n");   // Inhalt der E-Mail
    client.println(".\nQUIT");
  }
}

void readResponse() {
  if (millis() - sendezeit > 3000) {
    Serial.println("Mail Client Timeout !");
    response = true;
    if (!error) {
      error = true;
      sendmails();      // die Mail wird bei Zeitüberschreitung ein zweites mal gesendet
    }
	response = true;
    return;
  }
  if (client.available()) {
    Serial.printf("Antwort vom Mailserver in: %4ld ms\n", millis() - sendezeit);
    for (uint8_t i = 0; i < 18; i++) {
      String line = client.readStringUntil('\n');
	  //Serial.println(line);  // Zur Anzeige der Antwort von smtpgo einkommentieren 
      if (line.startsWith("250 OK id=")) {    // wenn Zeile der Antwort mit "250 OK id=" beginnt war das Senden erfolgreich
        Serial.println("******* Mail gesendet *******");
        client.stop();
        error = false;
        response = true;
      }
    }
  }
}

5 Kommentare - Kommentar eintragen
Martin ✪ ✪ ✪ 22.04.2019
Hallo,

einfach super!
Es hat alles auf Anhieb geklappt.
Von Interesse ist nun für mich noch, wie ich den Script erweitern muss, um eine Datei (SPIFFS) im Anhang der eMail zu versenden.

Wäre sehr dankbar für eine Info.

Antwort:
Das ist sicher möglich. Momentan für mich aber, auch aus Zeitmangel, uninteressant. Es gibt Beispiele im Netz in verschiedenen Programmiersprachen für E-Mail mit Anhang, das müsste man für den Esp anpassen. Ich selbst nutze ausschließlich Push Nachrichten vom Esp auf das Smartphone.

Gruß Fips
freique ✪ ✪ ✪ 06.08.2019
Wow Das ist echt Krass Nur eine Frage: Was ist eigentlich wenn ich e-mails mit dem esp32 empfangen möchte?!

Antwort: Mir ist nicht bekannt ob es theoretisch möglich wäre einen Mailserver auf dem Esp... aufzusetzen. Es gibt ausreichend Möglichkeiten den Esp... von Hand oder von einem anderem Esp... etwas zu senden.

Gruß Fips
Andy ✪ ✪ ✪ 21.08.2019
Hallo,

habe den Sketch kompiliert und verbindet sich mit WLAN.
Beim senden der Mail via Web.de SMTP kommt aber nur ein Timeout.

was mache ich da falsch?
Wäre über Hilfe sehr dankbar.
Gruß, ANdy

Antwort: via smtp2go.com nicht web.de

Gruß Fips
Andy ✪ ✪ ✪ 21.08.2019
Hallo,

coller Beitrag. Wütrde ich auch gern verwenden.
Geht nur leider nicht. Bei mir kommt immer Timeout.
Gesendet wird nichts.
Habe meine Daten von SMTP2Go korrekt eingetragen.
Wo ist das Problem?
Gruß, ANdy

Antwort: Ich benutze es eigentlich nicht, eine Push Nachricht auf's Smartphone ist kompfortabler! Ich habe es gestern extra mal mit meinen Zugangsdaten getestet, was soll ich sagen, es Funktioniert immer noch.
Das Problem ist zunächst, welcher "Esp" welche "Arduino core Version" verwendest du?

Gruß Fips
Andy ✪ ✪ ✪ 26.08.2019
Hallo Fips,

Was ist eine ARDUINO core Version? keine Ahnung. Bei mir steht ARDUINO 1.8.9. Ich benutze einen ESP8266 und beim Compilieren habe "NodeMCU 1.0 (ESP12E)" ausgewählt.
Eben noch mal versucht mit smtp2go:
Verbunden mit: 010-01
Esp8266 IP: 192.168.2.113
Verbunden mit Server: mail.smtp2go.com über Port: 2525
53
98
Mail Client Timeout !
Das wars...

Gruß, Andy

Antwort:
Mit dem Esp8266 habe ich es jetzt mit Arduino Core 2.4.2 / 2.5.0 / 2.5.2 getestet. Läuft!
Lass dir doch mal mit "Serial.println(line);" die Antwort von "smtp2go" ausgeben.

Gruß Fips
Kommentar eintragen

*