簡單郵件傳輸協議
出自 MBA智库百科(https://wiki.mbalib.com/)
簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)
目錄 |
什麼是簡單郵件傳輸協議[1]
簡單郵件傳輸協議是指TPTCP/IP網路在MTA之間傳遞郵件的協議。SMTP是目前使用最廣泛的郵件協議,UA向MTA發送電子郵件也使用SMTP。
簡單郵件傳輸協議的內容[1]
SMTP使用的TCP埠號是25,接收端在TCP的25號埠等待發送端來的E-mail,發送端向接收方(即伺服器)發出連接要求,一旦連接成功,即進行郵件信息交換,郵件傳遞結束後釋放連接。圖1列出了SMTP協議的常用命令。
- 圖1 SMTP協議的常用命令
下麵給出一個用SMTP傳遞郵件的典型過程。例如,我們假定一個名叫unix.ict.ac.cn的電腦(作為域ict.ac.cn的郵件伺服器)要發送下列信件:
Date:Sat 27 April 2002 13:26:3l BJ
From:lu@ ict.ac.cn
TO:liu @ cnc.ac.cn
Subject:meetinq
Let us get together Monday at lpm
首先要註意的是,根據SMTP標準(RFC822),信件必須用純ASCII碼發送。該標準還規定了諸如郵件頭、空一行、然後是信件本體這樣的通用結構。詳細定義的郵件頭中行的語法,由關鍵字(keyword)及隨後的具體值(value)兩部分組成。在我們的例子中,收件人由liu @ cnc.ac.cn表示,它簡單地對應電腦xenix.cnc.ac.cn(作為域cnc.ac.cn的郵件伺服器)上的用戶liu;發件人由1u @ ict.ac.cn表示,它對應電腦unix.ict.ac.cn上的用戶1u。
發送方郵件軟體從本地電腦的通信主機登記表(在UNIX操作系統上,主機表放在/etc/hosts文件中)或網上的名字伺服器那裡得知xenix.cnc.ac.cn的IP地址是128.6.4.2,然後郵件程式打開一個連接到128.6.4.2的25號埠。unix和xenix都是多用戶操作系統,雙方電腦的郵件服務都位於本地主機。25號是眾所周知的接收郵件的埠號。一旦連接建立,發送方郵件程式就開始發送命令。下麵列出的是典型會話:
每行開頭都標出該行信息是從unix還是從xenix發出的。在我們的例子中是unix主動發起連接的。按照標準,命令都使用普通正文。在示例會話中,命令HELO、MAIL、RCPT、DATA和QUIT都足標準ASCII命令,這樣就給觀察和診斷帶來方便,可以將每個會話的軌跡放在一個記錄文件中,以供檢查,標準還規定,應答都以數字開頭,並限定可以使用的應答格式。使用數字保證用戶程式的應答無二義性。應答數字的後面輔以正文,通常只是為了供人閱讀和記錄,對於程式的操作沒有影響。可能已經註意到了,會話以HELO起始,它給出啟動連接的發送端郵件伺服器的功能變數名稱,然後描述發送者和接收者。如果郵件要發給多個用戶,則可以有多個RCPT命令。最後發送數據。要註意,郵件的正文用僅包含一個句點“·”的行結束。
需要強調的是,SMTP規定了對任一給定命令可以發送的應答。以2開頭的應答表示成功,以3開頭的應答表明需要有進一步的動作。4和5開頭表示錯誤:4開頭是暫時性錯誤,比如磁碟滿;5開頭則是永久性錯誤,例如接收用戶不存在。圖2列出了SMTP協議的應答代碼。這些應答代碼分類如圖3所示。
- 圖2 SMTP協議的應答代碼
- 圖3 SMTP應答代碼分類
從上面的例子可以看出,郵件傳遞分五大部分:第一部分是建立郵件連接,第二部分是標識發送者,第三部分是標識接收者,第四部分是傳遞郵件數據,第五部分是結束郵件連接。