Zuletzt geƤndert: 2018-05-10

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, 2018-05-06
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: Esp8266, ESP32
// 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 > 30000) {
    Serial.println("Mail Client Timeout !");
    response = true;
    if (!error) {
      error = true;
      sendmails();      // die Mail wird bei Zeitüberschreitung ein zweites mal gesendet
    }
    return;
  }
  if (client.available()) {
    Serial.println(millis() - sendezeit);
    for (uint8_t i = 1; i < 18; i++) {
      String line = client.readStringUntil('\n');
      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;
      }
    }
  }
}

ESP Startseite