qq邮箱smtp设置
这里我用qq邮箱作为smtp服务器。开启smtp服务和获取qq授权码参照qq邮箱的官方说明,链接如下:帮助系统
源代码
//To use send Email for qq to port 465 (SSL)
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <ESP_Mail_Client.h>
/* wifi ssid和密码 */
#define WIFI_SSID "xxx"
#define WIFI_PASSWORD "xxxx"
/* qq 邮箱的 smtp 地址和端口号 */
#define SMTP_HOST "smtp.qq.com"
#define SMTP_PORT 465
/*
你的邮箱和授权码 授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
如何获取授权码 https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
*/
#define AUTHOR_EMAIL "xxxx@qq.com"
#define AUTHOR_PASSWORD "xxxxxxx"
/* 接收人邮箱地址 email*/
#define RECIPIENT_EMAIL "xxxxx@qq.com"
/* 定义 smtp session 对象*/
SMTPSession smtp;
/* 获取邮件发送状态的回调函数 */
void getSmtpStatusCallback(SMTP_Status status);
void setup(){
Serial.begin(115200);
Serial.println();
Serial.print("连接 Wifi");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(200);
}
Serial.println("");
Serial.println("WiFi 连接成功.");
Serial.println("IP 地址: ");
Serial.println(WiFi.localIP());
Serial.println();
/* smtp开启debug,debug信息输出到串口 */
smtp.debug(1);
/* 注册回调函数,获取邮件发送状态 */
smtp.callback(getSmtpStatusCallback);
ESP_Mail_Session session;
/* 设置smtp 相关参数, host, port等 */
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 message消息类 */
SMTP_Message message;
/* 定义邮件消息类的名称,发件人,标题和添加收件人 */
message.sender.name = "Esp8266er";
message.sender.email = AUTHOR_EMAIL;
message.subject = "Esp8266er Email";
message.addRecipient("Sara", RECIPIENT_EMAIL);
/* 设置message html 格式和内容*/
String htmlMsg = "<div style=\"color:#2f4468;\"><h1>Hello World!</h1><p>Sent from Esp8266er</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;
/* 连接smtp服务器 */
if (!smtp.connect(&session))
return;
/* 调用发送邮件函数,失败的话,获取失败信息 */
if (!MailClient.sendMail(&smtp, &message))
Serial.println("发送邮件失败,失败原因是 , " + smtp.errorReason());
}
void loop(){
}
/* 获取发送状态的回调函数 */
void getSmtpStatusCallback(SMTP_Status status){
/* 输出邮件发送状态信息 */
Serial.println(status.info());
/*状态获取成功,打印状态信息 */
if (status.success()){
Serial.println("----------------");
ESP_MAIL_PRINTF("邮件发送成功个数: %d\n", status.completedCount());
ESP_MAIL_PRINTF("邮件发送失败个数: %d\n", status.failedCount());
Serial.println("----------------\n");
struct tm dt;
for (size_t i = 0; i < smtp.sendingResult.size(); i++){
/* 依次获取发送邮件状态 */
SMTP_Result result = smtp.sendingResult.getItem(i);
time_t ts = (time_t)result.timestamp;
localtime_r(&ts, &dt);
ESP_MAIL_PRINTF("收件人: %s邮件发送状态信息\n", result.recipients);
ESP_MAIL_PRINTF("状态: %s\n", result.completed ? "success" : "failed");
ESP_MAIL_PRINTF("发送时间: %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("邮件标题: %s\n", result.subject);
}
Serial.println("----------------\n");
}
}
串口输出
WiFi 连接成功.
IP 地址:
192.168.10.93
Connecting to SMTP server...
> C: ESP Mail Client v1.3.1
> C: connect to SMTP server
> C: host > smtp.qq.com
> C: port > 465
> C: smtp server connected
SMTP server connected, wait for greeting...
< S: 220 newxmesmtplogicsvrsza7.qq.com XMail Esmtp QQ Mail Server.
Sending greeting response...
> C: send smtp command, HELO
< S: 250-newxmesmtplogicsvrsza7.qq.com
< S: 250-PIPELINING
< S: 250-SIZE 73400320
< S: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
< S: 250-AUTH=LOGIN
< S: 250-MAILCOMPRESS
< S: 250 8BITMIME
Logging in...
> C: send smtp command, AUTH PLAIN
> C: xxxxx@qq.com
> C: xxxxx@qq.com ****************
< S: 235 Authentication successful
Sending Email...
> C: send Email
Sending message header...
> C: send message header
< S: 250 OK.
< S: 250 OK
Sending message body...
> C: send message body
< S: 354 End data with <CR><LF>.<CR><LF>.
Finishing the message sending...
> C: Finish the message sending
< S: 250 OK: queued as.
Closing the session...
> C: terminate the SMTP session
Message sent successfully
> C: Message sent successfully
----------------
邮件发送成功个数: 1
邮件发送失败个数: 0
----------------
收件人: xxxxxx@qq.com邮件发送状态信息
状态: success
发送时间: 2021/7/14 13:50:24
邮件标题: Esp8266er Email
----------------