電子郵件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
電子郵件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
電子郵件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
電子郵件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
電子郵件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一章前言課題來(lái)源當(dāng)前流行的各大郵件客戶端軟件除了最主要的收發(fā)信件之外, 功能越來(lái)越復(fù)雜,但是人們平常真正用到的功能很少,很多功能尤其對(duì)于那些計(jì)算機(jī)知識(shí)相 對(duì)缺乏的人來(lái)說(shuō),更加顯得太過(guò)于華麗而不太實(shí)用。有鑒于此,在了解RFC底層協(xié)議的基 礎(chǔ)上,本人開發(fā)了這個(gè)各種功能相對(duì)簡(jiǎn)單實(shí)用的郵件客戶端程序,簡(jiǎn)化了很多不必要的功能。電子郵件介紹電子郵件(簡(jiǎn)稱E-mail)又稱電子信箱、電子郵政,它是一種 用電子手段提供信息交換的通信方式。它是全球多種網(wǎng)絡(luò)上使用最普遍的一項(xiàng)服務(wù)。這種非 交互式的通信,加速了信息的交流及數(shù)據(jù)傳送,它是一個(gè)簡(jiǎn)易、快速的方法。通過(guò)連接全世 界的Internet,實(shí)現(xiàn)各類信號(hào)的傳送、

2、接收、存儲(chǔ)等處理,將郵件送到世界的各個(gè)角落。到 目前為止,可以說(shuō)電子郵件是Internet資源使用最多的一種服務(wù),E-mail不只局限于信件的 傳遞,還可用來(lái)傳遞文件、聲音及圖形、圖像等不同類型的信息。電子郵件不是一種“終端到終端”的服務(wù),是被稱為“存儲(chǔ)轉(zhuǎn)發(fā) 式”服務(wù)。這正是電子信箱系統(tǒng)的核心,利用存儲(chǔ)轉(zhuǎn)發(fā)可進(jìn)行非實(shí)用時(shí)通信,屬異步通信方 式。即信件發(fā)送者可隨時(shí)隨地發(fā)送郵件,不要求接收者同時(shí)在場(chǎng),即使對(duì)方現(xiàn)在不在,仍可 將郵件讀取信件,不受時(shí)空限制。在這里,“發(fā)送”郵件意味著將郵件放到收件人的信箱中, 而“接收,郵件則意味著從自己的信箱中讀取信件,信箱實(shí)際上是由文件管理系統(tǒng)支持是一個(gè) 實(shí)體。因

3、為電子郵件是通過(guò)郵件服務(wù)器(mail server)來(lái)傳遞的。通常mail server是執(zhí)行多 任務(wù)操作系統(tǒng)UNIX的計(jì)算機(jī),它提供24小時(shí)的電子郵件服務(wù),用戶只要向mail server管 理人員申請(qǐng)一個(gè)信箱賬號(hào),就可使用這項(xiàng)快遞的郵件服務(wù)。電子郵件的工作原理:電子郵件的發(fā)送是通過(guò)電子郵件簡(jiǎn)單傳速協(xié)議(Simple Mail Transfer Protocol,簡(jiǎn)稱SMTP)來(lái)完成的,電子郵件的接受是通過(guò)POP3協(xié)議 來(lái)實(shí)現(xiàn)。它是Internet下的一種電子郵件通信協(xié)議。電子郵件的基本原理,是在通信網(wǎng)上設(shè)立“電子信箱系統(tǒng)”,它實(shí)際上是一個(gè)計(jì)算機(jī)系統(tǒng)。 系統(tǒng)的硬件是一個(gè)高性能、大容量的計(jì)算機(jī)

4、。硬盤作為信箱的存儲(chǔ)介質(zhì),在硬盤上為用戶分 一定的存儲(chǔ)空間作為用戶的“信箱”,每位用戶都有屬于自己的一個(gè)電子信箱。并確定一個(gè)用 戶和用戶可以隨意修改的口令。存儲(chǔ)空間包含存放所收信件、編輯信件以及信件存盤三部分 空間,用戶使用口令開啟自己的信箱,并進(jìn)行發(fā)信、讀信、編輯、轉(zhuǎn)發(fā)、存檔等各種操作。 系統(tǒng)功能主要由軟件實(shí)現(xiàn)。開發(fā)環(huán)境及運(yùn)行環(huán)境開發(fā)環(huán)境AMD Athlom(TM), 512 內(nèi)存,80G 硬盤Microsoft (R) Windows XP ProfessionalMicosoft Visual Studio 2003 (C Sharp)Micosoft Developer Network

5、 for Visual 2003運(yùn)行環(huán)境Internet pentium 2及以上處理器,32M以上內(nèi)存,4G以上硬盤Micosoft windows 9X/NT 操作系統(tǒng)800*600或以上的屏幕分辨率確保機(jī)器上安裝有.Net FrameWork或者以上版本第二章系統(tǒng)需求分析系統(tǒng)功能需求分析電子郵件系統(tǒng)需求實(shí)現(xiàn)的功能包括新建用戶的帳號(hào),接受簡(jiǎn)單郵件或帶附件的郵 件,發(fā)送簡(jiǎn)單郵件或發(fā)送帶附件的郵件,電子郵件編號(hào),電子郵件分類管理,通信薄管理。 為了使用通信薄,于是添加了對(duì)用戶資料的增加,修改,取消操作。軟件的總體架構(gòu)圖1軟件構(gòu)架圖系統(tǒng)功能客戶端軟件通訊薄管二理電子郵件接收系統(tǒng)各種錯(cuò)誤 的提示簡(jiǎn)

6、單郵件 接收?qǐng)D2系統(tǒng)功能圖系統(tǒng)總體用例圖圖3系統(tǒng)總體用例圖數(shù)據(jù)庫(kù)需求分析在對(duì)系統(tǒng)進(jìn)行系統(tǒng)需求分析的基礎(chǔ)上,可以得到系統(tǒng)在處理數(shù)據(jù)時(shí)會(huì)用到下面所示的 數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu):1)用戶信息:帳號(hào)名稱,用戶名,密碼,電子郵箱地址,SMTP服務(wù)器,SMTP端口號(hào), POP3服務(wù)器,POP3端口號(hào)。2)通信薄信息:姓名,郵箱地址,電話號(hào)碼,QQ號(hào),手機(jī)號(hào)碼,通信地址。第三章系統(tǒng)設(shè)計(jì)系統(tǒng)的流程設(shè)計(jì)郵件客戶端最重要的兩個(gè)功能就是接收郵件和發(fā)送郵件,其中接收郵件的流程圖如圖4 所示。從流程圖中可以看出,接收郵件時(shí)首先要?jiǎng)?chuàng)建一個(gè)TCP連接到POP3服務(wù)器。如果 連接不成功就退出執(zhí)行,連接成功后再發(fā)送USER和PASS

7、命令進(jìn)行身份驗(yàn)證,身份驗(yàn)證通 過(guò)后再通過(guò)STAT命令獲得要接收的郵件數(shù),當(dāng)郵件數(shù)大于0時(shí),通過(guò)RETR命令逐個(gè)接收 郵件。接收郵件完畢后,檢查帳號(hào)中是否保留服務(wù)器上的郵件設(shè)置,如果是就不作任何操作, 否則從服務(wù)器上刪除已經(jīng)接受的郵件。最后關(guān)閉連接。完成郵件接收。開始連接成功?.登陸成功E件數(shù)0保留服務(wù)器上的郵件?退出刪除郵件關(guān)閉連接獲得郵件數(shù)目接受全部的郵件連接服務(wù)器登錄服務(wù)器圖4接收郵件流程圖發(fā)送郵件的流程圖,先檢查“發(fā)信箱”目錄中是否有待發(fā)郵件,如果有就逐個(gè)發(fā)送這些郵件,流程圖如圖5所示。其發(fā)送過(guò)程,首先需要?jiǎng)?chuàng)建一個(gè)TCP連接,連接到SMTP服務(wù)器,如果連接不成功就退出程序。連接成功后發(fā)送

8、USER和PASS命令進(jìn)行身份驗(yàn)證。身份驗(yàn)證通過(guò)后發(fā)送郵件,如果發(fā)送成功就關(guān)閉連接,更新數(shù)據(jù)庫(kù),完成郵件發(fā)送任務(wù)。3.2.1SMTP 介紹簡(jiǎn)單郵件傳輸協(xié)議(SMTP )的目標(biāo)是可靠高效地傳送郵件,它獨(dú)立于傳送子系統(tǒng)而 且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。SMTP的一個(gè)重要特點(diǎn)是它能夠在傳送中接力傳送郵件,傳送服務(wù)器提供了進(jìn)程間通 信環(huán)境(IPCE),此環(huán)境可以包括一個(gè)網(wǎng)絡(luò),幾個(gè)網(wǎng)絡(luò)或一個(gè)網(wǎng)絡(luò)的子網(wǎng)。理解到傳輸送系 統(tǒng)(或IPCE)不是一對(duì)一的是很重要的。進(jìn)程可能直接和其它進(jìn)程通過(guò)已知的IPCE通信。 郵件是一個(gè)應(yīng)用程序或進(jìn)程間通信。郵件可以通過(guò)連接在不同IPCE上的進(jìn)程跨網(wǎng)絡(luò)進(jìn)行郵 件

9、傳送。更特別是,郵件可以通過(guò)不同網(wǎng)絡(luò)上的主機(jī)接力式傳送。3.2.2SMTP 模型SMTP設(shè)計(jì)基于以上通信模型:針對(duì)用戶的郵件請(qǐng)求,發(fā)送SMTP建立于接收SMTP 之間建立一個(gè)雙向傳送通道。接收SMTP可以是最終接收者也可以是中間傳送者。SMTP 命令由發(fā)送SMTP發(fā)出,由接收SMTP接收,而應(yīng)答則反方面?zhèn)魉汀R坏﹤魉屯ǖ澜?,SMTP發(fā)送者發(fā)送MAIL命令指明郵件發(fā)送者。如果SMTP接收 者可以接收郵件則返回OK應(yīng)答。SMTP發(fā)送者再發(fā)出RCRT命令確認(rèn)郵件是否接收到。如 果SMTP接收者接收,則返回OK應(yīng)答;如果不能接收到,則發(fā)出拒絕接收應(yīng)答(但不中 止整個(gè)郵件操作),雙方將如此重復(fù)多次。當(dāng)

10、接收者到全部郵件后會(huì)接收到特別的序列,如 果接收者成功處理了郵件,則返回OK應(yīng)答。SMTP提供傳送郵件的機(jī)制,如果接收方與發(fā)送方連接在同一個(gè)傳送服務(wù)下時(shí),郵件可 以直接由發(fā)送方主機(jī)傳送到接收方主機(jī);或者,當(dāng)兩者在不同一個(gè)傳送服務(wù)下時(shí),通過(guò)中繼 SMTP服務(wù)器傳送。為了能夠?qū)MTP服務(wù)器提供中繼能力,它必須擁有最終目的主機(jī)地址 和郵箱名稱。MAIL命令參數(shù)是回復(fù)路徑,它指定郵件從何處來(lái);而RCPT命令的參數(shù)是轉(zhuǎn)發(fā)路徑的, 它指定郵件向何處去。向前路徑是源路徑,而回復(fù)路徑是返回路徑(它用于發(fā)生錯(cuò)誤時(shí)返回 郵件)。當(dāng)同一個(gè)消息要發(fā)往不同的接收者時(shí),SMTP遇到了向不同接收者發(fā)送同一份數(shù)據(jù)的復(fù) 制品

11、的問(wèn)題,郵件命令和應(yīng)答有一個(gè)比較奇怪的語(yǔ)法,應(yīng)答也有一個(gè)數(shù)字代碼。在下面,例 子中可以看到哪些使用實(shí)際的命令和應(yīng)答。完整的命令和應(yīng)答在第四節(jié)。命令與應(yīng)答對(duì)大小寫不敏感,也就是說(shuō),命令和應(yīng)答可以是大寫,小寫或兩者的混合, 但這一點(diǎn)對(duì)用戶郵件名稱卻不一定是對(duì)的,因?yàn)橛械闹鳈C(jī)對(duì)用戶名大小寫是敏感的。這樣 SMTP實(shí)現(xiàn)中就將用戶郵箱名稱保留成初始時(shí)的樣子,主機(jī)名稱對(duì)大小寫不敏感。命令與應(yīng)答由ASCII字母表組成,當(dāng)傳送服務(wù)提供8位子節(jié)傳送通道,每7位字符正 確傳送,而最高位被填充為0。當(dāng)指定一般的命令或應(yīng)答格式后,參數(shù)會(huì)由一些類似于語(yǔ)言 的字符串表示出來(lái),如“”或“”,這里尖括號(hào)表示這是一種類似于語(yǔ)

12、言的變量。SMTP協(xié)議的命令和應(yīng)答協(xié)議的命令SMTP命令定義了郵件傳輸或用戶定義的系統(tǒng)功能。它的命令是由結(jié)束的字符 串。而在帶有參數(shù)的情況下,命令本身由和參數(shù)分開,如果未帶參數(shù)可以直接和 連接。郵箱的語(yǔ)法格式必須和接收站點(diǎn)的格式一致。的應(yīng)答碼對(duì)SMTP命令的響應(yīng)是多樣的,它確定了在郵件傳輸過(guò)程中請(qǐng)求和處理的同步,也保 證了發(fā)送SMTP知道接收SMTP的狀態(tài)。每個(gè)命令必須有且只有一個(gè)響應(yīng)。SMTP響應(yīng)由三位數(shù)字組成,其后跟一些文本。數(shù)字幫助決定下一個(gè)應(yīng)該進(jìn)入的狀態(tài), 而文本對(duì)人是有意義的。三位的響應(yīng)已經(jīng)包括了足夠的信息,不用再閱讀文本,文本可以直 接拋棄或者傳遞給用戶。特別的是,文本是與接收和環(huán)

13、境相關(guān)的,所以每次接收到的文本可 能不同。正規(guī)的情況下,響應(yīng)由下面序列構(gòu)成:三位的數(shù)字,SP,一行文本和一個(gè)CRLF, 或者也可以是一個(gè)多行響應(yīng)。只有EXPN和HELP,命令可以導(dǎo)致多行應(yīng)答,然而,對(duì)所有 命令,多行響應(yīng)都是允許的。REPLY CODES BY FUNCTION GROUPS 500格式錯(cuò)誤,命令不可識(shí)別(此錯(cuò)誤也包括命令 行過(guò)長(zhǎng))第四章RFC822說(shuō)到發(fā)送和接收郵件,就不得不提RFC822 了。RFC822的全稱是“ARPA因特網(wǎng)文信 件格式的標(biāo)準(zhǔn)”(Standard for the Format of ARPA Internet Text MessageS。該標(biāo)準(zhǔn)提供了郵件

14、 內(nèi)容的格式和相關(guān)語(yǔ)義。RFC822簡(jiǎn)單介紹RFC822規(guī)定的電子郵件內(nèi)容全部由ASCII字符組成,就是通常所說(shuō)的文本文件,因而 標(biāo)準(zhǔn)將它稱為 Internet 文本信件(Internet Text Messages)。從直觀上看,信件非常簡(jiǎn)單,就是一系列由ASCII字符組成的文本行,每一行以回車 換形符結(jié)束。從組織上看,信件內(nèi)容結(jié)構(gòu)分為兩大部分,中間用一個(gè)空白行(只有CRLF符的行)來(lái) 分隔。第一部分稱為信件的頭部,包括有關(guān)發(fā)送方、接收方、發(fā)送日期等信息。第二部分稱 為信件的體部,包括信件內(nèi)容的正文文體。信頭是必需的,信體是可選的,即信體可有可無(wú)。 如果不存在信體,用作分隔的空白行也就不需要

15、。在信體中,也可以有用作分隔的空白行。 這樣設(shè)計(jì)的信件便于進(jìn)行語(yǔ)法分析,提取信件的基本信息。在RFC822中規(guī)定,信件體就是一系列的向收信人表達(dá)信息的文本行,比較簡(jiǎn)單,可以 包括任意文本。并沒(méi)有附加的結(jié)構(gòu)。信件頭則具有比較復(fù)雜的結(jié)構(gòu),在下一小節(jié)中詳述。 信件的頭部信頭一般格式信頭的結(jié)構(gòu)比較復(fù)雜,信頭由若干信頭字段(header field)組成,這些字段為用戶和程 序提供了關(guān)于信件的信息。要了解信頭的結(jié)構(gòu)就要弄清楚各種信頭字段。所有的信頭字段都具有相同的語(yǔ)法結(jié)構(gòu),從邏輯上說(shuō),包括四部分,字段名(field name) 緊跟冒號(hào)“:”(colon),后跟字段體(field body),最后以回車

16、換形符(CRLF)終止。即信頭字段=字段名:字段體CRLF字段名必須由除了冒號(hào)和空格以外的可打印USASCII字符(其值在33和126之間) 組成,大多數(shù)字段的字段名稱由一系列字母,數(shù)字組成,中間經(jīng)常插入橫線符。字段名告訴 電子郵件軟件如何翻譯該行中剩下的內(nèi)容。字段體可以包括除了 CR和LF之外的任何ASCII字符。但是其中的格式的空格,加括 號(hào)的注釋,引號(hào)和多行都比較復(fù)雜,另外,字段體的語(yǔ)法和語(yǔ)義依賴于字段名,每個(gè)類型的 字段有特定的格式。結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段每個(gè)字段包含的信息不同,字段大體可以分為結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段。結(jié)構(gòu)化字 段有特定的格式,由語(yǔ)法分析程序檢測(cè)。Sender字段就

17、是一個(gè)很好的例子,它的字段內(nèi)容是 信箱,有一個(gè)離散的結(jié)構(gòu)。非結(jié)構(gòu)化的字段含有任意的數(shù)據(jù),沒(méi)有固定格式。例如,Subject字段可以含有任意的 文字,并且沒(méi)有固定格式。非結(jié)構(gòu)化的字段數(shù)量較少,只有Subject、Comments擴(kuò)展字段、 非標(biāo)準(zhǔn)字段、INReply和References等。所有其它字段都是結(jié)構(gòu)化的。信頭字段的元素盡管Email信件的總體結(jié)構(gòu)非常簡(jiǎn)單,但一些信頭字段的結(jié)構(gòu)是很復(fù)雜的。下面介紹一 些大多數(shù)字段共有的元素。(1)空白符像其它文本文件一樣,空白符包括空格符ASCII碼32)和制表符TAB (ASCII碼19) 此外,行末的回車換形符CRLF也應(yīng)算是空白符。使用空白符可以

18、對(duì)字段進(jìn)行格式化,增 加它的可續(xù)性。例如,每個(gè)字段間用CRLF來(lái)分離,在字段內(nèi)用空格來(lái)分隔字段名和字段 內(nèi)容。在Subject后面的冒號(hào)和內(nèi)容之間插入空格字符,會(huì)使字段結(jié)構(gòu)更加清晰。在Email 中??瞻追氖褂貌](méi)有固定的規(guī)則,但應(yīng)當(dāng)正確地使用,僅在需要時(shí)才使用空白符,以 便接收軟件進(jìn)行語(yǔ)法分析。(2)注解注解是由括號(hào)括起來(lái)的一系列字符,例如,(這份禮物)。注解一般用在非結(jié)構(gòu)化的信 頭字段中,沒(méi)有語(yǔ)法語(yǔ)義,僅為人提供了一些附加的信息。如果在加引號(hào)的字符串中包括 在括號(hào)中的字符,那是字符串的一部分,不是注解。在解釋信件的時(shí)候,會(huì)將注解忽略, 可以用一個(gè)空格字符代替它們,這樣就什么也不會(huì)破壞。(

19、3)字段折疊每個(gè)信頭字段從邏輯上說(shuō)應(yīng)當(dāng)是一個(gè)由字段名、冒號(hào)、字段體和CRLF組成的單一的 行,但為了書寫與顯示的方便,增加可續(xù)行,也為了符號(hào)1000/80的行字符數(shù)的限制,可 以將超過(guò)80個(gè)字符的信頭字段分為多行,即對(duì)于比較長(zhǎng)的字段,可以分割成幾行,形成折 疊。在結(jié)果化和非結(jié)構(gòu)化字段中都允許折疊,第一行后面的行稱為信頭字段的續(xù)行。續(xù)行 都以一個(gè)空白符開始,這種方法稱為折疊(folding),例如標(biāo)題字段Subject: This is a test 可以表示為:Subject: This is a test反之,將一個(gè)被折疊成多行的信頭字段恢復(fù)到它的單行表示的過(guò)程叫做去折疊,只要 簡(jiǎn)單地移除后

20、面跟著空格的CRLF,將折疊空白符CRLF轉(zhuǎn)換成空格字符,就可以完成折疊。 在分析被折疊的字段的語(yǔ)法時(shí),要把一個(gè)多行的折疊字段展開為一行,根據(jù)它的非折疊的形 式來(lái)分析它的語(yǔ)法與語(yǔ)義。(4)字段大小寫字段名稱是不區(qū)分大小寫的,所以Subject、subject或SUBJECT都一樣。不過(guò)字段名 稱大小寫有習(xí)慣的常用形式,如主題字段的大小寫形式通常為Subjecto字段體的大小寫稍 微復(fù)雜點(diǎn),要視情況而定。比如Subject后面的字段體,其中的大寫可能就是縮寫的專用名 詞,不能改動(dòng)。(5)擴(kuò)展字段如果想在信頭中加入RFC822中沒(méi)有規(guī)定的字段,就需要?jiǎng)?chuàng)建非標(biāo)準(zhǔn)字段。方法非常簡(jiǎn) 單,只要在自定義的信

21、頭字段名的前面使用X-前綴。RFC822將這種方法稱為擴(kuò)展字段。事 實(shí)上已經(jīng)有許多擴(kuò)展字段被廣泛應(yīng)用,但沒(méi)有標(biāo)準(zhǔn)定義。例如:XLOOP字段X-LOOP字段用來(lái)防止郵件的循環(huán)傳送。過(guò)濾或郵件列表處理程序,可以給它處理的 每個(gè)信件增加一個(gè)XLOOP字段,以后就可以根據(jù)這個(gè)字段中含有的特別值,判斷一個(gè)信 件是否被循環(huán)傳送。如果確認(rèn)郵件發(fā)生了循環(huán),過(guò)濾或郵件列表處理程序就可以用不同的方 式處理該信件。XMailer 字段XMailer字段用于指示什么樣的程序產(chǎn)生了這個(gè)信件,它是使用最廣泛的擴(kuò)展字段。 產(chǎn)生郵件的軟件可以為所有發(fā)送的信件增加合適的XMailer字段,該字段不僅含有軟件的 名稱,還包含軟件

22、的版本號(hào)。例如軟件名為L(zhǎng)ittlefox Mailer,版本為,可以將“XMailer: Littlefox Mailer ”加到郵件信頭中去。圖6列出了一些在因特網(wǎng)電子郵件可以找到的普通關(guān)鍵字,以及使用它們的目的。關(guān)鍵字含義From發(fā)送方地址TO接收方地址Cc復(fù)制副本地址Date信息創(chuàng)建日期Subject信息主題ReplyTo回復(fù)地址XCharset使用的字符集(通常為ASCII)XMailer發(fā)送信息所使用的軟件XSender發(fā)送方地址的副本XFace經(jīng)編碼的發(fā)送方面孔的圖像整個(gè)系統(tǒng)的核心是收發(fā)信件的操作,因此為了方便維護(hù),以后的升級(jí),故將這兩個(gè)最 主要的操作寫成類庫(kù)(.dll)的形式,以

23、組件的形式加載到主程序中,而且其它的功能如果 需要的話,也可以通過(guò)這樣的組件的形式增加到主程序中。這也體現(xiàn)了。Sharp這一新的微 軟主推語(yǔ)言的方便和高效。而且這樣做也方便了我們小組的程序的順利結(jié)合。第五章系統(tǒng)實(shí)現(xiàn)發(fā)送郵件類SmtpMail是發(fā)送郵件的核心,類名為SmtpMail,隸屬于命名空間MailSend。封裝了發(fā) 送郵件的具體實(shí)現(xiàn)方法,也是具體的RFC用代碼實(shí)現(xiàn)的過(guò)程。而用戶通過(guò)具體的操作接口, 接收與SmtpMail類通過(guò)交互操作來(lái)實(shí)現(xiàn)用戶發(fā)送信件的操作。主要成員變量說(shuō)明1)網(wǎng)絡(luò)連接類及實(shí)例TcpClient tc為TCP網(wǎng)絡(luò)服務(wù)提供客戶端連接類TcpClient實(shí)例對(duì)象tc。Tcp

24、Client類提供了一些簡(jiǎn) 單的方法,用于在同步阻塞模式下通過(guò)網(wǎng)絡(luò)來(lái)連接、發(fā)送和接收流數(shù)據(jù)。而實(shí)例化的過(guò)程也 是連接SMTP服務(wù)器的過(guò)程。它的重載方法之一的兩個(gè)參數(shù)一個(gè)為服務(wù)器名稱字符串,另 一個(gè)為服務(wù)器的埠。2)提供用于網(wǎng)絡(luò)訪問(wèn)的基礎(chǔ)數(shù)據(jù)流及其實(shí)例NetworkStream ns此類提供訪問(wèn)網(wǎng)絡(luò)的基礎(chǔ)數(shù)據(jù)流的方法。其中最基本也是最重要的兩個(gè)方法就是Write ()和Read()方法,至于參數(shù)不再次描述。3)一維字符串?dāng)?shù)組變量FilePath此字符串?dāng)?shù)組主要用來(lái)存放用戶選擇的附件的絕對(duì)路徑名,并在發(fā)送帶附件的郵件時(shí) 用到。4)發(fā)送郵件所需的基本參數(shù)比如用于ESMTP登錄檢驗(yàn)用的用戶名、密碼,發(fā)

25、送郵件需要的收信人,發(fā)信人地址以 及主題等等在此不再陳述。主要成員函數(shù)說(shuō)明1)重載的構(gòu)造函數(shù)SmtpMail ()此函數(shù)主要用于在初始化過(guò)程中,把用戶選擇的附件的路徑以參數(shù)的形式傳給 FilePath。2)添加附件的函數(shù) AddAttachment傳給FilePath的路徑,通過(guò)這樣一個(gè)函數(shù)就可以循環(huán)的動(dòng)態(tài)的添加到LIST接口的一個(gè) 對(duì)象中了,方便以后在具體的實(shí)現(xiàn)過(guò)程中使用。3)得到上傳的附件的文件流GetStream由于在網(wǎng)絡(luò)中的操作都是以網(wǎng)絡(luò)流的形式來(lái)實(shí)現(xiàn)的,因此先將上傳的附件轉(zhuǎn)換成文件 流,然后再用Write的方法把這些附件的文件流寫入到網(wǎng)絡(luò)中,來(lái)完成發(fā)送附件的操作。具 體實(shí)現(xiàn)代碼如下所

26、示:oString();errmsg+=enter;elseerrmsg+=RR;errmsg+=errstr;return false;catch(“請(qǐng)檢查附件的大小”);ruturn false;elsereturn false;發(fā)送一組命令主要用于服務(wù)器驗(yàn)證的重載函數(shù)為:ubstring(0,3)=null)return false;string SendBuffer;string SendBuffer;Authenticate(login,password);GetMessageCount();();return count;2)接收郵件函數(shù)receiveMail當(dāng)讀取出郵件總數(shù)時(shí),就

27、進(jìn)行接收郵件操作,同時(shí)也進(jìn)行接收附件。代碼如下所示為:public void receivMail(int beginIndex,int endIndex)Message m = popClient. GetMessageCount(index, false); try(index,m);catch(ArgumentException)public Arraylist getAttachmentName()Arraylist AttachmentName = new Arraylist(); int count =m. AttachmentCount;for(int i =0;icount;i

28、+)if(i).NotAttachment) continue;(i);return AttachmentName;public void get Attachments(string savePath)(savePath);3)判斷郵件內(nèi)容格式函數(shù)showMessage ()該函數(shù)的功能是在閱讀郵件內(nèi)容時(shí)。提供兩種格式給用戶選擇,一種是HTML格式, 另一種是文本格式。用戶可以根據(jù)要求來(lái)選擇適當(dāng)格式閱讀郵件。代碼實(shí)現(xiàn)如下:private void showMessage(bool HTML)if (! HTML)TextBos txtBox=new TextBox();=true;=txtm

29、essage;=true;txtPanel. (txtBox);=”切換至HTML格式”;elseWebBrowser txtBox=new WebBrowser();=txtmessage;txtPanel, (txtBox);=”切換至文本格式”;=+”,,;text =0;AddExtra 類這個(gè)附加的小類提供一些返回當(dāng)前系統(tǒng)時(shí)間,獲取主機(jī)名,主機(jī)IP,及有關(guān)幫助的功 能,在此僅對(duì)幫助信息中的“關(guān)于”操作函數(shù)稍加說(shuō)明。因?yàn)樗f(shuō)明了在C Sharp中調(diào)用 window API函數(shù)所需如下幾個(gè)步驟:調(diào)用window中API所需的命名空間using system.;而調(diào)用顯示關(guān)于對(duì)話的函數(shù)Sh

30、ellAbout還需要用到兩個(gè)命名空間如下所示using system.Reflection;using system.o Diagnostics;在程序中聲明所需的API函數(shù)D|Import(“)Static extern int shellabout(intPtr h wnd,string szApp,string szOtherStuff,IntPtr hicon); 在程序中具體的使用Assenbly ass=();FileVersionInfo myVersion=;ShellAbout,”郵件收發(fā)系統(tǒng)鏟,,版本”+”.”+ +”.”,至此就完成了在C Sharp中調(diào)用window

31、API函數(shù)的過(guò)程。第六章系統(tǒng)運(yùn)行界面系統(tǒng)的主界面主界面顯示用戶名,主機(jī)名,相關(guān)的注冊(cè)信息以及使用時(shí)間。該界面的代碼保存在和文 件中。創(chuàng)建界面時(shí)主要使用 mainMenul, imageaccount, imagelistl, timerl 控件。新用戶注冊(cè)頁(yè)面禧 tirJW懇則株口:匡下一步注冊(cè)用戶時(shí)。在相應(yīng)的位置輸入郵箱地址,用戶名,密碼,帳號(hào)名稱等信息數(shù)輸入完畢后。 進(jìn)行檢測(cè)賬戶名。確認(rèn)正確是執(zhí)行下一步操作。當(dāng)你郵箱地址輸入錯(cuò)誤或者帳號(hào)名已經(jīng)存在。 系統(tǒng)會(huì)檢測(cè)到錯(cuò)誤。并且給出相應(yīng)的提示!在實(shí)現(xiàn)檢查帳號(hào)名是否存在代碼中調(diào)用了 Accountoperate類的檢查帳號(hào)是否占用 的函數(shù),并返回一

32、個(gè)標(biāo)志位。新用戶設(shè)置界面圖8設(shè)置界面完成新用戶注冊(cè)后執(zhí)行下一步操作是設(shè)置POP3服務(wù)器和SMTP服務(wù)器設(shè)置。以及端口 號(hào)的設(shè)置。設(shè)置完這個(gè)步驟后。就能創(chuàng)建一個(gè)新用戶郵件收發(fā)操作。首先調(diào)用Dispose()方法進(jìn)行清空所有正在使用的資源,然后用SmtpPop方法來(lái)調(diào)用 有關(guān)信息,完成設(shè)置后進(jìn)行數(shù)據(jù)庫(kù)插入操作。發(fā)送郵件界面發(fā)送不帶附件的郵件在新建帳號(hào)的過(guò)程中已經(jīng)制定了郵件地址和帳號(hào)名稱,所有默認(rèn)的以這些參數(shù)來(lái)發(fā)送郵 件。通過(guò)調(diào)用參數(shù)的不同程序會(huì)自動(dòng)的調(diào)用相應(yīng)的代碼來(lái)執(zhí)行不同的操作。該界面主要使用 了 mainMenul,openfiledialogl, imlsendmail, savefiled

33、ialogl, imlattachment, conattachment 等控件發(fā)送簡(jiǎn)單的郵件運(yùn)行界面如下。圖9發(fā)送純文本郵件發(fā)送帶附件的郵件和簡(jiǎn)單的郵件不同之處在于多了發(fā)送附件的功能,軟件模擬FoxMail里面發(fā)送郵件時(shí), 在程序的下面自動(dòng)顯示增添的附件的名稱,以及圖標(biāo)等信息。并且郵件支持添加,刪除,排 列圖標(biāo)等功能。運(yùn)行界面如下所示:圖10發(fā)送帶有附件的郵件 驗(yàn)證郵件發(fā)送是否成功郵件發(fā)送出去之后,彈出對(duì)話框,提示信件發(fā)送成功:圖11驗(yàn)證發(fā)送的郵件是否成功郵件接收功能選擇用戶,點(diǎn)擊接收,可以接收郵箱中的郵件。第七章系統(tǒng)測(cè)試測(cè)試的目的軟件的目的就是為了更快,更早地將軟件產(chǎn)品或軟件系統(tǒng)中所存在的

34、各種問(wèn)題找出來(lái), 并促使程序員盡快地解決這些問(wèn)題,最終及時(shí)地向客戶提供高質(zhì)量地軟件產(chǎn)品。要做到這一 點(diǎn),確保找出系統(tǒng)中所有或絕大部分的軟件缺陷,必須建立在軟件測(cè)試非常有用的基本方法 之上。軟件測(cè)試的基本原則是站在用戶角度,對(duì)產(chǎn)品進(jìn)行全面測(cè)試,盡早盡可能多地發(fā)現(xiàn)缺陷, 就是說(shuō)軟件測(cè)試的目的就是發(fā)現(xiàn)錯(cuò)誤,發(fā)現(xiàn)的越多測(cè)試的質(zhì)量越高。發(fā)現(xiàn)錯(cuò)誤后并且負(fù)責(zé)跟 蹤和分析產(chǎn)品中的問(wèn)題,對(duì)不足之處提出質(zhì)疑和改進(jìn)一件零件缺陷是一種思想,足夠好是測(cè) 試的原則。同一 SMTP服務(wù)器發(fā)送郵件的測(cè)試這個(gè)方面測(cè)試的是,用戶登錄一個(gè)服務(wù)器來(lái)發(fā)送一封郵件的測(cè)試。利用不同的SMTP服務(wù)器發(fā)送郵件的測(cè)試這個(gè)方面的測(cè)試是指利用不同的郵箱來(lái)發(fā)送郵件,至于測(cè)試的分類雷同于利用同一服務(wù) 器發(fā)送郵件的測(cè)試,所以不在陳述。同一 POP3服務(wù)器接收郵件的測(cè)試首先選擇賬戶登錄服務(wù)器來(lái)接收郵件。當(dāng)接收完郵件時(shí)系統(tǒng)會(huì)顯示服務(wù)器名,用戶名, 接收人,發(fā)送人,郵件數(shù)以及郵件的主題和內(nèi)容。該軟件能

溫馨提示

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

評(píng)論

0/150

提交評(píng)論