SMTP簡介
SMTP (Simple Mail Transfer Protocol )即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。那我們來剖析一下平時發送電子郵件的整個過程,如圖 1 所示:
圖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 郵箱通信為例來具體分析郵件的發送過程。在本示例代碼中,發件人郵箱名為:wiznet2013@126.com ,郵箱密碼為:hello123 。收件人郵箱地址為:3196855541@qq.com,郵件內容為: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 、登陸串口提示的賬號,查看郵件的收件箱可以找到剛才發送的郵件。
圖2 郵件成功發送打印信息
示例程序下載:http://pan.baidu.com/s/1kTmVUHT
感謝閱讀!
留言列表