電子郵件收發協議總結
說明:本文僅供學習交流,轉載請標明出處,歡迎轉載!
電子郵件發送協議是一種基於“推”的協議,主要包括SMTP;郵件接收協議則是一種基於“拉”的協議,主要包括POP協議和IMAP協議,在正式介紹這些協議之前,我們先給出郵件收發的體系結構:
從上圖可以看出郵件收發的整個過程大致如下:
(1)發件人調用PC機中的用戶代理編輯要發送的郵件。
(2)發件人點擊屏幕上的”發送郵件“按鈕,把發送郵件的 工作全部交給用戶代理來完成。用戶代理通過SMTP協議將郵件發送給發送方的郵件服務器(在這個過程中,用戶代理充當SMTP客戶,而發送方的郵件服務器則充當SMTP服務器)。
(3)發送方的郵件服務器收到用戶代理發來的郵件後,就把收到的郵件臨時存放在郵件緩存隊列中,等待時間成熟的時候再發送到接收方的郵件服務器(等待時間的長短取決於郵件服務器的處理能力和隊列中待發送的信件的數量)。
(4)若現在時機成熟了,發送方的郵件服務器則向接收方的郵件服務器發送郵件緩存中的郵件。在發送郵件之前,發送方的郵件服務器的SMTP客戶與接收方的郵件服務器的SMTP服務器需要事先建立TCP連接,之後再將隊列中 的郵件發送出去。值得註意的是,郵件不會在因特網中的某個中間郵件服務器落地。
(5)接收郵件服務器中的SMTP服務器進程在收到郵件後,把郵件放入收件人的用戶郵箱中,等待收件人進行讀取。
(6)收件人在打算收信時,就運行PC機中的用戶代理,使用POP3(或IMAP)協議讀取發送給自己的郵件。註意,在這個過程中,收件人是POP3客戶,而接收郵件服務器則是POP3客戶,箭頭的方向是從郵件服務器指向接收用戶,因為這是一個“拉”的操作。
下面我們根據上面的總體過程介紹下各個組件。
用戶代理
用戶代理UA(User Agent)是一個軟件包(程序),它的功能是:撰寫、閱讀、回復和轉發報文,還能處理郵箱(如創建收信箱和發信箱)。共有兩種類型的用戶代理:命令驅動和GUI。命令驅動屬於早期的電子郵件,通過命令發送和接收郵件,而GUI
SMTP協議
SMTP協議服務器的熟知端口號為25,與之前總結過的telnet協議和FTP協議類似的地方是,SMTP協議的客戶端和服務器端都是通過命令和響應的形式進行交互,即SMTP客戶通過命令向SMTP服務器發送操作請求,而服務器則通過3位的數字對響應的請求作出響應。SMTP規定了14條命令和21中應答信息,每條命令有4個字母組成,而每一種應答一般只有一行信息,有一個3位數字的代碼開始,後面附上很簡單的附加說明。
郵件傳送主要包括3個階段:建立連接、郵件傳送和終止連接。
建立連接階段:
1.當SMTP客戶端每隔一定時間對郵件緩存掃描一次,如發現有郵件,就使用SMTP的熟知端口號25與接收方的郵件服務器的SMTP服務器建立TCP連接。
2.接收方SMTP服務器發出“220 Service ready"告訴客戶端它已經準備好接收郵件。若服務器未就緒,它就發送代碼421(服務器不可用)。
3.客戶發送HELO報文,並使用它的域名地址標誌自己。目的是:用來把客戶的域名通知服務器,值得註意的是,在TCP的連接建立階段,發送方和接收方都是通過它們的IP地址來告訴對方的。
4.服務器響應代碼250(請求命令完成)或根據情況的其他一些代碼。
報文傳送階段:
在SMTP客戶與服務器之間建立連接後,發件人就可以與一個或多個收件人交換單個的報文了。若收件人超過一個,則下面步驟3和步驟4將重復進行。
1.客戶發送MAIL FROM報文介紹報文的發送者。它包括發送人的郵件地址(郵箱名和域名,如house@qq)。這個步驟是必要的:因為可以給服務器在返回差錯或報文時的返回郵件地址。
2.服務器響應代碼250(請求命令完成)或其他適當的代碼。
3.客戶發送RCPT(收件人)報文,包括收件人的郵件地址,RCPT命令的作用是:先弄清接收方系統是否已經準備好接收郵件的準備,然後才發送郵件,這樣做視為了避免浪費通信資源,不至於發送了很長的郵件以後才知道是因地址錯誤。
4.服務器響應代碼250或其他適當的代碼。
5.客戶發送DATA報文對報文的傳送進行初始化,DATA命令表示要開始傳送郵件的內容了。
6.服務器響應代碼"354 Start mail input: end with <CRLF>.<CRLF>"或其他適當的報文(如421 服務器不可用,500 命令無法識別)。
7.客戶用連續的行發送報文的內容。每一行的行結束時輸入<CRLF>.<CRLF>,即回車換行.回車換行,表示郵件內容結束。
8.服務器響應代碼(250 請求命令完成)或其他適當的代碼。
值得註意的是:雖然SMTP使用TCP連接視圖使郵件的傳送可靠,但它並不能保證不丟失郵件。也就是說,使用SMTP傳送郵件只能說可以可靠地傳送接收方的郵件服務器,在往後的情況就不知道了。接收方的郵件服務器也許會出故障,使收到的服務器全部丟失(在收件人讀取信件之前)。
終止連接
在報文傳送成功後,客戶就終止連接。包括如下步驟:
1.客戶發送QUIT命令。
2.服務器響應221(服務關閉)或其他代碼。
在連接終止階段後,TCP連接必須關閉。
POP協議
POP協議,Post office Protocal。郵件交付的第一階段和第二階段使用SMTP,而第三階段則使用郵件讀取協議。SMTP是一個push協議,而第三階段則使用pull協議,包括POP和IMAP協議,POP主要使用POP3,而IMAP協議則主要使用IMAP4。
POP3采用C/S的工作方式。在接收郵件的用戶PC機中的用戶代理UA必須運行POP3的客戶程序,而在收件人所連接的ISP的郵件服務器中則運行POP的服務器程序。POP服務器只有在用戶輸入鑒別信息(用戶名+密碼)後,才允許對方對郵箱進行讀取。
POP3有兩種工作方式:刪除方式和保存方式。刪除方式就在每一次讀取郵件後就把郵箱中的這個郵件刪除,保存方式就是在讀取郵件後仍然在郵箱中保存這個郵件,該方式是通過對之前的POP3工作方式(即刪除)的缺點進行彌補,對功能進行擴充。
IMAP協議
IMAP協議,Internet Mail Access Protocal(因特網郵件讀取協議)。 IMAP協議比POP3協議復雜的多,也是按照C/S的工作方式,現在較新的版本是IMAP4。
在使用IMAP時,用戶的PC機上運行IMAP客戶程序,然後與接收方的郵件服務器上的IMAP服務器程序建立TCP連接。POP3不允許用戶則郵件服務器上整理自己的郵件,用戶在服務器上不能不同的文件夾,POP3也不允許用戶在下載郵件之前讀取郵件的部分內容,而IMAP則克服了這些POP3的缺點,說白了就是POP3協議不太願意讓用戶直接操作服務器,而IMAP正好客戶了這些缺點。
IMAP4提供了以下功能(這些功能POP3則沒有):
1.用戶在下載郵件之前可以檢查郵件的首部。
2.用戶在下載郵件之前可以用特定的字符串搜索電子郵件的內容。
3.用戶可以部分地下載電子郵件。
4.用戶可以在郵件服務器上創建、刪除郵箱,或對郵箱重命名。
5.為了存放電子郵件,用戶可以在文件夾中創建分層次的郵箱。
註意:不用把郵件的發送協議SMTP協議與郵件的讀取協議POP或IMAP協議弄混淆了。發送人的UA向發送發郵件服務器發送郵件,以及發送方的郵件服務器先接受方的郵件服務器發送郵件都是采用SMTP協議,而收件人的UA郵件接收服務器中接收文件則采用的是POP協議或IMAP協議。
MIME
MIME協議(Multipurpose Internet Mail Extensions),通用因特網郵件擴充協議,作為SMTP的一種輔助協議,其引入是為了克服SMTP的如下不足:
1.SMTP只能發送使用NVT(虛擬網絡終端) 7位ASCII碼格式的報文,它不能使用NVT 7位ASCII碼不支持的語言(如漢語,日語,德語等)。
2.SMTP不能傳送可執行文件或其他二進制對象(如圖像文件)。
3.SMTP不支持音頻或視頻文件。
4.SMTP發送的郵件的長度受到限制。
為了克服以上的不足,便引入了MIME協議,MIME協議是一種擴展協議性的輔助協議,“擴充”指的是只是對原來協議的擴展,而不是取代。它允許非ASCII碼數據能夠通過電子郵件傳送。MIME在發送方把非ASCII碼數據轉換為NVT ASCII數據,之後的工作再交給SMTP完成,在接收方再將NVT ASCII數據還原成原來的數據。MIME的體系結構如下:
MIME定義了5種首部,用來加在原始的電子郵件部分以定義參數的轉換,這五種首部分別是:MIME-Version(MIME版本)、Constent-Type(內容類型)、Content-Transfer-Encoding(內容-傳送-編碼)、Content-Id(內容-標識)和Content-Description(內容描述)。
MIME版本:定義了MIME使用的版本。
內容-類型:定義報文主體使用的數據類型和子類型,用<數據類型/子類型>表示。
內容-傳送-編碼:定義了郵件的主體在傳送時是如何編碼的。
內容-標識:在多報文的環境中唯一地標識報文。
內容描述:定義了主體是否為圖像、音頻或視頻。
基於WWW的郵件
基於WWW的郵件收發系統的體系結構與普通的電子郵件收發系統不同,基於WWW的郵件收發系統的整個過程描述如下:
1.從發送者的瀏覽器傳送到發送方郵件服務器是通過HTTP協議(而一般的則是通過SMTP協議)。
2.從發送方服務器到接收方郵件服務器是通過SMTP協議(與一般的相同)。
3.從接收方到接收者是通過HTTP協議(而一般的則是POP3協議或IMAP協議)。
具體如下圖所示:
參考資料
[1]《計算機網絡(第5版) 謝希仁》
[2]《TCP/IP協議族 第4版》
電子郵件收發協議總結