ESP8266-Arduino网络编程实例-发送邮件(基于SMTP)

发送邮件(基于SMTP)

本文将演示如何使用ESP8266发送邮件。实例中将使用SMTP(Simple Mail Transfer Protocol)协议通过QQ邮箱向指定邮箱发送邮件。

1、设置QQ邮箱第三方服务

1)第一步:注册一个QQ邮箱
2)第二步:开启QQ邮箱的第三方服务

在这里插入图片描述

1、硬件准备

  • ESP8266 NodeMCU开发板一块
  • 数据线一条

2、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

3、代码实现

本次使用到如下开源库:

示例代码如下:

1)导入依赖头文件

1
2
3
4
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP\_Mail\_Client.h>

2)WiFi连接设置

1
2
3
#define WIFI\_SSID "\*\*\*\*\*"
#define WIFI\_PWD "\*\*\*\*\*"

3)邮件授权设置

1
2
3
4
5
6
7
8
9
#define SMTP\_HOST "smtp.qq.com"
#define SMTP\_PORT 587

#define AUTHOR\_EMAIL "发送邮件的邮箱地址"
#define AUTHOR\_PASSWORD "第三方服务授权码"

// 接收邮件邮箱地址
#define RECIPIENT\_EMAIL "\*\*\*\*\*"

4)创建SMTP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SMTPSession smtp;

// 邮件发送回调
void smtpCallback(SMTP_Status status){
/\* 输出状态信息 \*/
Serial.println(status.info());

/\* 打印发送结果 \*/
if (status.success()){
Serial.println("----------------");
ESP\_MAIL\_PRINTF("Message sent success: %d\n", status.completedCount());
ESP\_MAIL\_PRINTF("Message sent failled: %d\n", status.failedCount());
Serial.println("----------------\n");
struct tm dt;

for (size\_t i = 0; i < smtp.sendingResult.size(); i++){
/\* Get the result item \*/
SMTP_Result result = smtp.sendingResult.getItem(i);
time\_t ts = (time\_t)result.timestamp;
localtime\_r(&ts, &dt);

ESP\_MAIL\_PRINTF("Message No: %d\n", i + 1);
ESP\_MAIL\_PRINTF("Status: %s\n", result.completed ? "success" : "failed");
ESP\_MAIL\_PRINTF("Date/Time: %d/%d/%d %d:%d:%d\n", dt.tm_year + 1900, dt.tm_mon + 1, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec);
ESP\_MAIL\_PRINTF("Recipient: %s\n", result.recipients.c\_str());
ESP\_MAIL\_PRINTF("Subject: %s\n", result.subject.c\_str());
}
Serial.println("----------------\n");
}
}

5)初始化SMTP并发送邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
void setup(){
// 初始化串口
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to AP");

// 连接WiFi
WiFi.begin(WIFI_SSID, WIFI_PWD);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(200);
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println();

// 设置SMTP会话为调试模式
smtp.debug(1);

/\* 设置回调函数 \*/
smtp.callback(smtpCallback);

/\* 创建一个SMTP会话 \*/
ESP_Mail_Session session;

/\* SMTP会话配置 \*/
session.server.host_name = SMTP_HOST;
session.server.port = SMTP_PORT;
session.login.email = AUTHOR_EMAIL;
session.login.password = AUTHOR_PASSWORD;
session.login.user_domain = "";

/\*SMTP消息 \*/
SMTP_Message message;

/\* SMTP消息头 \*/
message.sender.name = "ESP";
message.sender.email = AUTHOR_EMAIL;
message.subject = "ESP Test Email";
message.addRecipient("Sara", RECIPIENT_EMAIL);

/\*HTML消息\*/
String htmlMsg = "<div style=\"color:#2f4468;\"><h1>Hello World!</h1><p>- Sent from ESP board</p></div>";
message.html.content = htmlMsg.c\_str();
message.html.content = htmlMsg.c\_str();
message.text.charSet = "us-ascii";
message.html.transfer_encoding = Content_Transfer_Encoding::enc_7bit;

/\*
//文本消息
String textMsg = "Hello World! - Sent from ESP board";
message.text.content = textMsg.c\_str();
message.text.charSet = "us-ascii";
message.text.transfer\_encoding = Content\_Transfer\_Encoding::enc\_7bit;

message.priority = esp\_mail\_smtp\_priority::esp\_mail\_smtp\_priority\_low;
message.response.notify = esp\_mail\_smtp\_notify\_success | esp\_mail\_smtp\_notify\_failure | esp\_mail\_smtp\_notify\_delay;\*/

/\* Set the custom message header \*/
//message.addHeader("Message-ID: <abcde.fghij@gmail.com>");

/\* 连接SMTP服务器 \*/
if (!smtp.connect(&session))
return;

/\* 发送EMail并关闭会话 \*/
if (!MailClient.sendMail(&smtp, &message))
Serial.println("Error sending Email, " + smtp.errorReason());
}

邮件发送结果:

在这里插入图片描述

邮件接收结果:
在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/127582304