freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于c的郵件管理系統(tǒng)-資料下載頁(yè)

2025-01-22 03:17本頁(yè)面

【導(dǎo)讀】電子郵件在當(dāng)今社會(huì)中扮演了一個(gè)很重要的角色。越來(lái)越多的人在使用它。它的人數(shù)勢(shì)必會(huì)繼續(xù)增加。雖然,現(xiàn)在已經(jīng)有很多的郵件收發(fā)軟件例如著名的FoxMail. 但是對(duì)于大多數(shù)的非專(zhuān)業(yè)的人來(lái)說(shuō)它還是有點(diǎn)難度稍嫌負(fù)責(zé)。和Pop協(xié)議從底層開(kāi)發(fā)了這個(gè)軟件。SMTP全稱是簡(jiǎn)單郵件傳輸協(xié)議,它專(zhuān)門(mén)用來(lái)發(fā)送。Pop全稱是郵局協(xié)議,是專(zhuān)門(mén)用于接收郵件的。MailSend命名空間是我整個(gè)程序的核心。類(lèi)中包含了一個(gè)SendMail的方法,它從底層詳細(xì)地實(shí)現(xiàn)了和服務(wù)器的交互操作。以使用不同的SMTP服務(wù)器。經(jīng)過(guò)測(cè)試,證實(shí)此軟件是一個(gè)支持多收信人,多附件的群。雖然它沒(méi)有FoxMail那么強(qiáng)大的功能,但是它容易掌握和使用。1.1電子郵件介紹················································································1. 1.2開(kāi)發(fā)背景························································&#183

  

【正文】 . 1. 2 主要成員函數(shù)說(shuō)明 1) 重載的構(gòu)造函數(shù) SmtpMail() 此函數(shù)主要用于在初始化過(guò)程中,把用戶選擇的附件的路徑以參數(shù)的形式傳給FilePath。 更多論文 第 21 頁(yè) 共 36 頁(yè) 2) 添加附件的函數(shù) AddAttachment 傳給 FilePath的路徑,通過(guò)這樣一個(gè)函數(shù)就可以循環(huán)的動(dòng)態(tài)的添加到 IList 接口的一個(gè)對(duì)象中了,方便以后在具體的實(shí)現(xiàn)的過(guò)程中的使用。 3) 得到上傳的附件的文件流 GetStream 由于在網(wǎng)絡(luò)中的操作都是以網(wǎng)絡(luò)流的形式來(lái)實(shí)現(xiàn)的,因 此先將上傳的附件轉(zhuǎn)換成文件流,然后再用 Write 的方法把這些附件的文件流寫(xiě)入到網(wǎng)絡(luò)中,來(lái)完成發(fā)送附件的操作。具體實(shí)現(xiàn)代碼如下所示: private string GetStream(string FilePath) { //建立文件流對(duì)象 FileStr=new (FilePath,)。 byte[] by=new byte[()]。 (by,0,)。 ()。 return((by))。 } 4) 將字符串編碼為 Base64 字符串的函數(shù) Base64Encode 由于 ESMTP 的 LOGIN 認(rèn)證機(jī)制是采用 Base64 編碼,當(dāng)用戶發(fā)出 AUTHLOGIN 的命令后,服務(wù)器返回 334 的應(yīng)答碼等待用戶輸入。如果身份確認(rèn)后服務(wù)器返回 235 的應(yīng)答碼,否則返回失 敗信息。所以要將用戶名和密碼轉(zhuǎn)換成 Base64 編碼然后再發(fā)給服務(wù)器。此函數(shù)的作用就是把給定的字符串轉(zhuǎn)換成相應(yīng)的 Base64 編碼的字符串。 5) 發(fā)送 SMTP 命令的函數(shù) SendCommand 這個(gè)函數(shù)的作用是把 SMTP 命令的字符串轉(zhuǎn)換成對(duì)應(yīng)的字節(jié)型值 ( C#中規(guī)定的Write 方法只能寫(xiě)入字節(jié)型的數(shù)據(jù))然后寫(xiě)入網(wǎng)絡(luò)中,如果操作成功就返回一個(gè)標(biāo)志為真的布爾型變量,如果操作失敗或者發(fā)生異常就返回標(biāo)志為假的布爾型變量。具體代碼如下所示: private bool SendCommand(string str) { //定義一個(gè)數(shù)組 更多論文 第 22 頁(yè) 共 36 頁(yè) byte[] WriteBuffer。 //設(shè)定一個(gè)布爾類(lèi)型的變量 bool state=false。 WriteBuffer = (str)。 //加入防錯(cuò)機(jī)制,可以有效提高程序運(yùn)行的效率和捕獲出錯(cuò)信息 try { //向網(wǎng)絡(luò)中寫(xiě)入數(shù)據(jù) (WriteBuffer,0,)。 state=true。 } catch(Exception ex) { //返回出錯(cuò)信息 ( ())。 state=false。 } //返回標(biāo)志位 return state。 } 6) 接受服務(wù)器應(yīng)答的函數(shù) RecvResponse 它的作用就是從網(wǎng)絡(luò)流中讀取服務(wù)器返回的字節(jié)型的信息,將其轉(zhuǎn)換成字符串型的變量,然后將其返回,可以通過(guò)其返回值來(lái)判斷操作是否成功。具體實(shí)現(xiàn)代碼如下所示: private string RecvResponse() { int StreamSize=0。 string ReturnValue =。 //定義一個(gè)字節(jié)型的數(shù)組 byte[] ReadBuffer = new byte[1024] 。 更多論文 第 23 頁(yè) 共 36 頁(yè) try { //從網(wǎng)絡(luò)流中讀取數(shù)據(jù),并返回讀取的個(gè)數(shù) StreamSize=(ReadBuffer,0,)。 } catch (Exception ex) { //返回異常信息 ( ())。 } if (StreamSize!=0) { //將當(dāng)前讀取的信息轉(zhuǎn)換成字符串型然后返回 ReturnValue= (ReadBuffer).Substring(0,StreamSize)。 } return ReturnValue。 } 7) 重載的 函數(shù) Dialog 它們的作用是與服務(wù)器交互,發(fā)送命令并接收回 應(yīng)。不同的是參數(shù)是字符串類(lèi)型的那個(gè)函數(shù),每次發(fā)送一條命令,并接受服務(wù)器的響應(yīng),根據(jù)響應(yīng)的信息來(lái)判斷交互的結(jié)果是否成功。而參數(shù)是字符串?dāng)?shù)組的函數(shù)每次發(fā)送的是一組命令,用于和服務(wù)器的交互,這個(gè)函數(shù)主要是用于 ESMTP 服務(wù)器的驗(yàn)證的功能,因?yàn)轵?yàn)證的過(guò)程是一個(gè)等待然后又輸入的過(guò)程,因此將他們放在一個(gè)數(shù)組中有利于理解和操作。而他們的實(shí)現(xiàn)主要是通過(guò)調(diào)用上面的發(fā)送 SMTP 命令函數(shù) SendCommand 以及接受 SMTP 服務(wù)器響應(yīng)的函數(shù)RecvResponse 來(lái)實(shí)現(xiàn)的。具體的代碼如下所示: private bool Dialog(string str,string errstr) { bool flag=false。 if(str==null||()==) 更多論文 第 24 頁(yè) 共 36 頁(yè) { flag=true。 } if(SendCommand(str)) { string RR=RecvResponse()。 //從返回的數(shù)據(jù)中截取前三位 string RRCode=(0,3)。 //然后用這前三位與哈希表中 正確的回應(yīng)碼比較 if(RightCodeHT[RRCode]!=null) { flag=true。 } else { flag=false。 } } else { flag=false。 } return flag。 } 發(fā)送一組命令主要用于服務(wù)器驗(yàn)證的重載函數(shù)為: private bool Dialog(string[] str,string errstr) { for(int i=0。i。i++) { 更多論文 第 25 頁(yè) 共 36 頁(yè) //循環(huán)調(diào)用單個(gè)的與服務(wù)器的交互過(guò)程 if(!Dialog(str[i],)) { return false。 } } return true。 } 8) 郵件發(fā)送程序 SendMail 這是整個(gè)程序的核心部分。具體的實(shí)現(xiàn) SMTP 協(xié)議的程序正是通過(guò)它一步一步實(shí)現(xiàn)并最終實(shí)現(xiàn)發(fā)送簡(jiǎn)單郵件甚至帶附件的郵件的功能。 而它的實(shí)現(xiàn)是調(diào)用以上給出的各個(gè)函數(shù)的結(jié)果。 以下 就簡(jiǎn)單的通過(guò)幾個(gè) SMTP 命令的格式來(lái)實(shí)現(xiàn) private bool SendEmail() { //連接網(wǎng)絡(luò) try { //建立一個(gè) TCP 連接 tc=new TcpClient(mailserver,mailserverport)。 } catch { (連接失敗 ,請(qǐng)確認(rèn) )。 return false。 } //獲取當(dāng)前流的資料 ns = ()。 SMTPCodeAdd()。 //驗(yàn)證網(wǎng)絡(luò)連接是否正確 更多論文 第 26 頁(yè) 共 36 頁(yè) if(RightCodeHT[RecvResponse().Substring(0,3)]==null) { return false。 } string[] SendBuffer。 string SendBufferstr。 //進(jìn)行 SMTP 驗(yàn)證 //具體的 SMTP 命令與代碼的結(jié)合 if(ESmtp) { SendBuffer=new String[4]。 SendBuffer[0]=EHLO + mailserver + enter。 SendBuffer[1]=AUTH LOGIN + enter。 SendBuffer[2]=Base64Encode(username) + enter。 SendBuffer[3]=Base64Encode(password) + enter。 if(!Dialog(SendBuffer,SMTP 服務(wù)器驗(yàn)證失敗,請(qǐng)核對(duì)用戶名和密碼。 )) return false。 } else { SendBufferstr=HELO + mailserver + enter。 if(!Dialog(SendBufferstr,)) return false。 } SendBufferstr=MAIL FROM: + From + + enter。 if(!Dialog(SendBufferstr,發(fā)件人地址錯(cuò)誤,或不能為空 )) return false。 //把傳過(guò)來(lái)的收件人的地址分割然后提交給服務(wù)器 string split=。 更多論文 第 27 頁(yè) 共 36 頁(yè) string []address= (Recipient,split)。 SendBuffer=new string []。 for(int i=0。i。i++) { SendBuffer[i]=RCPT TO: +address[i]+ + enter。 } if(!Dialog(SendBuffer,收件人地址有誤 )) return false。 SendBufferstr=DATA + enter。 if(!Dialog(SendBufferstr,)) return false。 SendBufferstr=From: + FromName + + From + +enter。 SendBufferstr += enter + . + enter。 if(!Dialog(SendBufferstr,錯(cuò)誤信件信息 )) return false。 SendBufferstr=QUIT + enter。 if(!Dialog(SendBufferstr,斷開(kāi)連接時(shí)錯(cuò)誤 )) return false。 //關(guān)閉流對(duì)象 ()。 //關(guān)閉連接 ()。 FilePath=null。 return true。 } 以上即為發(fā)送不帶附件的郵件 SMTP 命 令用代碼實(shí)現(xiàn)的過(guò)程。 5. 2 AddExtra 類(lèi) 這個(gè)附加的小類(lèi)只是提供一些返回當(dāng)前系統(tǒng)時(shí)間,獲取主機(jī)名,主機(jī) IP,有關(guān)幫助等小的功能,在此僅對(duì)幫助信息中的“關(guān)于”操作函數(shù)稍加說(shuō)明。因?yàn)樗f(shuō)明了在 C Sharp 更多論文 第 28 頁(yè) 共 36 頁(yè) 中調(diào)用 Windows API 函數(shù)所需如下幾個(gè)步驟: 5. 2. 1 調(diào)用 Windows API 所需的命名空間 using 。 而調(diào)用顯示關(guān)于對(duì)話框的函數(shù) ShellAbout 還需要用到兩個(gè)命名空間如下所示 using 。 using 。 5. 2. 2 在程序中聲明所需的 API 函數(shù) [DllImport()] static extern int ShellAbout(IntPtr hWnd, string szApp, string szOtherStuff, IntPtr hIcon)。 5. 2. 3 在程序中具體的使用 Assembly ass=()。 FileVersionInfo myVersion=( )。 ShellAbout( , 郵件收發(fā)系統(tǒng) , 版本 + +.++. + , .Handle )。 至此就完成了在 C Sharp 中調(diào)用 Windows API 函數(shù)的過(guò)程。 更多論文 第 29 頁(yè) 共 36 頁(yè) 6 軟件運(yùn)行時(shí)的 界面 6. 1 新建郵件帳號(hào) 用戶打開(kāi)軟件之后,需要新建一個(gè)郵件帳號(hào),在這個(gè)信件帳號(hào)的過(guò)程中,需要指定SMTP 服務(wù)器, SMTP 的端口,以及用于 ESMTP 驗(yàn)證的用戶名和密碼。指定這些發(fā)郵件的必須參數(shù)之后,再回到系統(tǒng)的主界面如下所示: 圖 新建郵件帳號(hào)界面 6. 2 發(fā)送郵件界面 6. 2. 1 發(fā)送不帶附件的郵件 在新建帳號(hào)的過(guò)程中已經(jīng)指定了郵件地址,和帳號(hào)名稱,所以默認(rèn)的以這些參數(shù)來(lái)發(fā)送郵件。通過(guò)調(diào)用參數(shù)的不同程序會(huì)自動(dòng)的調(diào)用相對(duì)應(yīng)的代碼來(lái)執(zhí)行不同的操作。發(fā)送簡(jiǎn)單的郵件運(yùn)行界面如下。 更多論文 第 30 頁(yè) 共 36 頁(yè) 圖 發(fā)送純文本郵件 6. 2. 2 發(fā)送帶附件的郵件 和簡(jiǎn)單的郵件不同之處在于多了發(fā)送附件的功能,軟件模擬 FoxMail 里面發(fā)送郵件時(shí),在程序的下面自動(dòng)顯示增添的附件的名稱,以及圖標(biāo)等信息。并且郵件支持添加,刪除,排列圖標(biāo)等功能。 運(yùn)行界面如下所示: 圖 發(fā)送帶有附件的郵件 更多論文 第 31 頁(yè) 共 36 頁(yè) 6. 3 驗(yàn)證郵件發(fā)送是否成功 郵件發(fā)送出去之后,用 FoxMail 跟蹤接收 之后 ,證明郵件和附件都可以正常接收,具體的 FoxMail 的接收界面如下所示: 圖 驗(yàn)證 發(fā)送 的郵件 是否成功 更多論文 第 32 頁(yè) 共 36 頁(yè) 7 系統(tǒng)測(cè)試 我個(gè)人做的是這個(gè)軟件收發(fā)系統(tǒng)的一個(gè)最基本也是最主要的功能之一:發(fā)送郵件。 所以主要的測(cè)試也是圍繞發(fā)送郵件展開(kāi)的,具體的可以分為以下幾個(gè)方面。 7. 1 同一 SMTP 服務(wù)器 發(fā)送郵件的測(cè)試 這個(gè)方面的測(cè)試測(cè)的是,用戶登錄一個(gè)服務(wù)器(測(cè)試中用的是 163 的 SMTP 服務(wù)器)來(lái)發(fā)送一封郵件的測(cè)試。而這個(gè)測(cè)試又可以分為以下兩個(gè)方面: 7. 1. 1 同一服務(wù)器,發(fā)送一封純文本郵件的測(cè)試 1) 發(fā)送一封文本郵件給一個(gè)收信人 測(cè)試中用 163 的郵箱分別往 163 的郵箱以及新浪的郵箱發(fā)送郵件均可以用 FoxMail正常的接收到發(fā)送的普 通的純文本文件。 2) 發(fā)送一封文本郵件給多個(gè)收件人 測(cè)試中仍然用 163的郵箱同時(shí)發(fā)往不同的郵箱,通過(guò) FoxMail 都可以正常的接收到。從而很好的驗(yàn)證了,我們的郵件發(fā)送系統(tǒng)支持群發(fā)的功能。 7. 1. 2 同一服務(wù)器,發(fā)送一封帶附件的郵件的測(cè)試。 1) 發(fā)送一封帶附件(可以是多附件)的郵件給一個(gè)收件人 測(cè)試中用 163 的郵箱分別往 163 的郵箱以及新浪的郵箱發(fā)送之外,又添加了不同的郵件類(lèi)型(個(gè)數(shù)分別為等于 1,大于 1 即驗(yàn)證是否支持多附件的發(fā)送),用 FoxMail 接收之后,所有發(fā)送的純文本信息,以及附件信息都正常無(wú)誤 。經(jīng)過(guò)這些驗(yàn)證可以證明本軟件支持對(duì)一個(gè)收件人發(fā)送多附件。由于帶有多附件的信件,所以寫(xiě)入速度明顯慢于純文本郵件的速度。 2)發(fā)送一封帶附件(可以是多附件)的郵件給多個(gè)收件人 測(cè)試中用 163 的郵箱分別往 163 的郵箱以及新浪的郵箱發(fā)送之外,又添加了不同的郵件類(lèi)型(個(gè)數(shù)分別為等于 1,大于 1 即驗(yàn)證是否支持多附件的發(fā)送),用 FoxMail 接收之后,所有發(fā)送的純文本信息,以及附件信息都正常無(wú)誤。經(jīng)過(guò)這些驗(yàn)證可以證明本軟件支持對(duì)多個(gè)收件人發(fā)送多附件。 7. 2 利用不同的 SMTP 服務(wù)器發(fā)送郵件的測(cè)試 這個(gè)方面的測(cè)試是指利用 不同的郵箱來(lái)發(fā)送郵件,至于測(cè)試的分類(lèi)雷同于利用同一
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1