郵件收發過程中STMP_POP_IMAP_MIME協議祥析
從上圖可以看出郵件收發的整個過程大致如下:
(1)發件人呼叫使用者代理編輯要傳送的郵件。
(2)發件人點選螢幕上的”傳送郵件“按鈕,把傳送郵件的 工作全部交給使用者代理來完成。使用者代理通過SMTP協議將郵件傳送給傳送方的郵件伺服器(在這個過程中,使用者代理充當SMTP客戶,而傳送方的郵件伺服器則充當SMTP伺服器 )。
(3)傳送方的郵件伺服器收到使用者代理髮來的郵件後,就把收到的郵件臨時存放在郵件快取佇列中,等待時間成熟的時候再傳送到接收方的郵件伺服器(等待時間的長短取決於郵件伺服器的處理能力和佇列中待傳送的信件的數量 )。
(4)若現在時機成熟了,傳送方的郵件伺服器則向接收方的郵件伺服器傳送郵件快取中的郵件。在傳送郵件之前,傳送方的郵件伺服器的SMTP客戶與接收方的郵件伺服器的SMTP伺服器需要事先建立TCP連線,之後再將佇列中 的郵件傳送出去。值得注意的是,郵件不會在因特網中的某個中間郵件伺服器落地 。
(5)接收郵件伺服器中的SMTP伺服器程式在收到郵件後,把郵件放入收件人的使用者郵箱中,等待收件人進行讀取。
(6)收件人在打算收信時,就執行PC機中的使用者代理,使用POP3(或IMAP)協議讀取傳送給自己的郵件。 注意,在這個過程中,收件人是POP3客戶,而接收郵件伺服器則是POP3客戶,箭頭的方向是從郵件伺服器指向接收使用者,因為這是一個“拉 ”的操作。
下面我們根據上面的總體過程介紹下各個元件。
1.使用者代理
使用者代理UA ( User Agent )是一個軟體包(程式),它的功能是:撰寫、閱讀、回覆和轉發報文,還能處理郵箱 (如建立收信箱和發信箱)。共有兩種型別的使用者代理:命令驅動 和GUI 。命令驅動
屬於早期的電子郵件,通過命令傳送和接收郵件,而GUI則是包含圖形介面,允許使用者使用鍵盤和滑鼠與軟體進行互動。
2. 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地址來告訴對方的 。(HELO報文是最初的,使用者名稱和密碼都不加密。現在改為EHLO,使用者名稱和密碼都進行base64編碼傳送)
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連線必須關閉。
3.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工作方式(即刪除)的缺點進行彌補,對功能進行擴充。
4. 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協議。
5. 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使用的版本。
內容-型別 :定義報文主體使用的資料型別和子型別,用<資料型別/子型別>表示。
內容-傳送-編碼 :定義了郵件的主體在傳送時是如何編碼的。
內容-標識 :在多報文的環境中唯一地標識報文。
內容描述 :定義了主體是否為影象、音訊或視訊。
6. 基於WWW的郵件
基於WWW的郵件收發系統的體系結構與普通的電子郵件收發系統不同,基於WWW的郵件收發系統的整個過程描述如下:
1.從傳送者的瀏覽器傳送到傳送方郵件伺服器是通過HTTP協議(而一般的則是通過SMTP協議)。
2.從傳送方伺服器到接收方郵件伺服器是通過SMTP協議(與一般的相同)。
3.從接收方到接收者是通過HTTP協議(而一般的則是POP3協議或IMAP協議)。
具體如下圖所示:
參考資料
[1]《計算機網路(第5版) 謝希仁》
[2]《TCP/IP協議族 第4版》
轉載自:http://blog.csdn.net/u011981018/article/details/50931361
相關文章
- 郵件開發:電子郵件的傳輸過程、各種協議的說明協議
- Python使用POP3和SMTP協議收發郵件Python協議
- Oracle 發郵件過程Oracle
- 郵件開發:SMTP協議詳解協議
- 郵件協議之MIME協議
- 在Foxmail中收發Yahoo!郵件AI
- 記錄mini-task--代理郵件發收系統的開發過程(三)
- 記錄mini-task--代理郵件發收系統的開發過程(二)
- 記錄mini-task--代理郵件發收系統的開發過程(一)
- 郵件開發:POP3協議詳解協議
- 電子郵件協議及GO傳送QQ郵件協議Go
- 海外郵件收發過程中出現的各種阻礙怎麼解決
- 郵件協議之IMAP指令講解協議
- SMTP協議初探(1)----dos下telnet命令發郵件協議
- POP3協議(電子郵件郵局協議)中UIDL和TOP命令在實際使用中的作用協議UI
- C#使用 MailKit 收發郵件C#AI
- oracle中發郵件的儲存過程--功能比較強(摘)Oracle儲存過程
- Linux下使用Perl來發信郵件過程Linux
- 郵件協議之POP3的講解協議
- SMTP協議解讀以及如何使用SMTP協議傳送電子郵件協議
- 在FoxMail裡收發ZohoMail的郵件AI
- 透過python發郵件Python
- TCP/IP學習筆記之協議和郵件TCP筆記協議
- 使用 LDAP 目錄協議實現 Domino 郵件路由LDA協議路由
- Oracle 傳送郵件的儲存過程Oracle儲存過程
- 實現簡單的郵件收發器(十二)
- SMTP協議初探(二)----linux下c程式設計實現發郵件協議LinuxC程式程式設計
- 一次郵件傳送協議SMTP問題排查協議
- iphone 6s自帶郵箱收發郵件設定教程iPhone
- postfix郵件系統之郵件客戶端無法收郵件問題解析客戶端
- 使用 MailChimp 傳送郵件 + 調取 API 開發落地頁過程AIAPI
- domino 發郵件時,透過修改 Principal 中的值改變發件人地址
- 功能較全的oracle傳送郵件過程Oracle
- 電子郵件地址註冊過程詳解
- 28、java檔案上傳下載、郵件收發Java
- 限制Exchange使用者從Internet收發郵件
- Golang《基於 MIME 協議的郵件資訊解析》部分實現Golang協議
- 郵件開發:接收解析郵件