Zuletzt geändert: 2018-12-10

Esp8266 E-Mail als Arduino Tab.

Mail.ino

// ****************************************************************
// Sketch E-mail senden Modular(Tab) Antwort nicht blockierend
// created: Jens Fleischer, 2018-07-02
// last mod: Jens Fleischer, 2018-12-10
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: ESP8266
// Software: https://base64encode.org/ , 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.
*******************************************************************/
// Diese Version von Mail sollte als Tab eingebunden werden.
// #include <ESP8266WebServer.h> oder #include <ESP8266WiFi.h> muss im Haupttab aufgerufen werden
// Die Übergabe der Nachricht an "sendmails((string oder String-Object);" erfolgt als char oder String.
// Zum auswerten der Antwort vom Mailserver muss "emailResponse();" im loop(); stehen.
/**************************************************************************************/

WiFiClient mailclient;
uint32_t mailsendezeit;
bool mailresponse = true, mailerror = false;

void sendmails(const String &message) {    // SMTP2GO Free hat ein Limit von 25 E-Mails pro Stunde / 1.000 E-Mails pro Monat
  const char* user = "base64 encode deinUsername";            // https://www.smtp2go.com/ https://www.base64encode.org/
  const char* password = "base64 encode deinPasswort";        // https://www.smtp2go.com/ https://www.base64encode.org/
  const char* emfaenger = "deineMailAdresse";   // Adresse zu der gesendet werden soll
  const char* betreff = "Wichtige Mitteilung! Von zu Hause!";
  const char* sender = "ESP8266";
  const uint16_t  port = 2525;
  const char* mailServer = "mail.smtp2go.com"; // https://www.smtp2go.com/

  if (!mailclient.connect(mailServer, port)) {
    Serial.printf("Verbindung zu %s fehlgeschlagen.\n", mailServer);
  }
  else {
    mailresponse = false;
    mailsendezeit = millis();
    mailclient.printf("EHLO\nAUTH LOGIN\n%s\n%s\nMAIL From: <RbL@rbl.io>\nRCPT To: <%s>\nDATA\n", user, password, emfaenger);
    mailclient.printf("To: <%s>\nFrom: %s <RbL@rbl.io>\nSubject: %s %s\n", emfaenger, sender, sender, betreff);
    mailclient.printf("Hallo!\nDer %s %s meldet.\n%s\n.\nQUIT\n", sender, WiFi.hostname().c_str(), message.c_str());
  }
}

void emailResponse() {
  if (!mailresponse) {
    if (millis() - mailsendezeit > 3000) {
      Serial.printf("Mail mailclient Timeout !\n");
      if (!mailerror) {
        mailerror = true;
        sendmails("Fehler beim Mail versenden.");    // Bei Zeitüberschreitung wird eine Zweite Mail gesendet
      }
      return;
    }
    if (mailclient.available()) {
      for (uint8_t i = 0; i < 18; i++) {
        String line = mailclient.readStringUntil('\n');
        if (line.startsWith("250 OK id=")) {    // wenn Zeile der Antwort mit "250 OK id=" beginnt war das Senden erfolgreich
          Serial.printf("E-Mail gesendet.\nAntwort vom Mailserver in: %4ld ms\n", millis() - mailsendezeit);
          mailclient.stop();
          mailerror = false;
          mailresponse = true;
        }
      }
    }
  }
}
  

Der Aufruf zum senden von E-Mails kann aus jedem beliebigen Programmteil erfolgen.
Du kannst sendmails() überall in deinem Sketch einbinden.

Achtung!
SMTP2GO Free hat ein Limit von 25 E-Mails pro Stunde / 1.000 E-Mails pro Monat.
Deshalb die Funktion "sendmails();" niemals unlimitiert aufrufen.

Beispiele



******************** Text senden *********************

sendmails("Es hat an der Tür geklingelt");



*************** Text & Variable senden ***************

char pooltemperatur;
  
sendmails("Temperatur Pool: " + (String)pooltemperatur)



******* Text senden falls Bedingung erfüllt ist*******

static bool freigabe = true;

if (freigabe && Luftfeuchte > 70) {
  sendmails("Oma muss lüften ")
  freigabe = !freigabe;
}
if (!freigabe && Luftfeuchte < 65) {
  freigabe = !freigabe;
}



Zurück