Update: 2020-05-31

Download Sketch

Esp8266 & Esp32 Html Mail Example

Esp_Html_Mail.ino

// ****************************************************************
// Sketch E-mail senden (Antwort wird nicht blockierend ausgewertet)
// created: Jens Fleischer, 2018-04-29
// last mod: Jens Fleischer, 2020-05-31
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: Esp8266, ESP32
// Software: Esp8266 Arduino Core 2.4.2 / 2.5.2 / 2.6.3 / 2.7.1
// Software: Esp32 Arduino Core 1.0.0 - 1.0.4
// 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>

const char* ssid = "Netzwerkname";             // << kann bis zu 32 Zeichen haben
const char* password = "PasswortvomNetzwerk";  // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen

uint32_t broadcastingTime;
bool response = true, error = false;
#ifdef ESP8266
const char* SENDER = {"ESP8266"};
#else
const char* SENDER = {"ESP32"};
#endif
const char* USER = "Username von smtpgo";                    // https://www.smtp2go.com
const char* MAIL_PASSWORD = "Passwort von smtpgo";           // https://www.smtp2go.com
const char* FIRST_RECIPIENT = "Emfänger Mail Adresse";       // Mailadresse des Empfängers eintragen
const char* SECOND_RECIPIENT = "";                           // Mailadresse des zweiten Empfängers eintragen falls erforderlich
const char* SUBJECT = "Wichtige Mitteilung! Von zu Hause!";  // Betreffzeile
const char* MAIL_SERVER = "mail.smtp2go.com";
const uint16_t PORT = 2525;                                  // ports 25, 2525, 8025, 587, 80

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);
    Serial.printf(" %i sek\n", i);
    if (++i > 19) {
      Serial.print("\nVerbindung zum AP fehlgeschlagen !\n\n");
      ESP.restart();
    }
  }
  Serial.println("\nVerbunden mit: " + WiFi.SSID());
  Serial.println("Esp IP: " + WiFi.localIP().toString());
#ifdef ESP8266
  WiFi.hostname("Mail Client");
#else
  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(MAIL_SERVER, PORT)) {
    Serial.printf("Verbindung  mit Server: %s über Port: %d fehlgeschlagen\n", MAIL_SERVER, PORT);
  }
  else {
#ifdef ESP8266
    String espHostname = WiFi.hostname();
#else
    String espHostname = WiFi.getHostname();
#endif
    response = false;
    broadcastingTime = millis();
    Serial.printf("Verbunden mit Server: %s über Port: %d\n", MAIL_SERVER, PORT);
    client.printf("EHLO\nAUTH LOGIN\n%s\n%s\nMAIL From: <RbL@rbl.io>\nRCPT To: <%s>\nRCPT TO: <%s>\nDATA\nTo: <%s>\n",
                  base64::encode(USER).c_str(), base64::encode(MAIL_PASSWORD).c_str(), FIRST_RECIPIENT, SECOND_RECIPIENT, FIRST_RECIPIENT);
    if (SECOND_RECIPIENT != "") client.printf("Cc: <%s>\n", SECOND_RECIPIENT);
    client.printf("From: %s <RbL@rbl.io>\nSubject:%s %s\nContent-Type: text/html;charset=utf-8\n", SENDER, SENDER, SUBJECT);
    // Inhalt der Htnl E-Mail
    client.printf(R"(<html><body><table style="margin: auto; text-align: center;"><tr><td style="padding: 10px;"><h2>Hallo!</h2><h3>Der %s %s meldet.</h3></td>
</tr><tr><td style="padding: 10px; background: wheat;"><div>WiFi Emfangsstärke:<b> %d dBm</b></div><i>Der Esp freut sich dir mitteilen zu können, das alles in Ordnung ist!</i>
</td></tr></table></body></html>)", SENDER, espHostname.c_str(), WiFi.RSSI());
    client.printf("\n.\nQUIT");
  }
}

void readResponse() {
  if (millis() - broadcastingTime > 2000) {
    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()) {
    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.printf("Antwort vom Mailserver in: %4ld ms\n", millis() - broadcastingTime); // zeigt die Zeit bis zur Antwort --> passe den Timeout entsprechend an
      Serial.println("******* Mail gesendet *******");
      client.stop();
      error = false;
      response = true;
    }
  }
}
Kommentar eintragen

*