版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 信息與軟件工程學(xué)院</b></p><p><b> 課程設(shè)計報告</b></p><p> 題目全稱: 用戶郵件代理 </p><p> 課程名稱: 計算機(jī)網(wǎng)絡(luò)基礎(chǔ)
2、 </p><p><b> 摘 要</b></p><p> 在Visual Studio 2010環(huán)境下開發(fā)程序,完成了一個簡單的HTTP Web服務(wù)器,能夠?qū)崿F(xiàn)HTTP協(xié)議請求報文解析,根據(jù)請求內(nèi)容執(zhí)行相應(yīng)動作,并返回響應(yīng)報文,實(shí)現(xiàn)GET和POST方法。為發(fā)送方提供了圖形界面,用戶可輸入發(fā)送者電子郵件地址、接收者電子郵件地址、報文主題及報文本身,能夠
3、將客戶機(jī)郵件采用恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)存儲起來,實(shí)現(xiàn)用戶郵件的發(fā)送和命令的接收。在軟件設(shè)計過程中,將數(shù)據(jù)部分與控制邏輯和現(xiàn)實(shí)部分分開,降低了設(shè)計的復(fù)雜度。在操作上完成的效果也很好,很好地完成了實(shí)驗要求。</p><p> 關(guān)鍵詞:Visual Studio 2010環(huán)境,HTTP Web服務(wù)器,報文解析,響應(yīng)報文。</p><p><b> ABSTRACT</b><
4、;/p><p> In the environment of Visual Studio 2010, have completed a simple program about HTTP Web server, HTTP protocol request message parsing, perform the appropriate action based on the contents of the requ
5、est and returns a response packet, GET and POST methods. Provides a graphical interface for the sender, the user can enter the e-mail address of the sender, recipient e-mail address, the theme of packets and packets can
6、be client mail using appropriate data structure stored user mail send and comman</p><p> Keywords: the environment of Visual Studio 2010, HTTP Web server, message parsing, response packet</p><p&g
7、t;<b> 目錄</b></p><p><b> 第一章 緒論1</b></p><p> 1.1 選題背景及意義1</p><p> 1.2 國內(nèi)外研究現(xiàn)狀1</p><p> 1.3 主要內(nèi)容與章節(jié)安排1</p><p> 1.4 本章小結(jié)1&l
8、t;/p><p> 第二章 課程設(shè)計的需求分析3</p><p> 2.1 環(huán)境需求3</p><p> 2.2 功能需求3</p><p> 2.3 性能需求3</p><p> 2.3 本章小結(jié)3</p><p> 第三章 用戶郵件代理的設(shè)計5</p>&l
9、t;p> 3.1 總體設(shè)計5</p><p> 3.2 功能模塊設(shè)計5</p><p> 3.3 本章小結(jié)5</p><p> 第四章 用戶郵件代理的實(shí)現(xiàn)7</p><p> 4.1 開發(fā)環(huán)境介紹7</p><p> 4.2 主要功能模塊的實(shí)現(xiàn)7</p><p>
10、 4.3 本章小結(jié)7</p><p> 第五章 測試及成果展示9</p><p> 5.1 測試環(huán)境9</p><p> 5.2 測試用例和結(jié)果9</p><p> 5.3 成果展示9</p><p> 5.4 本章小結(jié)9</p><p> 第六章 總結(jié)與展望11<
11、;/p><p><b> 參考文獻(xiàn)12</b></p><p><b> 第一章 緒論</b></p><p> 1.1 選題背景及意義</p><p> 在當(dāng)今社會下,郵件已成為人們必要的一個通信工具,不管你是什么職業(yè),總會有用到郵件的地方,特別是現(xiàn)在的大學(xué)生以及公司里的職員們,在交作業(yè)的時
12、候,在完成一個項目的過程中一定會有郵件通信,在這個大背景下,因為有需求所以我們做了這樣一個用戶郵件代理.至于意義呢,一個是我們都是小試牛刀,希望通過這個來磨練自己的實(shí)踐能力,第二呢也是希望做出來能方便大家的生活。</p><p> 1.2 國內(nèi)外研究現(xiàn)狀</p><p> 現(xiàn)今,郵件代理基本研究得都比較透徹了,國內(nèi)的比較出名的就有QQ,新浪,163再加上各類高校的郵件域名等,但即便是這
13、樣,我們也希望做出來比較個性的,只屬于我們的郵件代理,也磨練了自己的動手能力。</p><p> 1.3 主要內(nèi)容與章節(jié)安排</p><p> 緒論主要描述研究背景以及意義</p><p> 主要描述需求,如環(huán)境,功能,性能等</p><p> 主要描述設(shè)計,這個系統(tǒng)是怎樣應(yīng)運(yùn)而生的</p><p> 主要描
14、述郵件代理是怎樣實(shí)現(xiàn)的</p><p> 主要描述測試以及如何運(yùn)行的</p><p><b> 總結(jié)</b></p><p><b> 1.4 本章小結(jié)</b></p><p> 本章是緒論,所以主要就描述了一些背景以及研究現(xiàn)狀,和本報告的總體情況,算是為下面幾章做了一個鋪墊,也是報告的開頭
15、</p><p> 第二章 課程設(shè)計的需求分析</p><p><b> 2.1 環(huán)境需求</b></p><p><b> 2.1.1運(yùn)行環(huán)境</b></p><p> 處理器:在任何Intel或與Intel兼容的處理器上運(yùn)行。</p><p> 內(nèi)存:(RAM)
16、:推薦使用2GB。</p><p> 操作系統(tǒng):Windows xp以上版本。</p><p><b> 2.1.2開發(fā)環(huán)境</b></p><p> 軟件:Visual studio 2008以上版本。</p><p> 操作系統(tǒng):Windows xp以上版本。</p><p><
17、b> 2.2 功能需求</b></p><p> 1.為發(fā)送方提供圖形界面,用戶可輸入發(fā)送者電子郵件地址、接收者電子郵件地址、報文主題及報文本身。</p><p> 2.開發(fā)服務(wù)器處理程序,將客戶機(jī)郵件采用恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)存儲起來。</p><p> 3.郵件客戶機(jī)與本地郵件服務(wù)器建立TCP連接,向本地郵件服務(wù)器發(fā)送SMTP命令,實(shí)現(xiàn)用戶郵件
18、的發(fā)送和命令接收。</p><p><b> 2.3 性能需求</b></p><p> 1.性能:響應(yīng)時間約為4秒。</p><p> 2.可用性:發(fā)生故障恢復(fù)時間快,大約為10秒,基本不發(fā)生故障。</p><p> 3.易用性:啟動軟件即可按照步驟,一步步完成操作。</p><p>
19、 4.安全性:安全級別高,可訪問的范圍較大。</p><p><b> 2.3 本章小結(jié)</b></p><p> 本章闡述了軟件設(shè)計的環(huán)境需求,本軟件的功能需求和性能需求,其中環(huán)境需求包括軟件的運(yùn)行環(huán)境需求和軟件的開發(fā)環(huán)境需求,功能需求主要說明了本軟件要實(shí)現(xiàn)的主要的功能,性能需求則指出了本軟件的要實(shí)現(xiàn)的性能方面的要求。</p><p>
20、 第三章 用戶郵件代理的設(shè)計</p><p><b> 3.1 總體設(shè)計</b></p><p> 本系統(tǒng)需要實(shí)現(xiàn)的功能是用戶郵件代理,提供登錄郵箱,注銷用戶,接收、查看、刪除、回復(fù)郵件,發(fā)送新郵件以及附件相關(guān)的功能。整個系統(tǒng)使用C#制作圖形化界面,包括登錄界面和郵箱操作界面(主界面)。在未登錄郵箱時,郵箱操作界面所有組件禁用,僅提供右上角登錄按鈕和退出按鈕,點(diǎn)擊
21、按鈕進(jìn)入登錄界面,輸入郵箱、密碼以及所用郵箱服務(wù)以后便可以登錄郵箱,如果登錄成功,返回郵箱操作界面后便自動刷新郵件列表,啟用所有操作,右上角的按鈕也將變成注銷按鈕。在郵箱操作界面的收件箱功能里,提供查看、刪除、回復(fù)郵件和下載附件等功能;而在寫信功能里,提供發(fā)送、取消發(fā)送、上傳附件、刪除附件等功能。在點(diǎn)擊郵件后,則會顯示出郵件內(nèi)容。</p><p> 3.2 功能模塊設(shè)計</p><p>
22、 3.2.1 登錄界面的設(shè)計</p><p> 登錄界面是連接POP3服務(wù)器的橋梁,將使用TCP連接服務(wù)器,連接完成后將保持與POP3服務(wù)器的TCP連接。界面包括用戶郵箱和密碼輸入欄,選擇所用郵箱服務(wù)的下拉菜單,提供163,126,sina,qq,yahoo,gmail等郵箱服務(wù),還有登錄按鈕、注銷按鈕和返回按鈕,以及反饋服務(wù)器返回信息的消息界面。</p><p> 進(jìn)入登錄界面后需
23、要輸入完整的用戶信息才能點(diǎn)擊登錄按鈕,同樣需要登錄完成才能點(diǎn)擊注銷按鈕,在連接POP3服務(wù)器過程中,連接信息會顯示在消息界面上。當(dāng)選擇了所用郵箱服務(wù)后,系統(tǒng)就會提供相應(yīng)的smtp和POP3服務(wù)器名。</p><p> 連接POP3服務(wù)器并接收信件的步驟如下:</p><p> 1。連接到pop3服務(wù)器(默認(rèn)端口110)</p><p> 2。發(fā)送用戶名(use
24、r)</p><p> 3。發(fā)送密碼(pass)</p><p> 4。查詢當(dāng)前郵箱狀態(tài)(stat)</p><p> 5。查詢服務(wù)器上所有郵件UID列表(UIDL)</p><p> 6。查詢本地所有郵件的UID列表,從而羅列出新郵件列表(本地UID列表是POP3客戶端記錄在日志文件中的)</p><p>
25、 7。對所有新郵件查詢其大小(LIST)</p><p> 8。下載所有新郵件(RETR)利用List提供的郵件大小信息</p><p> 9。如果有必要,對所有新郵件標(biāo)志為刪除(DELE)</p><p> 10。結(jié)束對話(QUIT)</p><p> 11。解析本地下載郵件。</p><p> 3.2.2
26、主界面登錄注銷的設(shè)計</p><p> 未登錄時,主界面右上角提供登錄和退出功能,并提醒用戶登錄;登錄以后,右上角提供注銷和退出功能,并歡迎用戶使用。登錄和注銷按鈕都將打開登錄界面,退出按鈕則是退出整個程序,如果沒有注銷就會自動注銷并退出。</p><p> 在從登錄界面返回主界面時,如果登錄成功,系統(tǒng)會實(shí)例化郵件發(fā)送對象,以便以后完成發(fā)送郵件的操作,并給實(shí)例對象賦值;如果注銷成功,系
27、統(tǒng)會銷毀郵件發(fā)送對象和郵件接收對象,并清空收件箱和郵件內(nèi)容。</p><p> 3.2.3 收件箱的設(shè)計</p><p> 收件箱存放的是郵箱中的郵件,顯示的是每一封郵件的發(fā)件人、主題、附件和時間,功能提供附件下載、刷新列表、回復(fù)和刪除郵件等,當(dāng)?shù)卿洺晒?,返回主界面會自動刷新郵件列表,為了避免刷新時間過長造成程序假死,還需要在刷新的同時顯示進(jìn)度條,提醒用戶程序正常運(yùn)行。</p&
28、gt;<p> 更新郵件列表時,系統(tǒng)會實(shí)例化郵件接收類,以此連接服務(wù)器并下載郵件保存在郵件接收類中。再從郵件接收類中依次取出每一封郵件,保存在聲明好的郵件類中,再將信息填在收件箱列表中,同時保存在本地文件中。</p><p> 單擊列表中郵件就可以閱讀郵件內(nèi)容,由于很多郵件分為txt格式和HTML格式,所以兩種格式的內(nèi)容都顯示出來較為妥當(dāng),即郵件的Body和HTMLBody。當(dāng)上下移動列表的選中
29、項時,郵件內(nèi)容也會及時地顯示在右側(cè)的文本框和WebBrowser框中。</p><p> 此外還有刪除郵件、下載附件、回復(fù)郵件等功能,刪除郵件后,應(yīng)斷開POP連接,再重新刷新郵件列表,回復(fù)郵件則將發(fā)件人變成收件人,主題前加上“Re”即可。</p><p> 3.2.4 寫信的設(shè)計</p><p> 寫信需要收件人、主題、內(nèi)容和附件等信息,在填寫完成后便可以發(fā)送
30、郵件。發(fā)送時系統(tǒng)會實(shí)例化一個發(fā)送的郵件,并填寫郵件的信息,然后使用郵件發(fā)送類的發(fā)送功能將郵件發(fā)送至SMTP服務(wù)器上。如果點(diǎn)取消發(fā)送,則會自動切換到收件箱。</p><p> 3.2.5 個人登錄信息的設(shè)計</p><p> 由于登錄界面和主界面(特別是發(fā)送郵件時)均會涉及到用戶登錄郵箱、密碼、POP服務(wù)器和SMTP服務(wù)器的內(nèi)容,所以需要在命名空間下定義一個公共類來存儲以上信息,并作為全
31、局變量使用。</p><p><b> 3.3 本章小結(jié)</b></p><p> 設(shè)計一個好的應(yīng)用程序需要好的框架、算法和耐心,還要考慮到使用者的感受。郵件的發(fā)送依靠的是SMTP服務(wù),將郵件傳送到相應(yīng)SMTP服務(wù)器上。郵件的接收依靠的是POP服務(wù)和TCP服務(wù),先與POP服務(wù)器建立TCP連接,再用POP服務(wù)從服務(wù)器上下載郵件。除了實(shí)現(xiàn)以上功能外,還需要考慮界面的設(shè)
32、計,如何才能在使用上更方便,如何才能看上去更簡潔等等。</p><p> 第四章 用戶郵件代理的實(shí)現(xiàn)</p><p> 4.1 開發(fā)環(huán)境介紹</p><p> 此次課程設(shè)計我們使用Visual Studio 2010開發(fā)環(huán)境,利用C#語言進(jìn)行界面設(shè)計與后臺開發(fā)。同時我們還利用了第三方郵箱操作組件jmail來輔助我們進(jìn)行該課程設(shè)計的開發(fā)。</p>
33、<p> 4.2 主要功能模塊的實(shí)現(xiàn)</p><p> 4.2.1 登陸模塊的實(shí)現(xiàn)</p><p> 4.2.1.1 登陸郵箱</p><p> 登陸郵箱的實(shí)現(xiàn)代碼如下:</p><p> private void btnLogin_Click(object sender, EventArgs e)</p>
34、<p><b> {</b></p><p> if (loginfrm.ShowDialog() == DialogResult.OK)</p><p><b> {</b></p><p> Cursor.Current = Cursors.WaitCursor;</p><p&
35、gt; string username = personalMessage.getUserMail;</p><p> label1.Text = "您好!\n" + username;</p><p><b> // 窗體組件</b></p><p> btnLogin.Visible = false;</p
36、><p> btnLogout.Visible = true;</p><p> tabControlMyMailbox.Enabled = true;</p><p> btnDownLoad.Enabled = false;</p><p> btnDeleteMail.Enabled = false;</p><
37、p> // 登陸成功后實(shí)例化郵件發(fā)送對象,以便后面完成發(fā)送郵件的操作</p><p> // 實(shí)例化郵件發(fā)送類(SmtpClient)對象</p><p> if (smtpClient == null)</p><p><b> {</b></p><p> smtpClient = new SmtpC
38、lient();</p><p> smtpClient.Host = personalMessage.getSmptServer;</p><p> //gmail郵箱的port為587,其余默認(rèn)為25</p><p> int Port = 25;</p><p> if (smtpClient.Host == "smt
39、p.gmail.com")</p><p><b> {</b></p><p> Port = 587;</p><p><b> }</b></p><p> smtpClient.Port = Port;</p><p> // 不使用默認(rèn)憑證,即需
40、要認(rèn)證登陸</p><p> smtpClient.UseDefaultCredentials = false;</p><p> smtpClient.Credentials = new NetworkCredential(personalMessage.getUserMail, personalMessage.getPassword);</p><p>
41、smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;</p><p><b> }</b></p><p> // 登陸成功后,自動接收新郵件</p><p><b> // 開始接收郵件</b></p><p><b>
42、try</b></p><p><b> {</b></p><p> btnRefreshMailList.PerformClick();</p><p><b> }</b></p><p><b> catch</b></p><p
43、><b> {</b></p><p> MessageBox.Show("讀取郵件列表失??!", "錯誤", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);</p><p><b> }</b></p><p>
44、;<b> // 窗體組件</b></p><p> richtbxMailContentReview.Enabled = true;</p><p> btnDownLoad.Enabled = true;</p><p> btnDeleteMail.Enabled = true;</p><p> tab
45、ControlMyMailbox.Focus();</p><p> Cursor.Current = Cursors.Default;</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.1.2 注銷登陸</p><p&
46、gt; 注銷登陸的實(shí)現(xiàn)代碼如下:</p><p> private void btnLogout_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> if (loginfrm.ShowDialog() == DialogResult.Cancel)</p>
47、;<p><b> {</b></p><p><b> // 窗體組件</b></p><p> label1.Text = "請登錄";</p><p> btnLogin.Visible = true;</p><p> btnLogout.Visi
48、ble = false;</p><p> richtbxMailContentReview.Enabled = false;</p><p> tabControlMyMailbox.Enabled = false;</p><p> // SmtpClient 對象銷毀</p><p> if (smtpClient != nul
49、l)</p><p><b> {</b></p><p> smtpClient.Dispose();</p><p><b> }</b></p><p> // POP3Class 對象銷毀</p><p> popClient.Disconnect();&l
50、t;/p><p> lstViewMailList.Items.Clear();</p><p> tbxMailboxInfo.Text = "";</p><p> richtbxMailContentReview.Clear();</p><p> wbMailContentReview.DocumentText
51、 = "";</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.1.3 退出程序</p><p> 退出程序的實(shí)現(xiàn)代碼如下:</p><p> private void btnExit_Clic
52、k(object sender, EventArgs e)</p><p><b> {</b></p><p> if (btnLogout.Visible == true)</p><p><b> {</b></p><p> loginfrm.logout();</p>
53、<p><b> }</b></p><p><b> Close();</b></p><p><b> }</b></p><p> 4.2.2 郵件操作模塊的實(shí)現(xiàn)</p><p> 4.2.2.1 更新郵件并彈出進(jìn)度條</p><
54、p> 更新郵件并彈出進(jìn)度條的實(shí)現(xiàn)代碼如下:</p><p> progressbarForm pbfrm;//實(shí)例化進(jìn)度條窗口</p><p> private void btnRefreshMailList_Click(object sender, EventArgs e)</p><p><b> {</b></p>
55、;<p> pbfrm = new progressbarForm();</p><p> Thread fThread = new Thread(new ThreadStart(refreshMailList));//開辟一個新的線程</p><p> fThread.Start();</p><p> pbfrm.ShowDialog();
56、</p><p><b> }</b></p><p> 4.2.2.2 更新郵件列表</p><p> 更新郵件列表的實(shí)現(xiàn)代碼如下:</p><p> private void refreshMailList()</p><p><b> {</b></p&
57、gt;<p> // 實(shí)例化郵件接收類POP3Class</p><p> popClient = new POP3Class();</p><p><b> // 連接服務(wù)器</b></p><p> popClient.Connect(personalMessage.getUserMail, personalMessa
58、ge.getPassword, personalMessage.getPopServer, 110);</p><p> if (popClient != null)</p><p><b> {</b></p><p> if (popClient.Count > 0)</p><p><b>
59、 {</b></p><p> lstViewMailList.Items.Clear();</p><p> tbxMailboxInfo.Text = "共" + popClient.Count + "封郵件";</p><p> for (int i = 0; i < popClient.Coun
60、t; i++)</p><p><b> {</b></p><p> messageMail = popClient.Messages[i + 1];</p><p> ListViewItem item = new ListViewItem();</p><p> item.SubItems.Add(mess
61、ageMail.From);// 發(fā)件人</p><p> item.SubItems.Add(messageMail.Subject);// 主題</p><p> attachments = messageMail.Attachments;// 附件</p><p> if (attachments.Count > 0)</p><
62、;p><b> {</b></p><p> item.SubItems.Add(attachments.Count.ToString());// 附件數(shù)量</p><p><b> }</b></p><p><b> else</b></p><p><
63、b> {</b></p><p> item.SubItems.Add("無");</p><p><b> }</b></p><p> item.SubItems.Add(messageMail.Date.ToString());// 時間</p><p> lstVi
64、ewMailList.Items.Add(item);</p><p> pbfrm.SetTextMessage(100 * (i + 1) / popClient.Count);</p><p> // 將郵件寫入文件</p><p> string path = "C:\\EmailContents.txt";</p>
65、<p> FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write);</p><p> StreamWriter sw = new StreamWriter(fs);</p><p> sw.WriteLine("第"+(i+1).ToString()+"封郵
66、件");</p><p> sw.WriteLine("主題:\n"+messageMail.Subject);</p><p> sw.WriteLine("時間:\n" + messageMail.Date.ToString());</p><p> sw.WriteLine("來自:\n&quo
67、t; + messageMail.From);</p><p> sw.WriteLine("發(fā)件人:\n" + messageMail.FromName);</p><p> sw.WriteLine("收件人:\n" + messageMail.RecipientsString);</p><p> sw.Write
68、Line("正文:\n" + messageMail.Body);</p><p> sw.WriteLine("EML文本:\n" + messageMail.BodyText);</p><p> sw.WriteLine("HTML文本:\n" + messageMail.HTMLBody);</p>&l
69、t;p> sw.Flush();</p><p> sw.Close();</p><p> fs.Close();</p><p><b> }</b></p><p> pbfrm.enablebtnOK();</p><p><b> }</b><
70、;/p><p><b> else</b></p><p><b> {</b></p><p> MessageBox.Show("沒有郵件!","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);</p>&
71、lt;p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> MessageBox.Show("讀取郵件列表失敗!&quo
72、t;, "錯誤", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.2.3 發(fā)送郵件</p><p> 發(fā)送郵
73、件的實(shí)現(xiàn)代碼如下:</p><p> private void btnSend_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> this.Cursor = Cursors.WaitCursor;</p><p> // 實(shí)例化一個發(fā)送的郵
74、件</p><p> MailMessage mailMessage = new MailMessage();</p><p> // 指明郵件發(fā)送的地址,主題,內(nèi)容等信息</p><p> mailMessage.From = new MailAddress(personalMessage.getUserMail);</p><p>
75、 mailMessage.To.Add(txbSendTo.Text);</p><p> mailMessage.Subject = txbSubject.Text;</p><p> mailMessage.SubjectEncoding = Encoding.Default;</p><p> mailMessage.Body = richtbxBod
76、y.Text;</p><p> mailMessage.BodyEncoding = Encoding.Default;</p><p> // 設(shè)置郵件正文不是Html格式的內(nèi)容</p><p> mailMessage.IsBodyHtml = false;</p><p> // 設(shè)置郵件的優(yōu)先級為普通優(yōu)先級</p>
77、;<p> mailMessage.Priority = MailPriority.Normal;</p><p> //mailMessage.ReplyTo = new MailAddress(tbxUserMail.Text);</p><p> // 封裝發(fā)送的附件</p><p> System.Net.Mail.Attachment
78、 attachment = null;</p><p> if (cmbAttachment.Items.Count > 0)</p><p><b> {</b></p><p> for (int i = 0; i < cmbAttachment.Items.Count; i++)</p><p>
79、<b> {</b></p><p> string fileNamePath = cmbAttachment.Items[i].ToString();</p><p> string extName = Path.GetExtension(fileNamePath).ToLower();</p><p> if (extName ==
80、 ".rar" || extName == ".zip")</p><p><b> {</b></p><p> attachment = new System.Net.Mail.Attachment(fileNamePath, MediaTypeNames.Application.Zip);</p><
81、;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> attachment = new System.Net.Mail.Attachment(fileNamePath, MediaTypeNames.Applica
82、tion.Octet);</p><p><b> }</b></p><p> ContentDisposition cd = attachment.ContentDisposition;</p><p> cd.CreationDate = File.GetCreationTime(fileNamePath);</p>
83、<p> cd.ModificationDate = File.GetLastWriteTime(fileNamePath);</p><p> cd.ReadDate = File.GetLastAccessTime(fileNamePath);</p><p> // 把附件對象加入到郵件附件集合中</p><p> mailMessage.A
84、ttachments.Add(attachment);</p><p><b> }</b></p><p><b> }</b></p><p> // 發(fā)送寫好的郵件</p><p><b> try</b></p><p><b>
85、; {</b></p><p> // SmtpClient類用于將郵件發(fā)送到SMTP服務(wù)器</p><p> smtpClient.Send(mailMessage);</p><p> MessageBox.Show("郵件發(fā)送成功!", "提示", MessageBoxButtons.OK, Mess
86、ageBoxIcon.Information);</p><p><b> }</b></p><p> catch (SmtpException smtpError)</p><p><b> {</b></p><p> MessageBox.Show("郵件發(fā)送失敗:[&qu
87、ot; + smtpError.StatusCode + "];["</p><p> + smtpError.Message + "];\r\n[" + smtpError.StackTrace + "]."</p><p> , "錯誤", MessageBoxButtons.RetryCancel,
88、MessageBoxIcon.Error);</p><p><b> }</b></p><p><b> finally</b></p><p><b> {</b></p><p> mailMessage.Dispose();</p><p&
89、gt; this.Cursor = Cursors.Default;</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.2.4 閱讀郵件內(nèi)容</p><p> 閱讀郵件內(nèi)容的實(shí)現(xiàn)代碼如下:</p><p> pr
90、ivate void ReadMail(object sender, EventArgs e)</p><p><b> {</b></p><p> int index = lstViewMailList.SelectedItems[0].Index + indexOffset;</p><p> messageMail = popCl
91、ient.Messages[index + 1];</p><p> messageMail.Charset = "gb2312";</p><p> richtbxMailContentReview.Text = messageMail.Body;</p><p> wbMailContentReview.DocumentText = m
92、essageMail.HTMLBody;</p><p> lstViewMailList.Focus();</p><p><b> }</b></p><p> private int indexOffset;</p><p> private void lstViewMailList_KeyDown(obj
93、ect sender, KeyEventArgs e)</p><p><b> {</b></p><p> if (e.KeyCode == Keys.Up)</p><p><b> {</b></p><p> indexOffset = -1;</p><p&g
94、t; ReadMail(sender, e);</p><p><b> }</b></p><p> if (e.KeyCode == Keys.Down)</p><p><b> {</b></p><p> indexOffset = 1;</p><p>
95、 ReadMail(sender, e);</p><p><b> }</b></p><p> indexOffset = 0;</p><p><b> }</b></p><p> 4.2.2.5 回復(fù)發(fā)送</p><p> 回復(fù)發(fā)送的實(shí)現(xiàn)代碼如下:<
96、;/p><p> private void btnReplyMail_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> if (isSelected() == false) return;</p><p> int index = lstVie
97、wMailList.SelectedItems[0].Index;</p><p> messageMail = popClient.Messages[index + 1];</p><p> // 使寫信選項卡成為當(dāng)前選項卡</p><p> tabControlMyMailbox.SelectTab(tabPageWriteLetter);</p&g
98、t;<p> txbSendTo.Text = lstViewMailList.SelectedItems[0].SubItems[1].Text;</p><p> txbSubject.Text = "Re:" + messageMail.Subject;</p><p> richtbxBody.Text = "";<
99、/p><p> richtbxBody.Focus();</p><p><b> }</b></p><p> 4.2.2.6 刪除郵件</p><p> 刪除郵件的實(shí)現(xiàn)代碼如下:</p><p> private void btnDeleteMail_Click(object sende
100、r, EventArgs e)</p><p><b> {</b></p><p> if (isSelected() == false) return;</p><p> int index = lstViewMailList.SelectedItems[0].Index;</p><p> messageM
101、ail = popClient.Messages[index + 1];</p><p> if (MessageBox.Show("確認(rèn)要刪除郵件 " + messageMail.Subject + " 嗎?", "刪除確認(rèn)", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == Dialo
102、gResult.Yes)</p><p><b> {</b></p><p> popClient.DeleteSingleMessage(index + 1);</p><p> popClient.Disconnect();</p><p> btnRefreshMailList.PerformClick(
103、);</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.3 附件相關(guān)操作模塊的實(shí)現(xiàn)</p><p> 4.2.3.1 添加附件</p><p> 添加附件的實(shí)現(xiàn)代碼如下:</p><p>
104、 private void btnAddFile_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> OpenFileDialog openFileDialog = new OpenFileDialog();</p><p> openFileDialog.Check
105、FileExists = true;</p><p> // 只接受有效的文件名</p><p> openFileDialog.ValidateNames = true;</p><p> // 允許一次選擇多個文件作為附件</p><p> openFileDialog.Multiselect = true;</p>
106、<p> openFileDialog.Filter = "所有文件(*.*)|*.*";</p><p> if (openFileDialog.ShowDialog() != DialogResult.OK)</p><p><b> {</b></p><p><b> return;&l
107、t;/b></p><p><b> }</b></p><p> if (openFileDialog.FileNames.Length > 0)</p><p><b> {</b></p><p> // 因為這里允許選擇多個文件,所以這里用AddRange而沒有用Add方
108、法</p><p> cmbAttachment.Items.AddRange(openFileDialog.FileNames);</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.3.2 刪除附件</p><p>
109、; 刪除附件的實(shí)現(xiàn)代碼如下:</p><p> private void btnDeleteFile_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> int index = cmbAttachment.SelectedIndex;</p><
110、p> if (index == -1)</p><p><b> {</b></p><p> MessageBox.Show("請選擇要刪除的附件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);</p><p><
111、b> return;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cmbAttachment.Items.RemoveAt(index);</
112、p><p><b> }</b></p><p><b> }</b></p><p> 4.2.3.3 下載附件</p><p> 下載附件的實(shí)現(xiàn)代碼如下:</p><p> private void btnDownLoad_Click(object sender,
113、EventArgs e)</p><p><b> {</b></p><p> if (isSelected() == false) return;</p><p> else if (lstViewMailList.SelectedItems[0].SubItems[3].Text == "無")</p>
114、;<p><b> {</b></p><p> MessageBox.Show("該郵件沒有附件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);</p><p><b> return;</b></p>
115、<p><b> }</b></p><p> int index = lstViewMailList.SelectedItems[0].Index;</p><p> messageMail = popClient.Messages[index + 1];</p><p> attachments = messageMai
116、l.Attachments;</p><p> for (int i = 0; i < attachments.Count; i++)</p><p><b> {</b></p><p> attachment = attachments[i];</p><p> string attachName =
117、attachment.Name;</p><p> SaveFileDialog saveFileDialog = new SaveFileDialog();</p><p> saveFileDialog.FileName = attachName;</p><p> saveFileDialog.Filter = "所有文件(*.*)|(*.*)
118、";</p><p> if (saveFileDialog.ShowDialog() != DialogResult.OK)</p><p><b> {</b></p><p><b> continue;</b></p><p><b> }</b>&l
119、t;/p><p> string filepath = saveFileDialog.FileName;</p><p> attachment.SaveToFile(filepath);</p><p> MessageBox.Show("以保存:\r\n" + attachment.Name, "下載完畢", Messa
120、geBoxButtons.OK, MessageBoxIcon.Information);</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.4存儲個人登陸信息模塊的實(shí)現(xiàn)</p><p> 4.2.4.1記錄用戶登陸郵箱、密碼、所選SMT
121、P服務(wù)器和POP服務(wù)器</p><p> 記錄用戶登陸郵箱、密碼、所選SMTP服務(wù)器和POP服務(wù)器的實(shí)現(xiàn)代碼如下:</p><p> public class personalMessage</p><p><b> {</b></p><p> private static string _userMail;&
122、lt;/p><p> private static string _password;</p><p> private static string _smtpServer;</p><p> private static string _popServer;</p><p> public personalMessage(string
123、userMail, string password, string smtpServer, string popServer)</p><p><b> {</b></p><p> _userMail = userMail;</p><p> _password = password;</p><p> _sm
124、tpServer = smtpServer;</p><p> _popServer = popServer;</p><p><b> }</b></p><p> public personalMessage() { }</p><p> public static string getUserMail<
125、;/p><p><b> {</b></p><p><b> get</b></p><p><b> {</b></p><p> return _userMail;</p><p><b> }</b></p>
126、;<p><b> }</b></p><p> public static string getPassword</p><p><b> {</b></p><p><b> get</b></p><p><b> {</b>
127、</p><p> return _password;</p><p><b> }</b></p><p><b> }</b></p><p> public static string getSmptServer</p><p><b> {<
128、/b></p><p><b> get</b></p><p><b> {</b></p><p> return _smtpServer;</p><p><b> }</b></p><p><b> }</b&g
129、t;</p><p> public static string getPopServer</p><p><b> {</b></p><p><b> get</b></p><p><b> {</b></p><p> return _
130、popServer;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 4.3 本章小結(jié)</b></p><p> 我們使用微軟提供
131、的大量的公共類,以及第三方郵箱操作組件jmail提供的接口,來實(shí)現(xiàn)用戶郵件代理。在實(shí)現(xiàn)過程中我們小組對郵箱的整個運(yùn)作流程和各種協(xié)議有了更深層次的理解。</p><p> 第五章 測試及成果展示</p><p><b> 5.1 測試環(huán)境</b></p><p><b> Windows7</b></p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 郵件地址提取程序課程設(shè)計報告
- 課程設(shè)計---多用戶電能表課程設(shè)計報告
- 多用戶電能表課程設(shè)計報告
- 用戶注冊系統(tǒng)課程設(shè)計
- java課程設(shè)計----課程設(shè)計報告
- fpga課程設(shè)計課程設(shè)計報告
- 基于Web服務(wù)的安全電子郵件用戶代理.pdf
- 基于證據(jù)的安全電子郵件用戶代理系統(tǒng)的設(shè)計與實(shí)現(xiàn).pdf
- 課程設(shè)計報告-多用戶電子式電能表的設(shè)計
- java_web課程設(shè)計報告--論壇系統(tǒng)用戶注冊界面的設(shè)計
- 課程設(shè)計報告
- 課程設(shè)計-- 用戶登錄處理web程序
- 課程設(shè)計報告
- 課程設(shè)計報告
- 課程設(shè)計報告
- 課程設(shè)計報告
- 基于android的簡單用戶注冊系統(tǒng)課程設(shè)計報告
- 基于android的簡單用戶注冊系統(tǒng)課程設(shè)計報告
- 基于android的簡單用戶注冊系統(tǒng)課程設(shè)計報告
- 課程設(shè)計---電子郵件客戶端發(fā)送功能
評論
0/150
提交評論