SMTP協議備註
【參考資料】
【1】https://tools.ietf.org/html/rfc5321
【2】《TCP/IP 技術詳解 卷一》
【3】https://blog.csdn.net/sinat_36219858/article/details/71069515
【4】https://baike.baidu.com/item/SMTP/175887?fr=aladdin
一 基本概念
- 客戶端通過向SMTP伺服器“推”待發送郵件來實現郵件傳送
- SMTP基於TCP協議,預設採用埠25
- SMTP採用SMTP-AUTH擴充套件來實現身份的認證
二 最基本流程
SMTP最基本的業務流程如下圖,具體命令參考第三部分;分別涉及HELO、MAIL FROM、RCPT TO、DATA和QUIT。
三 主要命令
備註: 下面例子中的表述規則 代表 空格 代表 回車換行
2.1 HELLO(HELO)
引數: 代表客戶端機器的域名
功能: 用以唯一標識SMTP客戶端,在SMTP新的補充協議中試用EHLO命令
例子:
HELO
2.2 MAIL
引數: Reverse-path填寫一個郵件地址[email protected],若出錯則傳送錯誤郵件至該地址,該值允許為空
功能: 開啟一個新的郵件事務,該命令觸發清空相關快取,如郵件資料快取、傳送目的地址快取等
例子:
“MAIL FROM:” Reverse-path
2.3 RECIPIENT (RCPT)
引數: 目的地郵箱
功能: 提供郵件接收人地址,服務端要返回這些地址是否允許接受郵件
例子:
MAIL FROM:[email protected]
RCPT TO:[email protected]
2.4 DATA
引數: 無
功能: 傳送郵件正文內容
例子:
當傳送端傳送DATA命令時,服務端返回354,認為之後收到的資料就是郵件正文,當傳送端傳送兩個CRLF時,服務端認為郵件資料傳送結束,返回250
S:“DATA”
R:354
S:“XXXX郵件內容”
S:
R:250 OK
2.5 RESET (RSET)
引數:無
功能: 當前郵件事務將被中止,服務端儲存的郵件傳送方、郵件資料都將被拋棄
例子:
“RSET” CRLF
2.6 VERIFY (VRFY)
引數:無
功能: 驗證使用者或者郵箱是否存在
例子:
“VRFY” SP String CRLF
2.7 EXPAND (EXPN)
引數:無
功能: 驗證郵箱列表
例子:
“EXPN” SP String CRLF
2.8 QUIT
引數:無
功能: 結束郵件傳送會話
例子:
“QUIT” CRLF