1. 程式人生 > >SMTP協議備註

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

一 基本概念
  1. 客戶端通過向SMTP伺服器“推”待發送郵件來實現郵件傳送
  2. SMTP基於TCP協議,預設採用埠25
  3. 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