* `Sendmail` upgraded to ESP-Mail-Client v3.4.9 from v1.2.0, using BearSSL instead of MbedTLS * Fix compilation on ESP8266 * Fix compilation * fix compilation
213 lines
5.2 KiB
C++
213 lines
5.2 KiB
C++
|
|
/**
|
|
* Created by K. Suwatchai (Mobizt)
|
|
*
|
|
* Email: suwatchai@outlook.com
|
|
*
|
|
* Github: https://github.com/mobizt/ESP-Mail-Client
|
|
*
|
|
* Copyright (c) 2023 mobizt
|
|
*/
|
|
|
|
// This example used TTGO T-A7670 (ESP32 with SIMCom SIMA7670) and TinyGSMClient.
|
|
|
|
/** Note for library update from v2.x.x to v3.x.x.
|
|
*
|
|
* Struct data names changed
|
|
*
|
|
* "ESP_Mail_Session" changes to "Session_Config"
|
|
* "IMAP_Config" changes to "IMAP_Data"
|
|
*
|
|
* Changes in the examples
|
|
*
|
|
* ESP_Mail_Session session;
|
|
* to
|
|
* Session_Config config;
|
|
*
|
|
* IMAP_Config config;
|
|
* to
|
|
* IMAP_Data imap_data;
|
|
*/
|
|
|
|
// To allow TinyGSM library integration, the following macro should be defined in src/ESP_Mail_FS.h or
|
|
// your custom config file src/Custom_ESP_Mail_FS.h.
|
|
// #define TINY_GSM_MODEM_SIM7600
|
|
|
|
#define TINY_GSM_MODEM_SIM7600 // SIMA7670 Compatible with SIM7600 AT instructions
|
|
|
|
// Set serial for debug console (to the Serial Monitor, default speed 115200)
|
|
#define SerialMon Serial
|
|
|
|
// Set serial for AT commands (to the module)
|
|
// Use Hardware Serial on Mega, Leonardo, Micro
|
|
#define SerialAT Serial1
|
|
|
|
// See all AT commands, if wanted
|
|
// #define DUMP_AT_COMMANDS
|
|
|
|
// Define the serial console for debug prints, if needed
|
|
#define TINY_GSM_DEBUG SerialMon
|
|
|
|
#define TINY_GSM_USE_GPRS true
|
|
#define TINY_GSM_USE_WIFI false
|
|
|
|
// set GSM PIN, if any
|
|
#define GSM_PIN ""
|
|
|
|
// Your GPRS credentials, if any
|
|
const char apn[] = "YourAPN";
|
|
const char gprsUser[] = "";
|
|
const char gprsPass[] = "";
|
|
|
|
#define uS_TO_S_FACTOR 1000000ULL // Conversion factor for micro seconds to seconds
|
|
#define TIME_TO_SLEEP 600 // Time ESP32 will go to sleep (in seconds)
|
|
|
|
#define UART_BAUD 115200
|
|
#define PIN_DTR 25
|
|
#define PIN_TX 26
|
|
#define PIN_RX 27
|
|
#define PWR_PIN 4
|
|
#define BAT_ADC 35
|
|
#define BAT_EN 12
|
|
#define PIN_RI 33
|
|
#define PIN_DTR 25
|
|
#define RESET 5
|
|
|
|
#define SD_MISO 2
|
|
#define SD_MOSI 15
|
|
#define SD_SCLK 14
|
|
#define SD_CS 13
|
|
|
|
#include <ESP_Mail_Client.h>
|
|
#include <TinyGsmClient.h>
|
|
|
|
TinyGsm modem(SerialAT);
|
|
|
|
TinyGsmClient gsm_client(modem);
|
|
|
|
#define SMTP_HOST "<host>"
|
|
#define SMTP_PORT esp_mail_smtp_port_587
|
|
#define AUTHOR_EMAIL "<email>"
|
|
#define AUTHOR_PASSWORD "<password>"
|
|
#define RECIPIENT_EMAIL "<recipient email here>"
|
|
|
|
SMTPSession smtp;
|
|
|
|
void smtpCallback(SMTP_Status status);
|
|
|
|
void setup()
|
|
{
|
|
|
|
SerialMon.begin(115200);
|
|
|
|
smtp.debug(1);
|
|
|
|
smtp.callback(smtpCallback);
|
|
|
|
delay(10);
|
|
pinMode(BAT_EN, OUTPUT);
|
|
digitalWrite(BAT_EN, HIGH);
|
|
|
|
// A7670 Reset
|
|
pinMode(RESET, OUTPUT);
|
|
digitalWrite(RESET, LOW);
|
|
delay(100);
|
|
digitalWrite(RESET, HIGH);
|
|
delay(3000);
|
|
digitalWrite(RESET, LOW);
|
|
|
|
pinMode(PWR_PIN, OUTPUT);
|
|
digitalWrite(PWR_PIN, LOW);
|
|
delay(100);
|
|
digitalWrite(PWR_PIN, HIGH);
|
|
delay(1000);
|
|
digitalWrite(PWR_PIN, LOW);
|
|
|
|
DBG("Wait...");
|
|
|
|
delay(3000);
|
|
|
|
SerialAT.begin(UART_BAUD, SERIAL_8N1, PIN_RX, PIN_TX);
|
|
|
|
// Restart takes quite some time
|
|
// To skip it, call init() instead of restart()
|
|
DBG("Initializing modem...");
|
|
if (!modem.init())
|
|
{
|
|
DBG("Failed to restart modem, delaying 10s and retrying");
|
|
return;
|
|
}
|
|
|
|
/*
|
|
2 Automatic
|
|
13 GSM Only
|
|
14 WCDMA Only
|
|
38 LTE Only
|
|
*/
|
|
modem.setNetworkMode(38);
|
|
if (modem.waitResponse(10000L) != 1)
|
|
{
|
|
DBG(" setNetworkMode faill");
|
|
}
|
|
|
|
String name = modem.getModemName();
|
|
DBG("Modem Name:", name);
|
|
|
|
String modemInfo = modem.getModemInfo();
|
|
DBG("Modem Info:", modemInfo);
|
|
|
|
Session_Config config;
|
|
|
|
config.server.host_name = SMTP_HOST;
|
|
config.server.port = SMTP_PORT;
|
|
config.login.email = AUTHOR_EMAIL;
|
|
config.login.password = AUTHOR_PASSWORD;
|
|
config.login.user_domain = F("127.0.0.1");
|
|
|
|
SMTP_Message message;
|
|
|
|
message.sender.name = F("ESP Mail");
|
|
message.sender.email = AUTHOR_EMAIL;
|
|
message.subject = F("Test sending plain text Email using GSM module");
|
|
message.addRecipient(F("Someone"), RECIPIENT_EMAIL);
|
|
|
|
message.text.content = "This is simple plain text message";
|
|
|
|
smtp.setGSMClient(&gsm_client, &modem, GSM_PIN, apn, gprsUser, gprsPass);
|
|
|
|
smtp.connect(&config);
|
|
|
|
if (!MailClient.sendMail(&smtp, &message))
|
|
Serial.println("Error sending Email, " + smtp.errorReason());
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
}
|
|
|
|
void smtpCallback(SMTP_Status status)
|
|
{
|
|
Serial.println(status.info());
|
|
|
|
if (status.success())
|
|
{
|
|
Serial.println("----------------");
|
|
MailClient.printf("Message sent success: %d\n", status.completedCount());
|
|
MailClient.printf("Message sent failed: %d\n", status.failedCount());
|
|
Serial.println("----------------\n");
|
|
|
|
for (size_t i = 0; i < smtp.sendingResult.size(); i++)
|
|
{
|
|
SMTP_Result result = smtp.sendingResult.getItem(i);
|
|
|
|
MailClient.printf("Message No: %d\n", i + 1);
|
|
MailClient.printf("Status: %s\n", result.completed ? "success" : "failed");
|
|
MailClient.printf("Date/Time: %s\n", MailClient.Time.getDateTimeString(result.timestamp, "%B %d, %Y %H:%M:%S").c_str());
|
|
MailClient.printf("Recipient: %s\n", result.recipients.c_str());
|
|
MailClient.printf("Subject: %s\n", result.subject.c_str());
|
|
}
|
|
Serial.println("----------------\n");
|
|
|
|
smtp.sendingResult.clear();
|
|
}
|
|
} |