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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!