2 有用
0 下载

使用ESP8266 WiFi模块发送电子邮件

文件列表(压缩包大小 3.81K)

免费

概述

需要的元件

  • ESP8266开发板

    DFRobot-FireBeetle-ESP8266-Review-FireBeetle
  • ESP-01模块

    80120-c8511fe1af899989

原理及流程

在本项目中,我将向你展示如何使用ESP8266发送电子邮件。对于本项目,我将使用DFRobot FireBeetle ESP8266 IoT Board。

介绍

随着物联网(IoT)的扩展,物联网应用程序的范围从控制设备到监视设备(例如传感器)和发送电子邮件都在不断增长。

通过从ESP8266模块发送电子邮件,你可以知道所监视的任何传感器的状态,或者在发生盗窃或入侵者警报时可以收到紧急电子邮件。所以在这里我将向你展示使用ESP8266 WiFi模块发送电子邮件所需的所有步骤。

ESP8266开发板

如前所述,我将在此项目中使用DFRobot FireBeetle ESP8266开发板发送电子邮件。你可以使用其他的ESP8266模块,我已经用我的ESP-01 ESP8266开发板测试过了,并且工作正常。

DFRobot-FireBeetle-ESP8266-Review-FireBeetle

DFRobot FireBeetle ESP8266开发板已经具有所有必需的组件,例如MicroUSB端口,3.3V稳压器等。因此,我不需要对开发板进行任何额外的连接。

我需要做的就是将MicroUSB电缆插入端口并将其连接到计算机(确认安装了驱动程序和Arduino IDE)。这也是我在常规ESP-01模块上选择DFRobot FireBeetle ESP8266开发板的主要原因之一。

因此,我建议你阅读以下项目中的说明DFRobot FireBeetle ESP8266板的连接指南:DFRobot FireBeetle ESP8266 WiFi 物联网开发板介绍

SMTP服务器设置

为了从ESP8266模块发送电子邮件,你需要使用SMTP协议。因为需要使用SMTP服务器发送电子邮件,ESP8266将作为SMTP客户端。

我已经尝试过几次Gmail的SMTP设置,以使用ESP8266发送电子邮件,但效果不佳。因此,我决定使用第三方SMTP服务器,并且发现“ SMTP2GO”是可靠的选择。

Send-an-Email-using-ESP8266-SMTP2GO-Home

因此,请访问**SMTP2GO**网站并注册一个免费帐户。创建帐户后,第一步是创建SMTP用户名和SMTP密码。当你确认电子邮件地址并首次登录SMTP2GO时,这就是你需要的信息。

保留用户名,即电子邮件地址,然后使用你自己的选择更改SMTP密码。请注意,这是SMTP密码,不同于SMTP2GO登录密码。

记下两个名称,即SMTP用户名和SMTP密码。

现在,进入SMTP2GO应用程序的仪表板,在左侧的访问栏上,单击“设置”,然后单击“用户”。

在那你可以看到有关SMTP服务器和端口号的信息。通常如下:

  • SMTP服务器: mail.smtp2go.com
  • SMTP端口: 2525

Send-an-Email-using-ESP8266-SMTP2GO-Server

记下此信息,因为你需要在代码中使用此数据。

编码用户名和密码

你需要使用ASCII字符集将SMTP用户名和SMTP密码编码为Base64格式。为此,你可以使用Arduino库或名为BASE64ENCODE的网站。

Send-an-Email-using-ESP8266-Base64-Encode

分别输入你的SMTP用户名和密码,并记下编码内容。例如,如果你的电子邮件地址是test@gmail.com,则它将被编码为dGVzdEBnbWFpbC5jb20 =。

并且,如果你的密码是“ testpassword”(不包括引号),它将被编码为dGVzdHBhc3N3b3Jk。

代码

现在,让我向你展示必要的代码,并使用ESP8266发送电子邮件。

#include <ESP8266WiFi.h>
const char* ssid = "SSID"; // Enter the SSID of your WiFi Network.
const char* password = "PASSWORD";// Enter the Password of your WiFi Network.
char server[] = "mail.smtp2go.com"; // The SMTP Server 

WiFiClient espClient;
void setup()
{
  Serial.begin(115200);
  delay(10);
  Serial.println("");
  Serial.println("");
  Serial.print("Connecting To: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print("*");
  }
  Serial.println("");
  Serial.println("WiFi Connected.");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  byte ret = sendEmail();
 }

void loop()
{
  
}

byte sendEmail()
{
  if (espClient.connect(server, 2525) == 1) 
  {
    Serial.println(F("connected"));
  } 
  else 
  {
    Serial.println(F("connection failed"));
    return 0;
  }
  if (!emailResp()) 
    return 0;
  //
  Serial.println(F("Sending EHLO"));
  espClient.println("EHLO www.example.com");
  if (!emailResp()) 
    return 0;
  //
  /*Serial.println(F("Sending TTLS"));
  espClient.println("STARTTLS");
  if (!emailResp()) 
  return 0;*/
  //  
  Serial.println(F("Sending auth login"));
  espClient.println("AUTH LOGIN");
  if (!emailResp()) 
    return 0;
  //  
  Serial.println(F("Sending User"));
  // Change this to your base64, ASCII encoded username
  /*
  For example, the email address test@gmail.com would be encoded as dGVzdEBnbWFpbC5jb20=
  */
  espClient.println("dGVzdEBnbWFpbC5jb20="); //base64, ASCII encoded Username
  if (!emailResp()) 
    return 0;
  //
  Serial.println(F("Sending Password"));
  // change to your base64, ASCII encoded password
  /*
  For example, if your password is "testpassword" (excluding the quotes),
  it would be encoded as dGVzdHBhc3N3b3Jk
  */
  espClient.println("dGVzdHBhc3N3b3Jk");//base64, ASCII encoded Password
  if (!emailResp()) 
    return 0;
  //
  Serial.println(F("Sending From"));
  // change to sender email address
  espClient.println(F("MAIL From: sender@gmail.com"));
  if (!emailResp()) 
    return 0;
  // change to recipient address
  Serial.println(F("Sending To"));
  espClient.println(F("RCPT To: receiver@gmail.com"));
  if (!emailResp()) 
    return 0;
  //
  Serial.println(F("Sending DATA"));
  espClient.println(F("DATA"));
  if (!emailResp()) 
    return 0;
  Serial.println(F("Sending email"));
  // change to recipient address
  espClient.println(F("To:  receiver@gmail.com"));
  // change to your address
  espClient.println(F("From: sender@gmail.com"));
  espClient.println(F("Subject: ESP8266 test e-mail\r\n"));
  espClient.println(F("This is is a test e-mail sent from ESP8266.\n"));
  espClient.println(F("Second line of the test e-mail."));
  espClient.println(F("Third line of the test e-mail."));
  //
  espClient.println(F("."));
  if (!emailResp()) 
    return 0;
  //
  Serial.println(F("Sending QUIT"));
  espClient.println(F("QUIT"));
  if (!emailResp()) 
    return 0;
  //
  espClient.stop();
  Serial.println(F("disconnected"));
  return 1;
}

byte emailResp()
{
  byte responseCode;
  byte readByte;
  int loopCount = 0;

  while (!espClient.available()) 
  {
    delay(1);
    loopCount++;
    // Wait for 20 seconds and if nothing is received, stop.
    if (loopCount > 20000) 
    {
      espClient.stop();
      Serial.println(F("\r\nTimeout"));
      return 0;
    }
  }

  responseCode = espClient.peek();
  while (espClient.available())
  {
    readByte = espClient.read();
    Serial.write(readByte);
  }

  if (responseCode >= '4')
  {
    //  efail();
    return 0;
  }
  return 1;c
}

在代码中,进行必要的更改,例如SSID,WiFi连接的密码,发件人和收件人的电子邮件地址,Base64编码的SMTP用户名和SMTP密码。

代码说明

代码的初始部分很容易用于将ESP8266 WiFi模块连接到Internet。如果连接成功,你将获得一个IP地址。

接下来是发送电子邮件的实际代码。该代码可以分为8个阶段。

阶段1:在阶段1中,你将连接到PORT上的SMTP服务器。使用命令client.connect(SMTP_SERVER,SMTP_PORT)完成此操作。作为响应,你将获得一个220码。

第2阶段:使用EHLO命令(以前称为HELO命令)迎接SMTP服务器。该命令是client.println(“ EHLO www.example.com”);

如果连接成功,你将获得250响应码。

阶段3:阶段3是使用AUTH LOGIN命令授权用户。该命令是client.println(“ AUTH LOGIN”);。你将获得成功的响应334。

阶段4:依次发送编码后的SMTP用户名和密码。命令为client.println(“ Base64,ASCII编码的用户名”); 和client.println(“ Base64,ASCII编码密码”)。如果身份验证成功,你将收到235响应。

阶段5:现在是时候从字符串发送邮件了,你必须使用格式MAIL FROM:<” + String(from)+'>';;输入发件人的电子邮件地址。

该命令是client.println(“邮件来自:sender@gmail.com”);

阶段6:然后使用RCPT TO:<” + String(to)+'>';;格式将rcpt发送到字符串。该命令是client.println(“ RCPT To:receiver@gmail.com”);。

阶段7:发送“ DATA”,然后发送电子邮件的消息正文。这些命令是

client.println(“ DATA”);

client.println(“收件人:receiver@gmail.com”);

client.println(“发件人:sender@gmail.com”);

client.println(“主题:ESP8266测试邮件\ r \ n”);

client.println(“这是从ESP8266发送的测试电子邮件。\ n”);

client.println(“测试电子邮件的第二行。”);

阶段8:最后,以“。”终止邮件 并发送quit命令。

client.println(“。”);

client.println(“ QUIT”);

所有这些命令和响应将显示在Arduino IDE的串行监视器中。

Send-an-Email-using-ESP8266-Output

如果你按照上述所有步骤操作,即可使用ESP8266成功发送电子邮件。

最后

所有需要的文件在下载区均可找到。

via:

https://www.electronicshub.org/send-an-email-using-esp8266/

理工酷提示:

如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈

评论(0)

0/250