用SMTP/POP3訪問(wèn)郵箱暨SMTP/POP3原理
Exchange早期版本設(shè)計(jì)時(shí)側(cè)重于在企業(yè)內(nèi)部提供郵件服務(wù),郵件傳輸以MAPI為主;Exchange的后續(xù)版本增強(qiáng)了對(duì)Internet郵局的支持,現(xiàn)在Exchange2003可以作為一個(gè)標(biāo)準(zhǔn)的Internet郵局為用戶提供服務(wù),也可以和互聯(lián)網(wǎng)上的其他Internet郵局進(jìn)行交互。本文我們將介紹以下內(nèi)容:
一 如何用Outlook Express作客戶端軟件,通過(guò)SMTP,POP3協(xié)議訪問(wèn)郵箱
二 Exchange和其他互聯(lián)網(wǎng)郵局通信時(shí)注意事項(xiàng)
三 SMTP,POP3原理分析
四 ESMTP
五 BASE64編碼
實(shí)驗(yàn)拓?fù)淙缦聢D,Florence是域控制器和CA服務(wù)器,Berlin是Exchange服務(wù)器,Istanbul是客戶機(jī)
一 如何用Outlook Express作客戶端軟件,通過(guò)SMTP,POP3協(xié)議訪問(wèn)郵箱
標(biāo)準(zhǔn)的互聯(lián)網(wǎng)郵局包括SMTP和POP3兩個(gè)組件,SMTP負(fù)責(zé)郵件的出站/入站,POP3負(fù)責(zé)郵件存儲(chǔ)。我們可以利用SMTP把郵件發(fā)送出去,也可以利用POP3從自己的郵箱中下載郵件。Exchange2003的SMTP來(lái)源于Win2003中的IIS,POP3倒是和Win2003的POP3服務(wù)沒(méi)有任何關(guān)系。Exchange2003的POP3服務(wù)默認(rèn)是禁用狀態(tài),所以首先要啟動(dòng)POP3服務(wù)。在Exchange服務(wù)器上,開(kāi)始-管理工具-服務(wù),找到“Microsoft Exchange POP3”服務(wù),將POP3服務(wù)的啟動(dòng)類型改為自動(dòng),然后啟動(dòng)POP3服務(wù)。
這時(shí)Exchange服務(wù)器已經(jīng)可以提供SMTP和POP3服務(wù)了,我們?cè)诳蛻魴C(jī)Istanbul上,以Outlook Express(以后簡(jiǎn)稱OE)作為客戶端軟件,測(cè)試一下SMTP和POP3的訪問(wèn)狀況。啟動(dòng)OE后,在工具菜單中選擇賬戶,在“郵件”標(biāo)簽下,選擇 添加“郵件”
填寫郵件發(fā)送者的名稱,在此我們填寫一個(gè)用戶名,如下圖所示
接下來(lái)要寫用戶的郵件地址
最重要的參數(shù),分別對(duì)SMTP和POP3服務(wù)器進(jìn)行描述,可以用NETBIOS名稱,域名或是IP地址
輸入用戶名和口令就可以完成郵件賬號(hào)的設(shè)置了
配置完郵件賬戶后,啟動(dòng)OE,點(diǎn)擊“創(chuàng)建郵件”,給administrator發(fā)一封測(cè)試信看看
,如下圖所示
看看管理員的郵箱,是不是已經(jīng)收到信了,這證明SMTP工作正常。
管理員回封信,看看dufei能否收到,在 OE的“發(fā)送/接收”下拉菜單中選擇“接收全部郵件”,看看收件箱里有沒(méi)有回信,如下圖所示,已收到回信,POP3工作正常。
二 Exchange和其他互聯(lián)網(wǎng)郵局通信時(shí)注意事項(xiàng)
做完上述操作后,我們?cè)?/span>Exchange郵局內(nèi)部已經(jīng)可以正常使用SMTP,POP3了,但要和其他的互聯(lián)網(wǎng)郵局通信還需要注意以下兩點(diǎn):
1 設(shè)置DNS中的MX記錄
2 設(shè)置SMTP服務(wù)器的中繼
如果DNS服務(wù)器中沒(méi)有正確設(shè)置MX記錄,那么我們的郵局將無(wú)法收到其他郵局發(fā)來(lái)的郵件。SMTP服務(wù)器向其他郵局發(fā)送郵件時(shí),要通過(guò)查詢DNS的MX記錄來(lái)定位接收郵局的郵件服務(wù)器,否則互聯(lián)網(wǎng)上這么多主機(jī),SMTP服務(wù)器怎么知道哪臺(tái)可以接收郵件?早期的電子郵件地址格式是郵箱名@郵件服務(wù)器名,這種郵件地址中已經(jīng)包含了郵件服務(wù)器的完全合格域名,因此SMTP服務(wù)器直接將郵件發(fā)送給郵件服務(wù)器就可以了?,F(xiàn)在的電子郵件地址格式改成了郵箱名@域名,不再直接指明接收郵件的服務(wù)器,因此SMTP服務(wù)器就只能依靠MX記錄來(lái)定位接收郵件服務(wù)器了。
Exchange服務(wù)器中的SMTP中繼默認(rèn)對(duì)所有未通過(guò)身份驗(yàn)證的用戶都是禁用的,所以如果我們向向外網(wǎng)發(fā)一封郵件,例如發(fā)到yuelei1976@yahoo.com.cn,我們會(huì)看到如下圖錯(cuò)誤提示,提示中明確指出 “Unable to relay”,不能中繼。那如何修改設(shè)置呢?
在Exchange服務(wù)器上,開(kāi)始-程序-Microsoft Exchange-系統(tǒng)管理器-服務(wù)器-協(xié)議-SMTP-默認(rèn)SMTP虛擬服務(wù)器-屬性-訪問(wèn)-中繼,如下圖
當(dāng)前的中繼設(shè)置如下圖所示,只有通過(guò)身份驗(yàn)證的郵件發(fā)送者才可以將郵件中繼到其他郵局
修改中繼設(shè)置,允許192.168.2.0子網(wǎng)內(nèi)的計(jì)算機(jī)進(jìn)行郵件中繼,不要設(shè)置成允許任何人進(jìn)行郵件中繼,那會(huì)招致大量的垃圾郵件發(fā)送
改完中繼設(shè)置后,重啟SMTP服務(wù),可以把信發(fā)往其他的互聯(lián)網(wǎng)郵局了。
三 SMTP,POP3原理分析
我們用SMTP,POP3在互聯(lián)網(wǎng)上進(jìn)行郵件收發(fā),郵件傳遞的過(guò)程是什么樣的?我們假設(shè)163郵局的User1準(zhǔn)備給263郵局的User2發(fā)信,大致過(guò)程如下
1 User1通過(guò)郵件客戶端軟件用SMTP協(xié)議把待發(fā)郵件提交到163郵局的SMTP服務(wù)器
2 163郵局的SMTP服務(wù)器通過(guò)查詢DNS的MX記錄,定位263郵局的郵件服務(wù)器,然后通過(guò)SMTP協(xié)議把郵件中繼到263郵局的SMTP服務(wù)器
3 263郵局的SMTP服務(wù)器將郵件入站后,把郵件轉(zhuǎn)給POP3服務(wù)器
4 POP3服務(wù)器把郵件存儲(chǔ)在User2的郵箱中
5 User2利用郵件客戶端軟件通過(guò)POP3協(xié)議訪問(wèn)263郵局的POP3服務(wù)器,并從自己的郵箱中把郵件下載到本機(jī)計(jì)算機(jī)
接下來(lái)我們具體分析一下第一步和第五步,看看OE如何利用SMTP協(xié)議提交郵件,以及如何利用POP3協(xié)議訪問(wèn)郵箱。
先分析SMTP,根據(jù)RPC821,SMTP協(xié)議提供了一些簡(jiǎn)單的四個(gè)字符原語(yǔ)操作指令,OE就利用了這些指令發(fā)送郵件。常用的SMTP命令有
HELO :發(fā)件方問(wèn)候收件方,后面是發(fā)件人的IP地址或計(jì)算機(jī)名。收件方回答OK時(shí)標(biāo)識(shí)自
己的身份。問(wèn)候和確認(rèn)過(guò)程表明兩臺(tái)機(jī)器可以進(jìn)行通信。
MAIL FROM: 這個(gè)命令用來(lái)開(kāi)始傳送郵件,命令后面的參數(shù)是發(fā)件人郵件地址。
RCPT TO: 這個(gè)命令告訴收件方收件人的郵箱。當(dāng)有多個(gè)收件人時(shí),需要多次使用該命令,
每次只能指明一個(gè)人。
DATA :收件方把該命令之后的數(shù)據(jù)作為發(fā)送的數(shù)據(jù),數(shù)據(jù)被加入數(shù)據(jù)緩沖區(qū)中。
RSET :這個(gè)命令用來(lái)通知收件方復(fù)位,所有已存入緩沖區(qū)的收件人數(shù)據(jù),發(fā)件人數(shù)據(jù)和待
傳送的數(shù)據(jù)都必須清除,接收放必須回答OK。
NOOP :空操作,不影響任何參數(shù),只是要求接收方回答OK
QUIT :SMTP要求接收放必須回答OK,然后中斷傳輸
OE發(fā)送郵件時(shí),首先連接郵件服務(wù)器的25端口,我們?cè)诿钚邢履M這個(gè)過(guò)程
telnet berlin 25
Helo Istanbul?。蛻舳诉M(jìn)行自我介紹,我的名字是Istanbul)
mail from:admin@sina.com (客戶機(jī)請(qǐng)求服務(wù)器替自己發(fā)一封信,信的發(fā)件人是新浪的管理員,這當(dāng)然是胡說(shuō),沒(méi)關(guān)系的,SMTP服務(wù)器并不校驗(yàn))
rcpt to:administrator@exchtest.com (客戶機(jī)描述這封信的收件地址)
data (客戶機(jī)表示要開(kāi)始輸入信件內(nèi)容)
subject:mail test! (客戶機(jī)輸入郵件主題 mail test!)
Just testting! (客戶機(jī)輸入郵件內(nèi)容 Just testting!)
敲一下回車 敲一下.(點(diǎn)) 再敲一下回車 郵件內(nèi)容結(jié)束,郵件開(kāi)始進(jìn)入發(fā)送隊(duì)列
上述過(guò)程如下圖所示:
檢查一下管理員的郵箱,有沒(méi)有收到這樣一封信,如下圖所示,真的收到了,而且以為是sina的管理員發(fā)來(lái)的,要記住,郵件是很容易欺騙的。
這樣我們就用SMTP命令發(fā)了一封電子郵件,是不是很簡(jiǎn)單呢?其實(shí)我們可以來(lái)看一下OE發(fā)信的過(guò)程,打開(kāi)OE,在 “工具”菜單中選擇“選項(xiàng)”,點(diǎn)擊“維護(hù)”標(biāo)簽,在疑難解答下選擇“郵件”,這樣OE發(fā)送郵件時(shí)的過(guò)程會(huì)記錄在日志文件中供我們分析使用。
在OE中發(fā)送一封郵件,測(cè)試一下。
郵件發(fā)出去了,檢查下圖路徑中的smtp.log,這就是發(fā)送郵件時(shí)的日志文件
打開(kāi)日志文件,里面記錄了OE與SMTP服務(wù)器交互的全過(guò)程,[rx]代表OE收到的數(shù)據(jù),[tx]代表OE發(fā)出的數(shù)據(jù),仔細(xì)看看,OE作的操作和我們剛剛在命令行中作的完全一樣。
我們?cè)賮?lái)分析一下OE利用POP3協(xié)議從Exchange郵件服務(wù)器收信的過(guò)程,POP3和SMTP類似,根據(jù)RFC1939也定義了一些四字符的原語(yǔ)命令,常用的POP3命令有
USER : 輸入郵箱名
PASS : 輸入郵箱密碼
STAT : 顯示郵箱狀態(tài)
LIST : 列出郵箱中的郵件
RETR : 讀取郵件內(nèi)容
DELE: 將郵件標(biāo)記為刪除
NOOP : 空操作,僅返回一個(gè)回應(yīng)
RSET: 中斷當(dāng)前操作,將標(biāo)記為刪除的郵件恢復(fù)
QUIT 退出POP3會(huì)話
我們舉例從dufei郵箱收信,我們使用下列指令
telnet berlin 110
user dufei (準(zhǔn)備訪問(wèn)dufei的郵箱)
pass passW0rd (輸入dufei的郵箱口令)
list (列出郵箱中的郵件)
Retr 1 (顯示第一封郵件的內(nèi)容)
dele 1 (刪除第一封郵件)
quit (退出)
過(guò)程如下圖所示,有興趣的話大家可以結(jié)合OE中的POP3日志進(jìn)行分析。
四 ESMTP
從前面的SMTP原理分析中我們可以看出,SMTP在設(shè)計(jì)時(shí)完全沒(méi)有考慮安全問(wèn)題,任何人都可以很方便地利用SMTP服務(wù)器發(fā)送郵件,這種處于安全真空的設(shè)計(jì)在互聯(lián)網(wǎng)的初期是成立的,畢竟那時(shí)無(wú)孔不入的商業(yè)還不曾滲透進(jìn)這片專屬于科研人員的凈土。但現(xiàn)在如果在公網(wǎng)上放置這么一個(gè)服務(wù)器,那肯定會(huì)后果很嚴(yán)重,垃圾郵件立刻就會(huì)把你淹沒(méi)。因此,ESMTP對(duì)SMTP進(jìn)行了升級(jí),主要是在郵件的發(fā)送過(guò)程中支持身份驗(yàn)證,而且在傳輸郵件內(nèi)容時(shí)也支持用SSL進(jìn)行加密,大大提高了安全性。
在Exchange中把SMTP升級(jí)到ESMTP很容易,只要在SMTP服務(wù)器上禁止匿名訪問(wèn),再選擇一種身份驗(yàn)證方式就可以了。在Exchange服務(wù)器上,開(kāi)始-程序-Microsoft Exchange-系統(tǒng)管理器-服務(wù)器-協(xié)議-SMTP-默認(rèn)SMTP虛擬服務(wù)器-屬性-訪問(wèn)-身份驗(yàn)證,如下圖所示
我們?nèi)∠澳涿L問(wèn)”和“集成Windows身份驗(yàn)證”,只保留“基本身份驗(yàn)證“,現(xiàn)在這就是一臺(tái)ESMTP服務(wù)器了,重新啟動(dòng)SMTP服務(wù),然后在Istanbul上我們發(fā)送一封郵件測(cè)試一下,如下圖所示,發(fā)信出問(wèn)題了,錯(cuò)誤提示告訴我們由于沒(méi)有進(jìn)行身份驗(yàn)證,我們沒(méi)有權(quán)限進(jìn)行郵件發(fā)送
既然要求身份驗(yàn)證,那我們就滿足這個(gè)條件,在OE的工具菜單中選擇賬戶,點(diǎn)擊郵件標(biāo)簽,查看郵件賬戶的屬性,如下圖所示,勾選“我的服務(wù)器要求身份驗(yàn)證”,點(diǎn)擊“設(shè)置”
在設(shè)置中,我們填寫了用戶名和口令,再來(lái)試試,發(fā)出去了!
調(diào)出日志smtp.log查看一下發(fā)送細(xì)節(jié),看到了一個(gè)奇怪的現(xiàn)象,如下圖紅框標(biāo)示處顯示的是用戶名,但我們填寫的用戶名是dufei,怎么在這里成了ZHVmZWk=?不要著急,這就是我們下面要講到的BASE64編碼
五 BASE64編碼
BASE64編碼其實(shí)很簡(jiǎn)單,它把常用的64個(gè)字符重新做了個(gè)編碼表。每個(gè)BASE64編碼用6個(gè)2進(jìn)制數(shù)表示,BASE64的編碼表如下
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
從ASCII碼向BASE64的轉(zhuǎn)換過(guò)程中,ASCII碼會(huì)每3個(gè)為一組轉(zhuǎn)換為4個(gè)BASE64編碼,因?yàn)槊總€(gè)ASICC碼為8位二進(jìn)制數(shù),3×8=24,每個(gè)BASE64編碼是6位二進(jìn)制數(shù),24÷6=4。
如果ASCII碼字符不正好是3的倍數(shù),例如dufei是5個(gè)ASCII碼,這該怎么辦呢?系統(tǒng)會(huì)自動(dòng)用0進(jìn)行填充,將ASCII碼湊成3的倍數(shù)。如果有1個(gè)ASCII碼是被填充的,BASE64編碼中會(huì)出現(xiàn)一個(gè)=符號(hào),如果有2個(gè)ASCII嗎是被填充的,BASE64編碼中會(huì)出現(xiàn)兩個(gè)=號(hào),不可能有三個(gè)=出現(xiàn)的,大家仔細(xì)想想為什么?
以dufei為例,dufei的ASCII碼為 100 117 102 101 105, ASCII碼為100 117 102 101 105 。展開(kāi)成二進(jìn)制是 01100100 01110101 01100110 01100101 01101001,每6個(gè)一組形成BASE64編碼是 011001 000111 010101 100110 011001 010110 1001,由于dufei只有5個(gè)ASCII碼,系統(tǒng)會(huì)用0填充為6個(gè)ASICC碼,填充的結(jié)果是011001 000111 010101 100110 011001 010110 100100 000000,藍(lán)色部分為系統(tǒng)填充內(nèi)容。用10進(jìn)制表示就是 25 7 21 38 25 22 36 ,查詢BASE64編碼表 可知分別對(duì)應(yīng) ZHVmZWK,最后那個(gè)由填充產(chǎn)生的000000用一個(gè)=表示。所以最后我們看到的BASE64編碼是ZHVmZWk= 。
本文出自 “岳雷的微軟網(wǎng)絡(luò)課堂” 博客,請(qǐng)務(wù)必保留此出處http://yuelei.blog.51cto.com/202879/76302