郵件服務器構成了電子郵件系統的核心。每個收信人都有一個位於某個郵件服務器上的郵箱(mailbox)。Bob的郵箱用於管理和維護已經發送給他的郵件消息。一個郵件消息的典型旅程是從發信人的用戶代理開始,游經發信人的郵件服務器,中轉到收信人的郵件服務器,然後投遞到收信人的郵箱中。當Bob想查看自己的郵箱中的郵件消息時,存放該郵箱的郵件服務器將以他提供的用戶名和口令認證他。Alice的郵件服務器還得處理Bob的郵件服務器出故障的情況。如果Alice的郵件服務器無法把郵件消息立即遞送到Bob的郵件服務器,A1ice的服務器就把它們存放在消息隊列(message queue)中,以後再嘗試遞送。這種嘗試通常每30分鐘左右執行一次:要是過了若干天仍未嘗試成功,該服務器就把這個消息從消息隊列中去除掉,同時以另一個郵件消息通知發信人(即Alice)。
簡單郵件傳送協議(SMTP)是因特網電子郵件系統首要的應用層協議。它使用由TCP提供的可靠的數據傳輸服務把郵件消息從發信人的郵件服務器傳送到收信人的郵件服務器。跟大多數應用層協議一樣,SMTP也存在兩個端:在發信人的郵件服務器上執行的客戶端和在收信人的郵件服務器上執行的服務器端。SMTP的客戶端和服務器端同時運行在每個郵件服務器上。當一個郵件服務器在向其他郵件服務器發送郵件消息時,它是作為SMTP客戶在運行。當一個郵件服務器從其他郵件服務器接收郵件消息時,它是作為SMTP服務器在運行。
SMTP在RFC 821中定義,它的作用是把郵件消息從發信人的郵件服務器傳送到收信人的郵件服務器。SMTP的歷史比HTTP早得多,其RFC是在1982年編寫的,而SMTP的現實使用又在此前多年就有了。盡管SMTP有許多奇妙的品質(它在因特網上的無所不在就是見證),但卻是一種擁有某些“古老”特征的傳統戰術。例如,它限制所有郵件消息的信體(而不僅僅是信頭)必須是簡單的7位ASCII字符格式。這個限制在20世紀80年代早期是有意義的,當時因特網傳輸能力不足,沒有人在電子郵件中附帶大數據量酌圖像、音頻或視頻文件。然而到了多媒體時代的今天,這個限制就多少顯得局促了——它迫使二進制多媒體數據在文由SMTP傳送之前首先編碼成7位ASCII文本;SMTP傳送完畢之後,再把相應的7位ASCII文本郵件消息解碼成二進制數據。HTTP不需要對多媒體數據進行這樣的編碼解碼操作。
SMTP協議與人們用於面對面交互的禮儀之間有許多相似之處。首先,運行在發送端郵件服務器主機上的SMTP客戶,發起建立一個到運行在接收端郵件服務器主機上的SMTP服務器端口號25之間的TCP連接。如果接收郵件服務器當前不在工作,SMTP客戶就等待一段時間後再嘗試建立該連接。這個連接建立之後,SMTP客戶和服務器先執行一些應用層握手操作。就像人們在轉手東西之前往往先自我介紹那樣,SMTP客戶和服務器也在傳送信息之前先自我介紹一下。在這個SMTP握手階段,SMTP客戶向服務器分別指出發信人和收信人的電子郵件地址。彼此自我介紹完畢之後,客戶發出郵件消息。SMTP可以指望由TCP提供的可靠數據傳輸服務把該消息無錯地傳送到服務器。如果客戶還有其他郵件消息需發送到同一個服務器,它就在同一個TCP連接上重復上述過程;否則,它就指示TCP關閉該連接。
與HTTP的比較
我們簡單地比較一下SMTP和HTTP。這兩個協議都是用於從一台主機向另一台主機傳送文件;HTTP用於從web服務器向Web用戶代理(即浏覽器)傳送文件(或對象),SMTP用於從一個郵件服務器向另一個郵件服務器傳送文件(也就是電子郵件消息)。在傳送文件時,SMTP和持久HTTP都使用持久連接。可見,這兩個協議具有一些共同的特征,不過它們之間的差別也是顯著的。首先,HTTP基本上是一個內拉式協議(pull protocol)——有人把信息上傳到web服務器中,用戶則在方便的時候使用HTTP把這些信息從服務器上拉過來。更確切地說,TCP連接是由想要接收文件的主機發起的。SMTP則基本上是一個外推式協議(pushProtoco1)——發送端郵件服務器把文件推送給接收端郵件服務器。更確切地說,TCP連接是由想要發送文件的主機發起的。
SMTP和HTTP的第二個重要差別是,SMTP要求包括信體部分在內的每個郵件消息都是7位ASCII文本格式。
各式各樣的郵件服務器:
1、網絡寶嵌入式郵件服務器
2、用GCMail架構郵件服務器
3、用U-Mail架構郵件服務器
4、用WebEasyMail架構郵件服務器