用SMTP,POP3訪問Exchange郵箱:Exchange2003系列之六

SMTP/POP3訪問郵箱暨SMTP/POP3原理

 

Exchange早期版本設計時側重於在企業內部提供郵件服務,郵件傳輸以MAPI爲主;Exchange的後續版本增強了對Internet郵局的支持,現在Exchange2003可以作爲一個標準的Internet郵局爲用戶提供服務,也可以和互聯網上的其他Internet郵局進行交互。本文我們將介紹以下內容:
  如何用Outlook Express作客戶端軟件,通過SMTPPOP3協議訪問郵箱

  Exchange和其他互聯網郵局通信時注意事項

 SMTPPOP3原理分析

  ESMTP

  BASE64編碼

 

實驗拓撲如下圖,Florence是域控制器和CA服務器,BerlinExchange服務器,Istanbul是客戶機

 

  如何用Outlook Express作客戶端軟件,通過SMTPPOP3協議訪問郵箱

 

標準的互聯網郵局包括SMTPPOP3兩個組件,SMTP負責郵件的出站/入站,POP3負責郵件存儲。我們可以利用SMTP把郵件發送出去,也可以利用POP3從自己的郵箱中下載郵件。Exchange2003SMTP來源於Win2003中的IISPOP3倒是和Win2003POP3服務沒有任何關係。Exchange2003POP3服務默認是禁用狀態,所以首先要啓動POP3服務。在Exchange服務器上,開始-管理工具-服務,找到“Microsoft Exchange POP3服務,將POP3服務的啓動類型改爲自動,然後啓動POP3服務。

 

這時Exchange服務器已經可以提供SMTPPOP3服務了,我們在客戶機Istanbul上,以Outlook Express(以後簡稱OE)作爲客戶端軟件,測試一下SMTPPOP3的訪問狀況。啓動OE後,在工具菜單中選擇賬戶,在“郵件”標籤下,選擇 添加“郵件”

 

填寫郵件發送者的名稱,在此我們填寫一個用戶名,如下圖所示

接下來要寫用戶的郵件地址

最重要的參數,分別對SMTPPOP3服務器進行描述,可以用NETBIOS名稱,域名或是IP地址

 

輸入用戶名和口令就可以完成郵件賬號的設置了

配置完郵件賬戶後,啓動OE,點擊“創建郵件”,給administrator發一封測試信看看
,如下圖所示

看看管理員的郵箱,是不是已經收到信了,這證明SMTP工作正常。

 

管理員回封信,看看dufei能否收到,在 OE的“發送/接收”下拉菜單中選擇“接收全部郵件”,看看收件箱裏有沒有回信,如下圖所示,已收到回信,POP3工作正常。

 

  Exchange和其他互聯網郵局通信時注意事項

做完上述操作後,我們在Exchange郵局內部已經可以正常使用SMTPPOP3了,但要和其他的互聯網郵局通信還需要注意以下兩點:
1  設置DNS中的MX記錄

2  設置SMTP服務器的中繼

 

如果DNS服務器中沒有正確設置MX記錄,那麼我們的郵局將無法收到其他郵局發來的郵件。SMTP服務器向其他郵局發送郵件時,要通過查詢DNSMX記錄來定位接收郵局的郵件服務器,否則互聯網上這麼多主機,SMTP服務器怎麼知道哪臺可以接收郵件?早期的電子郵件地址格式是郵箱名@郵件服務器名,這種郵件地址中已經包含了郵件服務器的完全合格域名,因此SMTP服務器直接將郵件發送給郵件服務器就可以了。現在的電子郵件地址格式改成了郵箱名@域名,不再直接指明接收郵件的服務器,因此SMTP服務器就只能依靠MX記錄來定位接收郵件服務器了。

 

Exchange服務器中的SMTP中繼默認對所有未通過身份驗證的用戶都是禁用的,所以如果我們向向外網發一封郵件,例如發到[email protected],我們會看到如下圖錯誤提示,提示中明確指出 Unable to relay”,不能中繼。那如何修改設置呢?

 

Exchange服務器上,開始-程序-Microsoft Exchange-系統管理器-服務器-協議-SMTP-默認SMTP虛擬服務器-屬性-訪問-中繼,如下圖

 

當前的中繼設置如下圖所示,只有通過身份驗證的郵件發送者纔可以將郵件中繼到其他郵局

 


 

修改中繼設置,允許192.168.2.0子網內的計算機進行郵件中繼,不要設置成允許任何人進行郵件中繼,那會招致大量的垃圾郵件發送

 

改完中繼設置後,重啓SMTP服務,可以把信發往其他的互聯網郵局了。

 

  SMTPPOP3原理分析

 

我們用SMTPPOP3在互聯網上進行郵件收發,郵件傳遞的過程是什麼樣的?我們假設163郵局的User1準備給263郵局的User2發信,大致過程如下
1         User1通過郵件客戶端軟件用SMTP協議把待發郵件提交到163郵局的SMTP服務器

2         163郵局的SMTP服務器通過查詢DNSMX記錄,定位263郵局的郵件服務器,然後通過SMTP協議把郵件中繼到263郵局的SMTP服務器

3         263郵局的SMTP服務器將郵件入站後,把郵件轉給POP3服務器

4       POP3服務器把郵件存儲在User2的郵箱中

5       User2利用郵件客戶端軟件通過POP3協議訪問263郵局的POP3服務器,並從自己的郵箱中把郵件下載到本機計算機

 

接下來我們具體分析一下第一步和第五步,看看OE如何利用SMTP協議提交郵件,以及如何利用POP3協議訪問郵箱。

 

先分析SMTP,根據RPC821SMTP協議提供了一些簡單的四個字符原語操作指令,OE就利用了這些指令發送郵件。常用的SMTP命令有

HELO :發件方問候收件方,後面是發件人的IP地址或計算機名。收件方回答OK時標識自

己的身份。問候和確認過程表明兩臺機器可以進行通信。

MAIL FROM: 這個命令用來開始傳送郵件,命令後面的參數是發件人郵件地址。         

RCPT TO: 這個命令告訴收件方收件人的郵箱。當有多個收件人時,需要多次使用該命令,

每次只能指明一個人。

DATA :收件方把該命令之後的數據作爲發送的數據,數據被加入數據緩衝區中。        

RSET :這個命令用來通知收件方復位,所有已存入緩衝區的收件人數據,發件人數據和待

傳送的數據都必須清除,接收放必須回答OK

NOOP :空操作,不影響任何參數,只是要求接收方回答OK

QUIT SMTP要求接收放必須回答OK,然後中斷傳輸

 

OE發送郵件時,首先連接郵件服務器的25端口,我們在命令行下模擬這個過程

telnet berlin 25

Helo Istanbul (客戶端進行自我介紹,我的名字是Istanbul
mail from:[email protected] (客戶機請求服務器替自己發一封信,信的發件人是新浪的管理員,這當然是胡說,沒關係的,SMTP服務器並不校驗)
rcpt to:[email protected] (客戶機描述這封信的收件地址)
data (客戶機表示要開始輸入信件內容)
subject:mail test!  (客戶機輸入郵件主題 mail test!)
Just testting!      (客戶機輸入郵件內容 Just testting!
敲一下回車 敲一下.() 再敲一下回車 郵件內容結束,郵件開始進入發送隊列
上述過程如下圖所示:

 

 

檢查一下管理員的郵箱,有沒有收到這樣一封信,如下圖所示,真的收到了,而且以爲是sina的管理員發來的,要記住,郵件是很容易欺騙的。

這樣我們就用SMTP命令發了一封電子郵件,是不是很簡單呢?其實我們可以來看一下OE發信的過程,打開OE,在 “工具”菜單中選擇“選項”,點擊“維護”標籤,在疑難解答下選擇“郵件”,這樣OE發送郵件時的過程會記錄在日誌文件中供我們分析使用。

 

OE中發送一封郵件,測試一下。

郵件發出去了,檢查下圖路徑中的smtp.log,這就是發送郵件時的日誌文件

 

 

打開日誌文件,裏面記錄了OESMTP服務器交互的全過程,[rx]代表OE收到的數據,[tx]代表OE發出的數據,仔細看看,OE作的操作和我們剛剛在命令行中作的完全一樣。

 

 

我們再來分析一下OE利用POP3協議從Exchange郵件服務器收信的過程,POP3SMTP類似,根據RFC1939也定義了一些四字符的原語命令,常用的POP3命令有
USER  輸入郵箱名
PASS  輸入郵箱密碼
STAT 
  顯示郵箱狀態
LIST  
  列出郵箱中的郵件
RETR 
  讀取郵件內容
DELE
   將郵件標記爲刪除
NOOP 
空操作,僅返回一個迴應
RSET
   中斷當前操作,將標記爲刪除的郵件恢復
QUIT        
退出POP3會話

 

我們舉例從dufei郵箱收信,我們使用下列指令
telnet  berlin  110
user dufei (準備訪問dufei的郵箱)
pass  passW0rd (輸入dufei的郵箱口令)
list (列出郵箱中的郵件)
Retr  1 (顯示第一封郵件的內容)
dele  1  (刪除第一封郵件)
quit  (退出)

 

過程如下圖所示,有興趣的話大家可以結合OE中的POP3日誌進行分析。

 

  ESMTP

從前面的SMTP原理分析中我們可以看出,SMTP在設計時完全沒有考慮安全問題,任何人都可以很方便地利用SMTP服務器發送郵件,這種處於安全真空的設計在互聯網的初期是成立的,畢竟那時無孔不入的商業還不曾***進這片專屬於科研人員的淨土。但現在如果在公網上放置這麼一個服務器,那肯定會後果很嚴重,垃圾郵件立刻就會把你淹沒。因此,ESMTPSMTP進行了升級,主要是在郵件的發送過程中支持身份驗證,而且在傳輸郵件內容時也支持用SSL進行加密,大大提高了安全性。
Exchange中把SMTP升級到ESMTP很容易,只要在SMTP服務器上禁止匿名訪問,再選擇一種身份驗證方式就可以了。在Exchange服務器上,開始-程序-Microsoft Exchange-系統管理器-服務器-協議-SMTP-默認SMTP虛擬服務器-屬性-訪問-身份驗證,如下圖所示


 

我們取消“匿名訪問”和“集成Windows身份驗證”,只保留“基本身份驗證“,現在這就是一臺ESMTP服務器了,重新啓動SMTP服務,然後在Istanbul上我們發送一封郵件測試一下,如下圖所示,發信出問題了,錯誤提示告訴我們由於沒有進行身份驗證,我們沒有權限進行郵件發送

 

既然要求身份驗證,那我們就滿足這個條件,在OE的工具菜單中選擇賬戶,點擊郵件標籤,查看郵件賬戶的屬性,如下圖所示,勾選“我的服務器要求身份驗證”,點擊“設置”

 

 

在設置中,我們填寫了用戶名和口令,再來試試,發出去了!

調出日誌smtp.log查看一下發送細節,看到了一個奇怪的現象,如下圖紅框標示處顯示的是用戶名,但我們填寫的用戶名是dufei,怎麼在這裏成了ZHVmZWk=?不要着急,這就是我們下面要講到的BASE64編碼

 

BASE64編碼

BASE64編碼其實很簡單,它把常用的64個字符重新做了個編碼表。每個BASE64編碼用62進制數表示,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的轉換過程中,ASCII碼會每3個爲一組轉換爲4BASE64編碼,因爲每個ASICC碼爲8位二進制數,3×824,每個BASE64編碼是6位二進制數,24÷64

如果ASCII碼字符不正好是3的倍數,例如dufei5ASCII碼,這該怎麼辦呢?系統會自動用0進行填充,將ASCII碼湊成3的倍數。如果有1個ASCII碼是被填充的,BASE64編碼中會出現一個=符號,如果有2ASCII嗎是被填充的,BASE64編碼中會出現兩個=號,不可能有三個=出現的,大家仔細想想爲什麼?

dufei爲例,dufeiASCII碼爲 100 117 102 101 105, ASCII碼爲100 117 102 101 105 。展開成二進制是 01100100  01110101  01100110  01100101  01101001,每6個一組形成BASE64編碼是 011001 000111 010101 100110  011001 010110 1001,由於dufei只有5ASCII碼,系統會用0填充爲6ASICC碼,填充的結果是011001 000111 010101 100110  011001 010110 100100 000000,藍色部分爲系統填充內容。10進製表示就是 25  7  21  38  25  22  36  ,查詢BASE64編碼表 可知分別對應  ZHVmZWK,最後那個由填充產生的000000用一個=表示。所以最後我們看到的BASE64編碼是ZHVmZWk=

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章