SMTP協議詳解及工作過程

1、SMTP協議簡介

SMTP稱爲簡單郵件傳輸協議(Simple Mail Transfer Protocal),目標是向用戶提供高效、可靠的郵件傳輸。它的一個重要特點是它能夠在傳送中接力傳送郵件,即郵件可以通過不同網絡上的主機接力式傳送。通常它工作在兩種情況下:一是郵件從客戶機傳輸到服務器;二是從某一個服務器傳輸到另一個服務器。SMTP是一個請求/響應協議,它監聽25號端口,用於接收用戶的Mail請求,並與遠端Mail服務器建立SMTP連接。

2、SMTP協議工作機制

SMTP通常有兩種工作模式。發送SMTP和接收SMTP。具體工作方式爲:發送SMTP在接收到用戶的郵件請求後,判斷此郵件是否爲本地郵件,若是直接投送到用戶的郵箱,否則向DNS查詢遠端郵件服務器的MX記錄,並建立與遠端接收SMTP之間的一個雙向傳送通道,此後SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方向傳送。一旦傳送通道建立,SMTP發送者發送MAIL命令指明郵件發送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCPT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方將如此反覆多次。當接收者收到全部郵件後會接收到特別的序列,入伏哦接收者成功處理了郵件,則返回OK應答。

3、SMTP的連接和發送過程

(a)建立TCP連接

(b)客戶端發送HELO命令以標識發件人自己的身份,然後客戶端發送MAIL命令;

         服務器端正希望以OK作爲響應,表明準備接收

(c)客戶端發送RCPT命令,以標識該電子郵件的計劃接收人,可以有多個RCPT行;

         服務器端則表示是否願意爲收件人接收郵件

(d)協商結束,發送郵件,用命令DATA發送

(e)以.表示結束輸入內容一起發送出去

(f)結束此次發送,用QUIT命令退出

示例如下:

C: telent SMTP.163.com 25  //以telenet方式連接163郵件服務器
S: 220 163.com Anti-spam GT for Coremail System //220爲響應數字,其後的爲歡迎信息
C: HELO SMTP.163.com //除了HELO所具有的功能外,EHLO主要用來查詢服務器支持的擴充功能 
S: 250-mail
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250 8BITMIME //最後一個響應數字應答碼之後跟的是一個空格,而不是'-' 
C: AUTH LOGIN   //請求認證
S: 334 dxNlcm5hbWU6  //服務器的響應——經過base64編碼了的“Username”=
C: Y29zdGFAYW1heGl0Lm5ldA==  //發送經過BASE64編碼了的用戶名
S: 334 UGFzc3dvcmQ6  //經過BASE64編碼了的"Password:"=
C: MTk4MjIxNA==  //客戶端發送的經過BASE64編碼了的密碼
S: 235 auth successfully  //認證成功 
C: MAIL FROM: [email protected]  //發送者郵箱
S: 250 … .  //“…”代表省略了一些可讀信息
C: RCPT TO: [email protected] //接收者郵箱
S: 250 … .    // “…”代表省略了一些可讀信息
C: DATA //請求發送數據
S: 354 Enter mail, end with "." on a line by itself
C: Enjoy Protocol Studing
C: .
S: 250 Message sent
C: QUIT //退出連接 
S: 221 Bye

其他命令:

VRFY——用於驗證給定用戶郵箱是否存在,以及接收關於該用戶的詳細信息;

EXPN——用於擴充郵件列表

4、郵件的路由過程

SMTP服務器是基於“域名服務DNS中計劃收件人的域名來路由電子郵件”。SMTP服務器基於DNS中的MX記錄來路由電子郵件,MX記錄註冊了域名和相關的SMTP中的主機,屬於該域的電子郵件都應向該主機發送。

若SMTP服務器mail.abc.com收到一封信要發送到[email protected]

a: SendMail請求DNS給出主機sh.abc.com的CNAME記錄,如有,假若CNAME到shmail.abc.com,則再次請求shmail.abc.com的CNAME記錄,直到沒有爲止;

b: 假定被CNAME到shmail.abc.com,然後SendMail請求@abc.com域的DNS給出shmail.abc.com的MX記錄,

    shmail MX 5 shmail.abc.com

    10 shmail2.abc.com

c: SendMail做好請求DNS給出shmail.abc.com的A記錄,即IP地址,若返回值爲1.2.3.4

d: SwndMail與1.2.3.4連接,傳送這封信給[email protected]的信到1.2.3.4這臺服務器的SMTP後臺程序。

5、SMTP常用的命令

SMTP命令不區分大小寫,但參數區分大小寫。常用命令如下:

HELO <domain> <CRLF>——向服務器標識用戶身份發送者能欺騙、說謊,但一般情況下服務器都能檢測到

RCPT TO: <forward-path> <CRLF>——<forward-path>用來標誌郵件接收者的地址,常用在MAIL FROM後,可以有多個RCPT TO

DATA <CRLF>——將之後的數據作爲數據發送,以<CRLF>.<CRLF>標誌數據的結尾

REST <CRLF>——重置會話,當前傳輸被取消

NOOP <CRLF>——要求服務器返回OK應答,一般用作測試

QUIT <CRLF>——結束會話

VRFY <string> <CRLF>——驗證指定的郵箱是否存在,由於安全方面的原因,服務器大多禁止此命令

EXPN <string> <CRLF>——驗證給定的郵箱列表是否存在,由於安全方面的原因,服務器大多禁止此命令

HELP <CRLF>——查詢服務器支持什麼命令

6、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——操作失敗

7、使用SMTP的必要性

一般的PC資源不夠,處理能力不夠,不可能全天候地連接在因特網上來收發郵件。所以使用SMTP服務器,可以讓多個用戶共用服務器,有效地降低了成本。

8、SMTP和郵件格式的關係

可以用一個比較形象的例子來說明:甲與乙書信來往,甲通過郵局向乙發送信件,郵局見轉交郵件可看成使用了SMTP協議,至於書信的格式則會因爲地區習慣等的不同而不同,這個書信格式可看成是郵件格式的標準。

9、瀏覽器發送郵件使用的協議

瀏覽器發送郵件的過程:

例如:[email protected]可通過登陸www.126.com來收發郵件

[email protected]www.126.com提供的郵件頁面上填寫的相應信息(如發信人郵箱、收信人郵箱等),通過http協議被提交給126服務器;126服務器根據這些信息組裝一封符合郵件規範的郵件(就像用戶代理一樣);然後smtp.126.com通過SMTP協議將這封郵件發送到接收端郵件服務器。

由此可知,瀏覽器發送郵件只是用戶代理的功能直接放到郵件服務器上去做了,至於郵件服務器見發送郵件仍然採用的是SMTP協議。

發佈了36 篇原創文章 · 獲贊 15 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章