轉自http://blog.csdn.net/zyh5540/article/details/18953853
一、三種協議
1. SMTP(Simple Mail Transfer Protocol)
SMTP 是一種TCP協議支持的提供可靠且有效電子郵件傳輸的應用層協議。SMTP 是建立在 TCP上的一種郵件服務,主要用于傳輸系統之間的郵件信息并提供來信有關的通知。SMTP主要負責底層的郵件系統如何將郵件從一臺機器傳至另外一臺機器。
2. POP(Post Office Protocol)
目前的版本為POP3,POP3是把郵件從電子郵箱中傳輸到本地計算機的協議。
3. IMAP(Internet Message Access Protocol)
目前的版本為IMAP4,是POP3的一種替代協議,提供了郵件檢索和郵件處理的新功能,這樣用戶可以完全不必下載郵件正文就可以看到郵件的標題摘要,從郵件客戶端軟件就可以對服務器上的郵件和文件夾目錄等進行操作。IMAP協議增強了電子郵件的靈活性,同時也減少了垃圾郵件對本地系統的直接危害,同時相對節省了用戶察看電子郵件的時間。除此之外,IMAP協議可以記憶用戶在脫機狀態下對郵件的操作(例如移動郵件,刪除郵件等)在下一次打開網絡連接的時候會自動執行。
二、工作原理
下面以sina和sohu這兩個電子郵局為例來講解電子郵件的傳輸過程和工作原理。假設sina郵箱的賬戶為lisi@sina.com,sohu郵箱的賬戶為wangwu@sohu.com,它們之間的郵件收發過程如下圖所示:

圖中實線部分表示lisi@sina.com賬戶向wangwu@sohu.com賬戶發送郵件的過程,虛線部分表示wangwu@sohu.com賬戶向lisi@sina.com賬戶發送郵件的過程。下面通過分析lisi@sina.com賬戶向wangwu@sohu.com賬戶發送郵件的過程,來具體講解一封郵件從發送到接收所涉及的環節。
lisi@sina.com的郵件客戶端程序(這里假設為Outlook Express)與sina的SMTP服務器建立網絡連接,并以lisi的用戶名和密碼進行登錄后,使用SMTP協議把郵件發送給sina的SMTP服務器。
sina的SMTP服務器收到lisi@sina.com提交的電子郵件后,首先根據收件人的地址后綴判斷接收者的郵件地址是否屬于該SMTP服務器的管轄范圍,如果是的話就直接把郵件存儲到收件人的郵箱中,否則,sina的SMTP服務器向DNS服務器查詢收件人的郵件地址后綴(sohu.com)所表示的域名的MX記錄,從而得到sohu的SMTP服務器信息,然后與sohu的SMTP服務器建立連接并采用SMTP協議把郵件發送給sohu的SMTP服務器。
sohu的SMTP服務器收到sina的SMTP服務器發來的電子郵件后,也將根據收件人的地址判斷該郵件是否屬于該SMTP服務器的管轄范圍,如果是的話就直接把郵件存儲到收件人的郵箱中,否則(一般不會出現這種情況),sohu的SMTP服務器可能繼續轉發這封電子郵件,也可能丟棄這封電子郵件。
擁有wangwu@sohu.com賬戶的用戶通過郵件客戶端程序(這里假設也為Outlook Express)與sohu的POP3/IMAP服務器建立網絡連接,并以wangwu的用戶名和密碼進行登錄后,就可以通過POP3或IMAP協議查看wangwu@sohu.com郵箱中是否有新郵件,如果有的話,則使用POP3或IMAP協議讀取郵箱中的郵件。
圖中的虛線部分表示wangwu@sohu.com賬戶向lisi@sina. com賬戶發送郵件的過程,此過程與lisi@sina.com賬戶向wangwu@ sohu.com賬戶發送郵件的過程類似,這里不再復述。
郵件客戶端軟件與SMTP服務器之間,以及兩臺SMTP服務器之間都采用SMTP協議進行通信。郵件客戶端軟件只采用SMTP協議發送郵件,即郵件客戶端軟件只作為SMTP協議的發送方。SMTP服務器既要采用SMTP協議向其他SMTP服務器發送郵件,又要采用SMTP協議接收其他SMTP服務器或郵件客戶端軟件發送來的郵件,即SMTP服務器既作為SMTP協議的發送方,又作為SMTP協議的接收方。郵件客戶端軟件與SMTP服務器都可以使用SMTP協議發送郵件,僅發送郵件這一功能而言,它們在技術實現上有何差異呢?它們的差異主要體現在以下兩個方面:
(1)SMTP服務器接收到郵件客戶端軟件發送來的郵件后,需要根據收件人地址的域名將郵件轉發給目標域的SMTP服務器,而大量的收件人地址中肯定會出現各種可能的域名,因此,SMTP服務器涉及到要與其他多臺不能事先確定的SMTP服務器進行通信,它需要具有根據收件人地址的域名查詢出該域的SMTP服務器的功能,即需要具有查詢域名的MX記錄的功能。郵件客戶端軟件被設置為與固定的SMTP服務器通信,它可以直接與指定的SMTP服務器建立網絡連接,因此它不需要具有根據收件人地址的域名來查詢該域的SMTP服務器的功能。
(2)對于來自某個郵件客戶端軟件的郵件傳輸請求,SMTP服務器可能需要對發件人的用戶賬號信息進行驗證,因此,郵件客戶端軟件需要具有向SMTP服務器傳送用戶賬號信息的功能。SMTP服務器能夠直接接受來自其他SMTP服務器的郵件傳輸請求,因此,SMTP服務器在發送郵件時根本不需要傳送用戶賬號信息的功能。
三、什么是MX記錄
在DNS服務器上除了可以建立主機名與IP地址的映射外,還可以建立其他多種映射,例如,建立某個主機名與其別名的映射;建立某個域名與其SMTP服務器的映射。在DNS服務器上創建的各項映射關系稱為記錄,一項映射關系就是一條記錄,在DNS服務器上創建的主機名與IP地址的映射關系稱為A記錄,主機名與別名的映射關系稱為CNAME記錄,域名與其SMTP服務器的映射關系稱為MX記錄。
在DNS服務器上為什么要建立MX記錄呢?即為什么要建立域名與其SMTP服務器的映射關系呢?這與電子郵件地址的表示形式和工作原理有關。郵件地址后綴部分表示的通常都是一個域名,而不是接收郵件的服務器的主機名,例如,郵件地址“zxx@it315.org”中的“it315.org”對應的就是一個域名。域只是一個邏輯組合概念,它并不代表真正的計算機,對于使用某個域名作為后綴的郵件地址,外界發送給它的電子郵件必須由一臺專門的SMTP服務器來進行接收和處理,接收和處理某個域的電子郵件的SMTP服務器即為該域的SMTP服務器,外界發送給某個域的電子郵件實際上都是發送給該域的SMTP服務器。外界如何知道一個域的SMTP服務器的地址呢?這就是通過管理該域的DNS服務器上的MX記錄來獲得的,這也就是在DNS服務器上為什么要建立域名與其SMTP服務器的映射關系的原因。
當某臺SMTP服務器要給“zxx@it315.org”發送一封電子郵件時,該SMTP服務器將根據郵件地址的后綴部分而去查詢“it315.org”這個域的MX記錄,得到這個域的SMTP服務器的主機名為“mail.it315.org”,然后將郵件發送給“mail.it315.org”這個SMTP服務器。