SMTP被用來在因特網上傳遞電子郵件,RFC821規定了該協議的所有細節,但是你只須記住該協議的基本命令和方法就行了。協議的原理很簡單,無非是一個客戶端計算機向服務器發送命令,然后服務器向客戶端計算機返回一些信息??蛻舳税l送的命令以及服務器的回應都是字符串,所以不需要特別的軟件就能讀出它們。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操作失敗
示例:
telnet 172.16.10.250 25 --------------------使用 telnet 命令連接服務器 25 端口
Trying 172.16.10.250 ... ---------------------正在連接服務器 25 端口
Connected to 172.16.10.250 . -------------連接服務器 25 端口成功
helo askcuix ----------------------------------- 向服務器標識用戶身份,該命令包含一個參數,即你的郵箱名。在RFC821中,HELO是一個可選擇性命令,如果服務器不要求該命令的話,你可以把它忽略掉。
250 askcuix
mail from: <askcuix@domain.com> --------用mail from命令告訴服務器你想發一封郵件,該命令以發信人的郵件地址為參數。
250 ok -------------------------------------------命令執行成功
rcpt to: <test@domain.com> ----------------該命令以收信人地址為參數,告訴服務器你想將郵件發到收信人地址處。如果你想將郵件發給多個收件人的話。你需要多次使用RCPTTO命令,對每個命令,服務器都會返回代碼為250的回應。
250 ok -------------------------------------------命令執行成功
data --------------------------------------------- 數據傳輸初始化。用DATA命令告訴服務器以下的內容為郵件正文。在你從服務器收到代碼為354的回應后,你就可以發送郵件正文了。
354 go ahead --------------------------------- 開始傳輸數據。郵件按行發送,每行郵件以一個無回車的換行符結束。
From: askcuix@domain.com
To: test@domain.com
Date: Mon, 25 May 2008 14:24:27 +0800
Subject: test mail
Hi, test
This is a test mail, you don't reply it.
.
----------------------------------------------------數據內容,包括BASE64加密后的郵件內容, 以 CRLF.CRLF 結束數據傳輸。服務器收到這個標志后,就會立即向你返回一個代碼為250的回應以及該郵件的唯一ID號。
250 ok message accepted for delivery ----命令執行成功
quit ---------------------------------------------- 結束會話,也可以繼續發下一封郵件。
221 Ok,close
Connection closed by foreign host .-------- 斷開連接