電子郵件程序_第1頁
電子郵件程序_第2頁
電子郵件程序_第3頁
電子郵件程序_第4頁
電子郵件程序_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

課程設(shè)計VI課程設(shè)計設(shè)計說明書電子郵件接收程序設(shè)計學(xué)生姓名 學(xué)號 班級 成績 指導(dǎo)教師 計算機科學(xué)與技術(shù)系2010年12月31日

網(wǎng)絡(luò)工程課程設(shè)計評閱書題目電子郵件接收程序設(shè)計學(xué)生姓名學(xué)號指導(dǎo)教師評語及成績指導(dǎo)教師簽名:年月日答辯評語及成績答辯教師簽名:年月日教研室意見總成績:室主任簽名:年 月 日課程設(shè)計任務(wù)書2009—2010學(xué)年第1學(xué)期專業(yè):—學(xué)號: 姓名 課程設(shè)計名稱: 設(shè)計題目: 完成期限:自—年—月—日至—年—月—日共—周設(shè)計依據(jù)、要求及主要內(nèi)容(可另加附頁):指導(dǎo)教師(簽字): 教研室主任(簽字): 批準日期: 年月日摘要隨著Internet的飛速發(fā)展,電子郵件(E-Mail)已成為因特網(wǎng)上非常流行,方便的通信方式。電子郵件技術(shù)不斷進步,郵件協(xié)議也不斷發(fā)展,常用的電子郵件協(xié)議有SMTP、P0P3、IMAP4,目前應(yīng)用最廣泛的電子郵件協(xié)議是POP3,其中RFC1939是當前的POP3標準。本課題以C#為開發(fā)平臺,根據(jù)RFC1939協(xié)議,利用Socket套接字編程,實現(xiàn)了基于POP3的郵件接收程序。關(guān)鍵詞:電子郵件;Socket;POP3;RFC1939TOC\o"1-5"\h\z\o"CurrentDocument"課題描述 1問題分析. .....22.1POP3簡介 22.2POP3協(xié)議工作原理.. 2\o"CurrentDocument"邏輯設(shè)計 43.1流程圖 ...4\o"CurrentDocument"詳細設(shè)計. ...54.1主界面設(shè)計 54.2客戶機連接服務(wù)器設(shè)計 ...6\o"CurrentDocument"程序編碼 11\o"CurrentDocument"測試結(jié)果 14結(jié)果分析... 16總結(jié) 17總結(jié) 1718參考文獻181課題描述常用的電子郵件協(xié)議有SMTP、POP3、IMAP4,目前電子郵件接收協(xié)議應(yīng)用最廣泛的是P0P3,RFC1939是當前的POP3協(xié)議標準。POP3服務(wù)器一般使用的是TCP的110號端口。當客戶機端POP代理與POP服務(wù)器端建立TCP連接時,POP3服務(wù)器向客戶機發(fā)回一個問候,交互過程即進入確認狀態(tài)。此時,若客戶機提供了自己的身份并成功確認,即由確認狀態(tài)轉(zhuǎn)入處理狀態(tài);在這個狀態(tài),用戶可用相應(yīng)的命令處理自己的郵件。在完成相應(yīng)的處理過程后客戶機發(fā)出QUIT命令,服務(wù)器將關(guān)閉和客戶端的TCP連接。本課題利用Socket與郵件服務(wù)器建立連接,按照POP3協(xié)議與服務(wù)器交互,進行郵件的查詢和閱讀POP3等電子郵件接受協(xié)議,通過并接受。開發(fā)環(huán)境:VS20082問題分析電子郵件接收程序設(shè)計的實現(xiàn)主要運用RFC1939協(xié)議,它是當前POP3的標準。通過POP協(xié)議,客戶機登錄到服務(wù)器后,可以對自己的郵件進行相關(guān)操作,本課題的程序設(shè)計原則是基于POP3的電子郵件接收程序,它是程序設(shè)計的指導(dǎo)思想。2.1POP3簡介POP3(PostOfficeProtocolVersion3),即郵局辦公協(xié)議,該協(xié)議用于接收郵件的雙方(客戶機、POP3服務(wù)器)進行通信。使用該協(xié)議,用戶可以脫機閱讀信件,而不必把客戶機長期連接到網(wǎng)絡(luò)上,以減少網(wǎng)絡(luò)費用。POP3協(xié)議允許用戶以一定的方式從保存郵件的服務(wù)器(即POP3服務(wù)器)上取走自己的郵件。2.2POP3協(xié)議工作原理POP3提供了一種客戶機/服務(wù)器脫機模型,客戶機通過向服務(wù)器發(fā)送一些命令來完成相應(yīng)的操作。POP3會話共有三個狀態(tài):驗證狀態(tài),事務(wù)狀態(tài)和更新狀態(tài)。當連接服務(wù)器后,POP3會話首先進入驗證狀態(tài),可以使用USER,PASS和QUIT這三個命令,通過服務(wù)器驗證,服務(wù)器鎖定該用戶的信箱,從而防止多個POP3客戶機端同時對此郵箱進行操作。當客戶機POP3采用的是命令行方式,用ASCII碼表示,服務(wù)器響應(yīng)是由一個單獨的命令行或多個命令行組成。響應(yīng)的第一行一ASCII文本+0K或-ERR,指出相應(yīng)的操作狀態(tài)。以下對幾個常用的POP3命令作一些簡要的介紹。USER〈username〉發(fā)送用戶名。若成功,則進入Pass命令階段。Pass〈password〉發(fā)送用戶密碼,若成功,則進入處理狀態(tài)。STAT請求服務(wù)器發(fā)回關(guān)于郵箱的統(tǒng)計資料。如郵件總數(shù)和總字節(jié)數(shù)。LIST返回每個郵件的大小。RETR返回由參數(shù)標識的郵件的全部文本。DELE服務(wù)器將由參數(shù)標識的郵件標記為刪除,由QUIT命令執(zhí)行。RSET服務(wù)器將重置所有標記為刪除的郵件,用于撤銷DELE命令。TOP服務(wù)器將返回由參數(shù)標識的郵件前n行內(nèi)容,n必須是正整數(shù)。QUIT表示客戶端希望結(jié)束本次回話,服務(wù)器將關(guān)閉和客戶端的連接,并刪除有刪除標記的郵件。電子郵件接收程序是基于POP3協(xié)議規(guī)定的方式進行交互的,所以在實現(xiàn)的過程中,按照該協(xié)議指定的時序進行設(shè)計。首先利用套接字方式把客戶端與郵件服務(wù)器端建立連接,然后進行以下操作:(1) 使用USE命令發(fā)送用戶信箱名。(2) 使用Pass命令發(fā)送信箱密碼,如果密碼和信箱不匹配,必須從第(1)步驟重新開始(3) 對信箱郵件進行操作。此階段稱為事務(wù)狀態(tài),在這一個階段,有許多POP3命令可以使用。例如獲取信箱及郵件狀態(tài)的命令,取得郵件內(nèi)容的命令,對郵件進行操作的命令,接受完郵件,斷開POP對話等操作。分別對以上各步驟進行模塊實現(xiàn),總體分為以下幾個模塊:首先客戶端與郵件服務(wù)器端建立連接,然后讀取郵件,最后結(jié)束會話,斷開客戶端與服務(wù)器的連接。邏輯設(shè)計在邏輯設(shè)計中,電子郵件接收程序主要包括以下幾個模塊:(1) 程序的初始化操作(2) 客戶機端與服務(wù)器建立連接(3) 客戶機端收取服務(wù)器端的電子郵件(4) 客戶機端與郵件服務(wù)器斷開連接當客戶機與服務(wù)器建立TCP連接時,客戶機提供了自己的身份并成功確認后,即由確認狀態(tài)轉(zhuǎn)入處理狀態(tài);在這個狀態(tài),用戶可用相應(yīng)的命令處理自己的郵件。在完成相應(yīng)的處理過程后客戶機發(fā)出QUIT命令,服務(wù)器將關(guān)閉和客戶端的TCP連接。程序總體流程圖,如圖3.1所示開始連接服務(wù)器登錄接收郵件處理成功失敗成功成功失敗失敗初始化錯誤處理開始連接服務(wù)器登錄接收郵件處理成功失敗成功成功失敗失敗初始化錯誤處理程序流程圖3.1詳細設(shè)計4.1主界面設(shè)計在電子郵件接收程序的客戶端,用戶需要和服務(wù)器端進行交互,用戶需要輸入將要建立連接的POP服務(wù)器地址,用戶的用戶名,密碼,以及郵件服務(wù)器狀態(tài)的顯示內(nèi)容,連接按鈕,斷開按鈕,讀取信件的按鈕等相關(guān)控件。所以在主界面設(shè)計中按照以下步驟進行設(shè)計。先往窗體上添加如下控件:六個Label控件、四個TextBox控件、一個RichTextBox控件、一個CheckBox控件、一個ListBox控件以及三個Button控件。各個控件的屬性設(shè)置如下表所示:Forml(主窗體)Text屬性POP3郵件接收程序MaximizeBox屬性FalseLabellText屬性POP3服務(wù)器地址:TextAlign屬性MiddleRightLabel2Text屬性用戶名:TextAlign屬性MiddleRightLabel3Text屬性密碼:TextAlign屬性MiddleRightLabel4Text屬性信息:TextAlign屬性MiddleLeftLabel5Text屬性郵件編號:TextAlign屬性MiddleLeftLabel6Text屬性狀態(tài):TextAlign屬性MiddleLeftPopServer、Username、Password、MailNum(TextBox控件)Text屬性(均為空)Password的PasswordChar屬性*Message(RichTextBox控件)Text屬性(為空)BackupChBox(CheckBox控件)Text屬性在郵件服務(wù)器上保留備份Status(ListBox控件)ItemHeight屬性12Connect(Button控件)Text屬性連接FlatStyle屬性FlatDisconnect (Button控件)Text屬性斷開連接FlatStyle屬性FlatEnabled屬性FalseRetrieve(Button控件)Text屬性收取郵件

FlatStyle屬性FlatEnabled屬性False其他屬性均可為默認值。在設(shè)置完以上的各個控件屬性后,對主窗體進行合理的布局,則可得到最終的界面示意圖4.1如下所示:主界面圖4.14.2客戶機連接服務(wù)器設(shè)計首先因為程序中運用到網(wǎng)絡(luò)編程的一些重要的類,如:TcpClient、Networkstream.TcpClient為TCP網(wǎng)絡(luò)服務(wù)提供客戶端連接,命名空間為System.Net.Sockets,TcpClient類提供了一些簡單的方法,用于在同步阻止模式下通過網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。為使TcpClient連接并交換數(shù)據(jù),使用TCPProtocolType創(chuàng)建的TcpListener或socket必須偵聽是否有傳入的連接請求??梢允褂脛?chuàng)建一個TcpClient,并調(diào)用三個可用的Connect方法。

TcpClient中共用方法有名稱說明BeginConnect開始一個對遠程主機連接的一步請求Close釋放TcpClient實例,而不關(guān)閉基礎(chǔ)連接Connect使用指定的主機名和端口號將客戶端連接到TCP主機EndConnect異步接受傳入的連接嘗試GetStream返回用于發(fā)送和接收數(shù)據(jù)的NetworkStreamGetType獲取當前實例的TypeToString返回標識當前Object的StringGethashCode用作特定類型的哈希函數(shù)Equals確定兩個Object實例是否相等該程序中主要使用了TcpClient類中的Connect方法,使用指定的主機名和傳輸層端口號110將客戶端連接到郵件服務(wù)器上。以及Close方法,客戶機與服務(wù)器會話結(jié)束時,釋放連接。NetworkStream,提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流,命名間:System.Net.Sockets,NetworkStream類提供在阻止模式下通過Stream套接字發(fā)送和接收數(shù)據(jù)的方法,若要創(chuàng)建NetworkStream,必須提供連接的Socket。NetworkStream的構(gòu)造函數(shù)有:名稱說明NetworkStream(Socket)為指定的Socket創(chuàng)建NetworkStream類的新實例NetworkStream(Socket,Boolean)用指定的Socket所屬權(quán)為指定的Socket初始化NetworkStream類的新實例。NetworkStream(Socket,FileAccess)用指定的訪問權(quán)限為指定的Socket創(chuàng)建NetworkStream類的新實例NetworkStream(Socket,FileAccess,Boolean)用指定的訪問權(quán)限和指定的Socket所屬權(quán)為指定的Socket創(chuàng)建NetworkStream類

其中Connect按鈕的消息響應(yīng)函數(shù)完成了到POP3服務(wù)器的連接工作,并根據(jù)用戶名和密碼進行登錄。命令從而獲得郵箱中郵件的相關(guān)信息:郵件數(shù)量和大小,最終完成連接。其中連接過程的流程圖如圖4.2開始對象結(jié)束創(chuàng)建StreamReader發(fā)送STAT命令'失敗成功成功開始對象結(jié)束創(chuàng)建StreamReader發(fā)送STAT命令'失敗成功成功失敗連接成功創(chuàng)建TcpClient對象出錯處理客戶端連接服務(wù)器過程的流程圖圖4.2privatevoidConnect_Click(objectsender,System.EventArgse){//將光標置為等待狀態(tài)Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;〃用110端口新建POP3服務(wù)器連接Server=newTcpClient(PopServer.Text,110);Status.Items.Clear();try{//初始化NetStrm=Server.GetStream();RdStrm=newStreamReader(Server.GetStream());Status.Items.Add(RdStrm.ReadLine());//登錄服務(wù)器過程Data="USER"+Username.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());Data="PASS"+Password.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());〃向服務(wù)器發(fā)送STAT命令,從而取得郵箱的相關(guān)信息:郵件數(shù)量和大小Data="STAT"+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());//改變按鈕的狀態(tài)Connect.Enabled=false;Disconnect.Enabled=true;Retrieve.Enabled=true;//將光標置回原來的狀態(tài)Cursor.Current=cr;}catch(InvalidOperationExceptionerr){Status.Items.Add("Error:"+err.ToString());}}程序編碼privatevoidConnect_Click(objectsender,EventArgse){//將光標置為等待狀態(tài)Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;〃用110端口新建POP3服務(wù)器連接Server=newTcpClient(PopServer.Text,110);Status.Items.Clear();try{//初始化NetStrm=Server.GetStream();RdStrm=newStreamReader(Server.GetStream());Status.Items.Add(RdStrm.ReadLine());//登錄服務(wù)器過程Data="USER"+Username.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());Data="PASS"+Password.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());〃向服務(wù)器發(fā)送STAT命令,從而取得郵箱的相關(guān)信息:郵件數(shù)量和大小Data="STAT"+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());//改變按鈕的狀態(tài)Connect.Enabled=false;Disconnect.Enabled=true;Retrieve.Enabled=true;//將光標置回原來的狀態(tài)Cursor.Current=cr;}catch(InvalidOperationExceptionerr){Status.Items.Add("Error:"+err.ToString());}}privatevoidDisconnect_Click(objectsender,EventArgse){//將光標置為等待狀態(tài)Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;〃向服務(wù)器發(fā)送QUIT命令從而結(jié)束和POP3服務(wù)器的會話Data="QUIT"+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());//斷開連接NetStrm.Close();RdStrm.Close();//改變按鈕的狀態(tài)Connect.Enabled=true;Disconnect.Enabled=false;Retrieve.Enabled=false;//將光標置回原來的狀態(tài)Cursor.Current=cr;}privatevoidRetrieve_Click(objectsender,EventArgse){//將光標置為等待狀態(tài)Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;stringszTemp;Message.Clear();try{//根據(jù)郵件編號從服務(wù)器獲得相應(yīng)郵件Data="RETR"+MailNum.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);szTemp=RdStrm.ReadLine();if(szTemp[0]!='-'){//不斷地讀取郵件內(nèi)容,只到結(jié)束標志:英文句號while(szTemp!="."){Message.Text+=szTemp;szTemp=RdStrm.ReadLine();}〃若BackupChBox未選中,則收取郵件后,刪除保留在服務(wù)器上的郵件if(BackupChBox.Checked==false){Data="DELE"+MailNum.Text+CRLF;szData=System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData,0,szData.Length);Status.Items.Add(RdStrm.ReadLine());}}else{Status.Items.Add(szTemp);}//將光標置回原來的狀態(tài)Cursor.Current=cr;}catch(InvalidOperationExceptionerr){Status.Item

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論