從1996年的Windows CE 1.0 到最新的Windows CE.Net, WINCE 已有8年歷史。Windows CE設計簡單靈活,可在各種小型嵌入式系統(tǒng)中使用,且其功能強大,在最新一代的高性能工業(yè)和家用設備中也得到了充分使用。Microsoft eMbedded Visual Tools是微軟公司專為WINCE設備開發(fā)的一套開發(fā)環(huán)境,功能強大,開發(fā)方便快捷。二者的結(jié)合為實現(xiàn)嵌入式電子郵件系統(tǒng)提供了絕佳的開發(fā)環(huán)境。
本嵌入式電子郵件系統(tǒng),即是以Windows CE為開發(fā)平臺,結(jié)合Embedded Visual Basic 3.0開發(fā)工具設計實現(xiàn)的。最后采用Microsoft POCKET PC2002 for Windows SDK工具完成系統(tǒng)的測試。
1 移動設備郵件系統(tǒng)的工作原理
目前網(wǎng)絡上的電子郵件傳送有點如同日常信件中的普通信件發(fā)送,日常生活中人們首先將郵件交給郵局,郵局再按照信封上的地址投遞,最后將郵件發(fā)到收信的人信箱里,收信人只要憑借他的信箱鑰匙就可以拿到信件。同樣的一封電子郵件從用戶手中發(fā)出,首先有一個程序把這封郵件發(fā)送到SMTP服務器(發(fā)送郵件的服務器)上,再由服務器負責將郵件傳遞到目的信箱。然后需要一個程序接受信箱的郵件,當然也不是只要隨便有一個程序就可以的,還需要帳號(如同收信人姓名)與口令(如同信箱鑰匙)。所以很明顯,發(fā)送郵件至少需要4個處理不同任務,有不同功能的程序:發(fā)送郵件到服務器的程序,即發(fā)送郵件客戶端程序;在網(wǎng)絡上傳送郵件到對方信箱的程序,即SMTP服務器程序;接受郵件并存貯給用戶提取的服務器程序,即POP3服務器程序;從POP3服務器上收取郵件的程序,即接受郵件客戶端程序。
收發(fā)電子郵件依靠一套標準的會話協(xié)議,其中最為著名現(xiàn)在最常用的有:SMTP協(xié)議,該協(xié)議規(guī)定了與SMTP服務器進行對話的一系列命令與過程標準;POP3協(xié)議,該協(xié)議規(guī)定了與POP3服務器進行對話的一系列命令與過程標準。還有IMAP4協(xié)議,類似POP3的郵件接收協(xié)議。
1.1 SMTP協(xié)議
SMTP(Simple Mail Transfer Protocol)又叫做簡單郵件傳輸協(xié)議。它主要對如何將電子郵件從發(fā)送方地址傳送到接收方,也即是對傳輸?shù)囊?guī)則做了規(guī)定。SMTP協(xié)議的通信模型并不復雜,主要工作集中在發(fā)送SMTP和接收SMTP上:首先針對用戶發(fā)出的郵件請求,由發(fā)送SMTP建立一條連接到接收SMTP的雙工通訊鏈路,發(fā)送SMTP負責向接收SMTP發(fā)送SMTP命令,而接收SMTP則負責接收并反饋應答。可大致用下頁的SMTP通訊模型示意圖來表示:
圖 1 SMTP 通訊模型示意圖
1.2 POP3協(xié)議
POP3(Post Office Protocol Version 3)是整個電子郵件系統(tǒng)的基本協(xié)議之一。POP3適用于C/S結(jié)構(gòu)的脫機模型的電子郵件協(xié)議。 初始時,服務器通過偵聽TCP端口110開始POP3服務,當客戶主機需要使用服務時,它將與服務器主機建立TCP連接。當連接建立后,POP3發(fā)送確認消息,客戶和POP3服務器相互(分別)交換命令和響應。這一過程一直要持續(xù)到連接終止。
2 系統(tǒng)設計
該郵件系統(tǒng)由兩個客戶端程序組成,SMTP MAILER實現(xiàn)郵件和附件的發(fā)送,POP3 MAIL CHECKER用于登陸郵件服務器接受原始的郵件信息。
2.1 郵件發(fā)送端設計與實現(xiàn)
2.1.1發(fā)送端工作流程
下圖是郵件發(fā)送流程圖
2.1.2具體實現(xiàn)
發(fā)送郵件的功能主要由eMbedded Visual Basic下的WINSOCK控件實現(xiàn)WINSOCK即Windows Socket,是微軟公司對Socket編程接口的集成。WINSOCK使用IP協(xié)議,同時支持TCP與UDP協(xié)議,在收發(fā)郵件這類基本網(wǎng)絡數(shù)據(jù)通信的前提下,WINSOCK控件是最好的選擇。
以A—H表示郵件發(fā)送的各部分設計:
A 在這個郵件程序中,首先要連接SMTP的郵件服務因此在cmdSend_Click()事件中最先實施的是Wsock.RemoteHost = ServerIp連接設定的服務器主機
Wsock.RemotePort = ServerPort 設定默認的端口。
B 然后開始構(gòu)造郵件格式,定義字符串m_Date為發(fā)送日期,字符串mData為郵件頭。語句m_Date = FormatDateTime(Date, [vbShortDate]) & “, ” & FormatDateTime(Date, [vbLongDate]) & “ ” & FormatDateTime(Time, [vbLongTime]) & “” & “ -0600” 定義了郵件的發(fā)送日期。
構(gòu)造郵件標題 mData = “From:” & Chr(32) & strSendname & vbCrLf & _
“Date:” & Chr(32) & m_Date & vbCrLf & _
“X-Mailer: Harold Smtp Mailer V1.0” & vbCrLf & _
“To:” & Chr(32) & strReceiveName & vbCrLf & _
“Subject:” & Chr(32) & strSubject & vbCrLf
這個典型的郵件標題包含了:發(fā)件人,發(fā)件日期,收件人,主題以及發(fā)送郵件的程序名稱。
C 當郵件程序連上服務器后,進如下一步打開郵件對話,利用WINSOCK控件發(fā)送對話信息:Wsock.SendData “HELO” & “ ” & Wsock.LocalHostName & vbCrLf
如果SMTP服務器沒有返回“250” 應答碼,則提示“Unable to establish transaction”。
D 由于現(xiàn)在的郵件服務器多采用ESMTP協(xié)議,因此需要客戶端程序發(fā)送用戶名與密碼等認證信息,故在打開對話過后便進入“Authentication“過程,:
Wsock.SendData “AUTH LOGIN” & vbCrLf
If Not WaitForResponse(“334”, 10) Then
txtMsg.Text = “Unable to Connect with ESMTP server.。..。.”
Wsock.SendData Encode(User) & vbCrLf
Wsock.SendData Encode(Pass) & vbCrLf
在這里調(diào)用了自編的Encode函數(shù)并發(fā)送了經(jīng)過BASE64編碼的用戶名與密碼信息。
E 接著是發(fā)送發(fā)送方與接受方的地址:
Wsock.SendData “MAIL FROM:” & “ ” & strFromMail & vbCrLf ‘發(fā)送方
Wsock.SendData “RCPT TO:” & “ ” & strToMail & vbCrLf ‘接受方
F 下一步是發(fā)送消息體(針對不含附件的RFC822郵件):
Wsock.SendData “DATA” & vbCrLf ‘發(fā)送消息體
Wsock.SendData mData & vbCrLf ‘發(fā)送郵件標題
Wsock.SendData strContent & vbCrLf ‘發(fā)送正文
Wsock.SendData “?!?& vbCrLf ‘發(fā)送結(jié)束符
G 在發(fā)送郵件時做了附件的判斷:
If Combo1.List 》 0 Then 如果附件列表非空則轉(zhuǎn)入MIME郵件的構(gòu)造。MIME郵件的標題部分與RFC822相同,但要擴充一些內(nèi)容
Wsock.SendData “MIME-Version:1.0” & vbCrLf
Wsock.SendData “Content-Type:multipart/mixed;” & vbCrLf
Wsock.SendData “ boundary = Unique-Boundary” & vbCrLf & vbCrLf
Wsock.SendData “[ Random garbage here ]” & vbCrLf & vbCrLf
Wsock.SendData vbCrLf & “--Unique-Boundary” & vbCrLf
Wsock.SendData “Content-type: text/plain;charset=US-ASCII” & vbCrLf & vbCrLf
Wsock.SendData strContent & vbCrLf & vbCrLf
Wsock.SendData “--Unique=Boundary” & vbCrLf
Wsock.SendData “Content-Type: multipart/parallel;boundary = Unique-Boundary-2” & vbCrLf & vbCrLf
Wsock.SendData “--Unique=Boundary -2” & vbCrLf
Wsock.SendData “Content-Type: application/octest-stream;” & vbCrLf
Wsock.SendData “name =” & strAttachname & vbCrLf
Wsock.SendData “Content-Transfer-Encoding:base64” & vbCrLf
Wsock.SendData “Content-Disposition:inline;” & vbCrLf
這里附件也通過編碼加入了郵件中。
H 最后結(jié)束郵件對話,返回信息:
Wsock.SendData “QUIT” & vbCrLf
txtMsg.Text = txtMsg.Text & “Mail send success!”
2.2 郵件接受端的設計與實現(xiàn)
2.2.1 接收端工作流程
圖3 接收端工作流程
2.2.2 功能實現(xiàn)
POP3的通信與SMTP一樣,也可以通過Winsock來實現(xiàn)。該POP3郵件程序的過程如同POP3對話一樣。POP3服務器的應答要比SMTP簡單許多,其操作的應答狀態(tài)碼只有兩個“+OK”表示成功,“+ERR”表示失敗。具體細節(jié)不再贅述。
3 軟件模塊功能測試
為了評估電子郵件系統(tǒng)的兩個客戶端程序的實際可用性,必須對其系統(tǒng)的各個模塊進行測試。本測試所采用的是微軟開發(fā)的POCKET PC2002 for Windows SDK程序包。
3.1 郵件發(fā)送客戶端的測試
為了測試郵件發(fā)送系統(tǒng)的功效,可在已配置網(wǎng)絡的模擬器上載入郵件發(fā)送程序,使其工作在虛擬機的操作系統(tǒng)中。
配置好SMTP服務器資料與ESMTP所需的認證信息后,發(fā)送一封簡單的RFC822電子郵件到對方信箱中,成功發(fā)送。同樣的方式,測試發(fā)送MIME郵件,得到如下測試結(jié)果:
圖4 發(fā)送端測試結(jié)果
3.2 郵件接收客戶端的測試
同郵件發(fā)送客戶端一樣,采用同樣的網(wǎng)絡設置,載入程序,登入網(wǎng)絡。先選擇POP3的郵件服務器地址,設定用戶信息與密碼,確認后獲得基礎的認證,并傳回郵箱中信件的數(shù)量與大小統(tǒng)計。經(jīng)測試收到了預期的效果。
以上兩個程序的測試都是在網(wǎng)絡環(huán)境下進行的,如果網(wǎng)絡連接不正常或其他原因?qū)е锣]件的收發(fā)不成功,在程序設計的出錯處理中已經(jīng)有所考慮。
4 結(jié)語
與網(wǎng)絡結(jié)合已成為所有信息產(chǎn)品的發(fā)展趨勢,隨著PDA等嵌入式系統(tǒng)的日益普及以及無線互聯(lián)技術(shù)(802.11B)的發(fā)展,利用PDA實現(xiàn)掌上電腦與臺式機間相互傳遞電子郵件,已經(jīng)成為一種結(jié)合時尚和便利于一身的通信手段。作者設計實現(xiàn)的基于Windows CE的嵌入式電子郵件系統(tǒng),為實現(xiàn)移動設備之間郵件傳輸作了良好的嘗試。
責任編輯:gt
-
嵌入式
+關(guān)注
關(guān)注
5096文章
19189瀏覽量
308028 -
服務器
+關(guān)注
關(guān)注
12文章
9335瀏覽量
86138 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6900瀏覽量
123812
發(fā)布評論請先 登錄
相關(guān)推薦
主流嵌入式操作系統(tǒng)有哪些?
求一款基于Windows CE的嵌入式電子郵件系統(tǒng)設計
嵌入式Linux操作系統(tǒng)的使用
嵌入式系統(tǒng)應用開發(fā)工具的主要目的是什么
嵌入式linux、arm嵌入式操作系統(tǒng)的相關(guān)資料分享
嵌入式操作系統(tǒng)UCOSII移植筆記
基于數(shù)字簽名的安全電子郵件系統(tǒng)的研究
基于Windows CE的嵌入式電子郵件系統(tǒng)設計與實現(xiàn)
實時操作系統(tǒng)用于嵌入式應用系統(tǒng)的設計
![實時<b class='flag-5'>操作系統(tǒng)</b>用于<b class='flag-5'>嵌入式</b>應用<b class='flag-5'>系統(tǒng)</b>的設計](https://file.elecfans.com/web2/M00/49/28/pYYBAGKhtDyAJcvvAAANMLIBL8Q432.jpg)
基于Windows CE的嵌入式電子郵件系統(tǒng)設計與實現(xiàn)
嵌入式操作系統(tǒng)FreeRTOS的原理實現(xiàn)
![<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>FreeRTOS的原理<b class='flag-5'>實現(xiàn)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
嵌入式Linux_C語言開發(fā)工具
![<b class='flag-5'>嵌入式</b>Linux_C語言<b class='flag-5'>開發(fā)工具</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
課堂筆記之嵌入式Linux操作系統(tǒng)
![課堂筆記之<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>操作系統(tǒng)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
慕課嵌入式系統(tǒng)(第六章.嵌入式開發(fā)工具)
![慕課<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>(第六章.<b class='flag-5'>嵌入式開發(fā)工具</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
嵌入式操作系統(tǒng)
![<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論