上圖展示了因特網(wǎng)郵件系統(tǒng)的概貌。我們看到,該系統(tǒng)由三類主要部件構(gòu)成:用戶代理、郵件服務(wù)器和簡單郵件傳送協(xié)議(simple Mail Transfer Protocol,簡稱SMTP)。發(fā)信人A1ice給收信人Bob發(fā)送一個電子郵件消息。用戶代理允許用戶閱讀、回復(fù)、轉(zhuǎn)寄、保存和編寫郵件消息。 Alice寫完電子郵件消息后,她的用戶代理把這個消息發(fā)送給郵件服務(wù)器,再由該郵件服務(wù)器把這個消息排入外出消息隊列中。當(dāng)Bob想閱讀電子郵件消息時,他的用戶代理將從他在其郵件服務(wù)器上的郵箱中取得郵件。20世紀(jì)90年代后期,圖形用戶界面(GUI)的電子郵件用戶代理變得流行起來,它們允許用戶閱讀和編寫多媒體消息。當(dāng)前流行的用戶代理包括Outlook,foxmail等。公共域中還有許多基于文本的電于郵件用戶代理,包括mail、pine 和elm。
郵件服務(wù)器構(gòu)成了電子郵件系統(tǒng)的核心。每個收信人都有一個位于某個郵件服務(wù)器上的郵箱(mailbox)。Bob的郵箱用于管理和維護(hù)已經(jīng)發(fā)送給他的郵件消息。一個郵件消息的典型旅程是從發(fā)信人的用戶代理開始,游經(jīng)發(fā)信人的郵件服務(wù)器,中轉(zhuǎn)到收信人的郵件服務(wù)器,然后投遞到收信人的郵箱中。當(dāng)Bob想查看自己的郵箱中的郵件消息時,存放該郵箱的郵件服務(wù)器將以他提供的用戶名和口令認(rèn)證他。Alice的郵件服務(wù)器還得處理Bob 的郵件服務(wù)器出故障的情況。如果Alice的郵件服務(wù)器無法把郵件消息立即遞送到Bob的郵件服務(wù)器,A1ice的服務(wù)器就把它們存放在消息隊列 (message queue)中,以后再嘗試遞送。這種嘗試通常每30分鐘左右執(zhí)行一次:要是過了若干天仍未嘗試成功,該服務(wù)器就把這個消息從消息隊列中去除掉,同時以另一個郵件消息通知發(fā)信人(即Alice)。
簡單郵件傳送協(xié)議(SMTP)是因特網(wǎng)電子郵件系統(tǒng)首要的應(yīng)用層協(xié)議。它使用由TCP提供的可靠的數(shù)據(jù)傳輸服務(wù)把郵件消息從發(fā)信人的郵件服務(wù)器傳送到收信人的郵件服務(wù)器。跟大多數(shù)應(yīng)用層協(xié)議一樣,SMTP也存在兩個端:在發(fā)信人的郵件服務(wù)器上執(zhí)行的客戶端和在收信人的郵件服務(wù)器上執(zhí)行的服務(wù)器端。SMTP的客戶端和服務(wù)器端同時運行在每個郵件服務(wù)器上。當(dāng)一個郵件服務(wù)器在向其他郵件服務(wù)器發(fā)送郵件消息時,它是作為SMTP客戶在運行。當(dāng)一個郵件服務(wù)器從其他郵件服務(wù)器接收郵件消息時,它是作為SMTP服務(wù)器在運行。
SMTP協(xié)議與人們用于面對面交互的禮儀之間有許多相似之處。首先,運行在發(fā)送端郵件服務(wù)器主機(jī)上的SMTP客戶,發(fā)起建立一個到運行在接收端郵件服務(wù)器主機(jī)上的SMTP服務(wù)器端口號25之間的TCP連接。如果接收郵件服務(wù)器當(dāng)前不在工作,SMTP客戶就等待一段時間后再嘗試建立該連接。這個連接建立之后,SMTP客戶和服務(wù)器先執(zhí)行一些應(yīng)用層握手操作。就像人們在轉(zhuǎn)手東西之前往往先自我介紹那樣,SMTP客戶和服務(wù)器也在傳送信息之前先自我介紹一下。在這個SMTP握手階段,SMTP客戶向服務(wù)器分別指出發(fā)信人和收信人的電子郵件地址。彼此自我介紹完畢之后,客戶發(fā)出郵件消息。SMTP可以指望由 TCP提供的可靠數(shù)據(jù)傳輸服務(wù)把該消息無錯地傳送到服務(wù)器。如果客戶還有其他郵件消息需發(fā)送到同一個服務(wù)器,它就在同一個TCP連接上重復(fù)上述過程;否則,它就指示TCP關(guān)閉該連接。