使用ESP8266 WiFi模块发送电子邮件
文件列表(压缩包大小 3.81K)
免费
概述
ESP8266开发板
ESP-01模块
在本项目中,我将向你展示如何使用ESP8266发送电子邮件。对于本项目,我将使用DFRobot FireBeetle ESP8266 IoT Board。
随着物联网(IoT)的扩展,物联网应用程序的范围从控制设备到监视设备(例如传感器)和发送电子邮件都在不断增长。
通过从ESP8266模块发送电子邮件,你可以知道所监视的任何传感器的状态,或者在发生盗窃或入侵者警报时可以收到紧急电子邮件。所以在这里我将向你展示使用ESP8266 WiFi模块发送电子邮件所需的所有步骤。
如前所述,我将在此项目中使用DFRobot FireBeetle ESP8266开发板发送电子邮件。你可以使用其他的ESP8266模块,我已经用我的ESP-01 ESP8266开发板测试过了,并且工作正常。
DFRobot FireBeetle ESP8266开发板已经具有所有必需的组件,例如MicroUSB端口,3.3V稳压器等。因此,我不需要对开发板进行任何额外的连接。
我需要做的就是将MicroUSB电缆插入端口并将其连接到计算机(确认安装了驱动程序和Arduino IDE)。这也是我在常规ESP-01模块上选择DFRobot FireBeetle ESP8266开发板的主要原因之一。
因此,我建议你阅读以下项目中的说明DFRobot FireBeetle ESP8266板的连接指南:DFRobot FireBeetle ESP8266 WiFi 物联网开发板介绍。
为了从ESP8266模块发送电子邮件,你需要使用SMTP协议。因为需要使用SMTP服务器发送电子邮件,ESP8266将作为SMTP客户端。
我已经尝试过几次Gmail的SMTP设置,以使用ESP8266发送电子邮件,但效果不佳。因此,我决定使用第三方SMTP服务器,并且发现“ SMTP2GO”是可靠的选择。
因此,请访问**SMTP2GO**网站并注册一个免费帐户。创建帐户后,第一步是创建SMTP用户名和SMTP密码。当你确认电子邮件地址并首次登录SMTP2GO时,这就是你需要的信息。
保留用户名,即电子邮件地址,然后使用你自己的选择更改SMTP密码。请注意,这是SMTP密码,不同于SMTP2GO登录密码。
记下两个名称,即SMTP用户名和SMTP密码。
现在,进入SMTP2GO应用程序的仪表板,在左侧的访问栏上,单击“设置”,然后单击“用户”。
在那你可以看到有关SMTP服务器和端口号的信息。通常如下:
记下此信息,因为你需要在代码中使用此数据。
你需要使用ASCII字符集将SMTP用户名和SMTP密码编码为Base64格式。为此,你可以使用Arduino库或名为BASE64ENCODE的网站。
分别输入你的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的串行监视器中。
如果你按照上述所有步骤操作,即可使用ESP8266成功发送电子邮件。
所有需要的文件在下载区均可找到。
via:
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)