SMTP協議的常用命令和應答碼

從前面的通訊模型可以看出SMTP協議在發送SMTP和接收SMTP之間的會話是靠發送SMTPSMTP命令和接收SMTP反饋的應答來完成的。在通訊鏈路建立後,發送SMTP發送MAIL命令指令郵件發送者,若接收SMTP此時可以接收郵件則作出OK的應答,然後發送SMTP繼續發出RCPT命令以確認郵件是否收到,如果接收到就作出OK的應答,否則就發出拒絕接收應答,但這並不會對整個郵件操作造成影響。雙方如此反覆多次,直至郵件處理完畢。SMTP協議共包含10個SMTP命令,列表如下:


SMTP命令命令說明

HELLO<domain><CRLF>識別發送方到接收SMTP的一個HELLO命令
MAILFROM:<reverse-path><CRLF><reverse-path>爲發送者地址。此命令告訴接收方一個新郵件發送的開始,並對所有的狀態和緩衝區進行初始化。此命令開始一個郵件傳輸處理,最終完成將郵件數據傳送到一個或多個郵箱中。
RCPTTO:<forward-path><CRLF><forward-path>標識各個郵件接收者的地址
DATA<CRLF>
接收SMTP將把其後的行爲看作郵件數據去處理,以<CRLF>.<CRLF>標識數據的結尾。
REST<CRLF>退出/復位當前的郵件傳輸
NOOP<CRLF>要求接收SMTP僅做OK應答。(用於測試)
QUIT<CRLF>要求接收SMTP返回一個OK應答並關閉傳輸。
VRFY<string><CRLF>驗證指定的郵箱是否存在,由於安全因素,服務器多禁止此命令。
EXPN<string><CRLF>驗證給定的郵箱列表是否存在,擴充郵箱列表,也常禁止使用。
HELP<CRLF>查詢服務器支持什麼命令

注:<CRLF>爲回車、換行,ASCII碼分別爲13、10(十進制)。

  SMTP協議的每一個命令都會返回一個應答碼,應答碼的每一個數字都是有特定含義的,如第一位數字爲2時表示命令成功;爲5表失敗;3表沒有完成。一些較複雜的郵件程序利用該特點,首先檢查應答碼的首數字,並根據其值來決定下一步的動作。下面將SMTP的應答碼列表如下:

應答碼說明

501參數格式錯誤
502命令不可實現
503錯誤的命令序列
504命令參數不可實現
211系統狀態或系統幫助響應
214幫助信息
220<domain>服務就緒
221<domain>服務關閉
421<domain>服務未就緒,關閉傳輸信道
250要求的郵件操作完成
251用戶非本地,將轉發向<forward-path>
450要求的郵件操作未完成,郵箱不可用
550要求的郵件操作未完成,郵箱不可用
451放棄要求的操作;處理過程中出錯
551用戶非本地,請嘗試<forward-path>
452系統存儲不足,要求的操作未執行
552過量的存儲分配,要求的操作未執行
553郵箱名不可用,要求的操作未執行
354開始郵件輸入,以"."結束
554操作失敗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章