SMTP 簡介

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。那我們來剖析一下平時發送電子郵件的整個過程,如圖1 所示:

image

                                            圖1 郵件發送過程示意圖

我們可以看到 SMTP 協議是發送過程中所使用的協議,我們這次用 W5500(全硬件TCP/IP協議棧網絡芯片)給大家模擬演示的僅是圖中的第一部分,發信人向郵件服務器發送請求的過程。

SMTP 在 TCP 協議 25 號端口監聽連續請求。SMTP 連接和發送過程:

1、建立 TCP 連接。

2、客戶端發送 HELO 命令以標識發件人自己的身份,然後客戶端發送 MAIL 命令;服務器端正希望以 OK 作為響應,表明准備接收。

3、客戶端發送 RCPT 命令,以標識該電子郵件的計劃接收人,可以有多個 RCPT行;服務器端則表示是否願意為收件人接收郵件。

4、協商結束,發送郵件,用命令 DATA 發送。

5、以“.”號表示結束並將內容一起發出去,結束此次發送,用 QUIT 命令退出。

SMTP 的實現

由於資源受限,在沒有操作系統的支持下,通過單片機發送郵件與傳統的電腦操作將有很大的不同。這裡用 W5500 與126 郵箱通信為例來具體分析郵件的發送過程。在本示例代碼中,發件人郵箱名為:[email protected],郵箱密碼為:hello123。收件人郵箱地址為:[email protected],郵件內容為:Hello!WIZnet!。如果想用別的郵箱做測試的話,請修改代碼中收件人和發件人的郵箱名和密碼。

具體過程很簡單,先解析126郵箱的服務器域名 smtp.126.com,成功以後就執行郵件發送函數,郵件發送成功以後就跳出循環或者等待。讓程序進入了一個死循環,這樣程序將不再跳到主循環,避免重復發送相同的郵件,這樣使得在 W5500的運行模式下,按一下 Reset 鍵或者上電一次,只發送一封郵件。

接下來介紹一下具體的測試過程,測試步驟如下:

1、SMTP 例程采用默認的IP信息,所以在 w5500_conf.c 文件中設置 ip_from 為 IP_FROM_DEFINE。

2、對代碼進行編譯,之後將程序燒錄到野火開發板。

3、連接好網線,USB 串口線。打開串口調試工具,復位野火開發板,從輸出結果可以得到圖2設置信息。

4、首先解析到 smtp.126.com 郵件服務器的 IP,然後發送郵件,如果發送成功,會得到 mail send OK 的信息。

5、登陸串口提示的賬號,查看郵件的收件箱可以找到剛才發送的郵件。

image