2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)設計(論文)</p><p>  題 目: 電子郵件客戶端的設計與實現(xiàn) </p><p>  院 系: 計算機科學系 </p><p>  專 業(yè): 軟件工程 </p><p>  姓 名

2、: </p><p>  學 號: </p><p>  指導教師: </p><p>  教師職稱: 講師 </p><p

3、>  填寫日期: 2012年 5月4 日</p><p><b>  摘要</b></p><p>  電子郵件在當今社會中扮演了一個很重要的角色。越來越多的人在使用它。而且用它的人數(shù)勢必會繼續(xù)增加。雖然,現(xiàn)在已經(jīng)有很多的郵件收發(fā)軟件例如著名的FoxMail 但是對于大多數(shù)的非專業(yè)的人來說它還是有點難度稍嫌復雜。因此,我就利用SMTP和Pop協(xié)議從底層開發(fā)了這

4、個軟件。SMTP全稱是簡單郵件傳輸協(xié)議,它專門用來發(fā)送郵件用的。Pop全稱是郵局協(xié)議,是專門用于接收郵件的。我主要實現(xiàn)的是發(fā)送郵件功能。MailSend命名空間是我整個程序的核心。它包括兩個類。在SmtpMail的類中包含了一個SendMail的方法,它從底層詳細地實現(xiàn)了和服務器的交互操作。你既可以用它發(fā)送一個純文本郵件,也可以發(fā)送一個帶有附件的郵件,理所當然地,你也可以使用不同的SMTP服務器。經(jīng)過測試,證實此軟件是一個支持多收信人,

5、多附件的群發(fā)軟件。雖然它沒有FoxMail那么強大的功能,但是它容易掌握和使用。</p><p>  關鍵詞:SMTP,命名空間,類,附件</p><p><b>  Abstract</b></p><p>  E-Mail play a very important role in modern times.More and more pe

6、ople are using it,and the number of it will larger and larger.Though there are a lot of software for sending and receiving letters such as FoxMail which are also multifunctional,it is difficult and complicated to the Mos

7、t of people who are curbstone.For this reason,we do this software with the rock-bottom protocol of SMTP and Pop. The full name of SMTP is Simple Mail Transfer Protocol.It is Used to sending letters.The full name of</p

8、><p>  Key Words:SMTP,nameSpace,Class,Attachment</p><p><b>  目 錄</b></p><p><b>  摘要I</b></p><p>  AbstractII</p><p><b>  第一章

9、引言1</b></p><p>  第一節(jié) 電子郵件介紹1</p><p>  第二節(jié) 開發(fā)背景2</p><p>  第三節(jié) 開發(fā)環(huán)境及運行環(huán)境2</p><p><b>  1 開發(fā)環(huán)境2</b></p><p><b>  2 運行環(huán)境2</b

10、></p><p>  第二章 軟件架構及系統(tǒng)用例圖3</p><p>  第一節(jié) 系統(tǒng)架構3</p><p>  第二節(jié) 系統(tǒng)總體用例3</p><p>  第三節(jié)程序功能框圖3</p><p>  第四節(jié) 發(fā)送郵件類4</p><p>  第五節(jié) 附加小功能類4&

11、lt;/p><p>  第三章 SMTP協(xié)議的研究5</p><p>  第一節(jié) SMTP協(xié)議簡介及工作原理5</p><p>  第二節(jié) SMTP協(xié)議的命令和應答6</p><p>  1 SMTP協(xié)議的命令6</p><p>  2 SMTP的應答碼12</p><p>  第

12、四章 RFC82214</p><p>  第一節(jié) RFC822簡單介紹14</p><p>  第二節(jié) 信件的頭部14</p><p>  1 信頭的一般格式14</p><p>  2 結(jié)構化字段和非結(jié)構化字段15</p><p>  3 信頭字段的元素15</p><p&

13、gt;  4標準的信頭字段16</p><p>  第五章 命名控件MailSend20</p><p>  第一節(jié) 發(fā)送郵件類SmtpMail20</p><p>  1 主要成員變量說明20</p><p>  2 主要成員函數(shù)說明20</p><p>  第二節(jié) AddExtra類27</

14、p><p>  第六章 軟件運行時的界面29</p><p>  第一節(jié) 新建郵件帳號29</p><p>  1 發(fā)送不帶附件的郵件29</p><p>  2 發(fā)送帶附件的郵件30</p><p>  第三節(jié) 驗證郵件發(fā)送是否成功31</p><p>  第七章 系統(tǒng)測試32&

15、lt;/p><p>  第一節(jié) 同一SMTP服務器發(fā)送郵件的測試32</p><p>  第二節(jié) 利用不同的SMTP服務器發(fā)送郵件的測試32</p><p><b>  第八章 結(jié)論34</b></p><p><b>  參考文獻35</b></p><p><

16、;b>  致 謝36</b></p><p><b>  外文文獻原文36</b></p><p><b>  第一章 引言</b></p><p>  第一節(jié) 電子郵件介紹</p><p>  電子郵件(簡稱E-mai1)又稱電子信箱、電子郵政,它是—種用電子手段提供信息交

17、換的通信方式。它是全球多種網(wǎng)絡上使用最普遍的一項服務。這種非交互式的通信,加速了信息的交流及數(shù)據(jù)傳送,它是—個簡易、快速的方法。通過連接全世界的Internet,實現(xiàn)各類信號的傳送、接收、存貯等處理,將郵件送到世界的各個角落。到目前為止,可以說電子郵件是Internet資源使用最多的一種服務,E-mai1不只局限于信件的傳遞,還可用來傳遞文件、聲音及圖形、圖像等不同類型的信息。</p><p>  電子郵件不是一

18、種“終端到終端”的服務,是被稱為“存貯轉(zhuǎn)發(fā)式”服務。這正是電子信箱系統(tǒng)的核心,利用存貯轉(zhuǎn)發(fā)可進行非實時通信,屬異步通信方式。即信件發(fā)送者可隨時隨地發(fā)送郵件,不要求接收者同時在場,即使對方現(xiàn)在不在,仍可將郵件立刻送到對方的信箱內(nèi),且存儲在對方的電子郵箱中。接收者可在他認為方便的時候讀取信件,不受時空限制。在這里,“發(fā)送”郵件意味著將郵件放到收件人的信箱中,而“接收”郵件則意味著從自己的信箱中讀取信件,信箱實際上是由文件管理系統(tǒng)支持的—個實

19、體。因為電子郵件是通過郵件服務器(mai1 server)來傳遞檔的。通常mail server是執(zhí)行多任務操作系統(tǒng)UNIX的計算機,它提供24小時的電子郵件服務,用戶只要向 mail server管理人員申請—個信箱賬號,就可使用這項快速的郵件服務。</p><p>  電子郵件的工作原理:</p><p>  1) 電子郵件系統(tǒng)是一種新型的信息系統(tǒng),是通信技術和計算機技術結(jié)合的產(chǎn)物。

20、</p><p>  電子郵件的傳輸是通過電子郵件簡單傳輸協(xié)議(Simple Mail Transfer Protocol,簡稱SMTP)這一系統(tǒng)軟件來完成的,它是Internet下的一種電子郵件通信協(xié)議。 </p><p>  2) 電子郵件的基本原理,是在通信網(wǎng)上設立“電子信箱系統(tǒng)”,它實際上是一個計算機系統(tǒng)。系統(tǒng)的硬件是一個高性能、大容量的計算機。硬盤作為信箱的存儲介質(zhì),在硬盤上為用

21、戶分一定的存儲空間作為用戶的“信箱”,每位用戶都有屬于自己的—個電子信箱。并確定—個用戶名和用戶可以自己隨意修改的口令。存儲空間包含存放所收信件、編輯信件以及信件存盤三部分空間,用戶使用口令開啟自己的信箱,并進行發(fā)信、讀信、編輯、轉(zhuǎn)發(fā)、存檔等各種操作。系統(tǒng)功能主要由軟件實現(xiàn)。</p><p>  3) 電子郵件的通信是在信箱之間進行的。用戶首先開啟自己的信箱,然后通過鍵入命令的方式將需要發(fā)送的郵件發(fā)到對方的信箱中

22、。郵件在信箱之間進行傳遞和交換,也可以與另—個郵件系統(tǒng)進行傳遞和交換。收方在取信時,使用特定賬號從信箱提取。</p><p><b>  第二節(jié) 開發(fā)背景</b></p><p>  當前流行的各大郵件客戶端軟件的除了最主要的收發(fā)信件之外,功能越來越復雜,但是人們平常真正用到的功能很少,很多功能尤其對于那些計算機知識相對缺乏的人來說,更加顯得太過于華麗而不太實用。有

23、鑒于此,在了解RFC底層協(xié)議的基礎上,我們開發(fā)了這個各種功能相對簡單實用的郵件客戶端程序,簡化了很多不必要的功能。</p><p>  第三節(jié) 開發(fā)環(huán)境及運行環(huán)境</p><p><b>  1 開發(fā)環(huán)境</b></p><p>  AMD,2G內(nèi)存,160G硬盤</p><p>  Microsoft®

24、Windows? XP Access 2003</p><p>  Microsoft® Visual Studio 2005(C Sharp)</p><p>  Microsoft® Developer Network for Visual Studio.NET 2003</p><p><b>  2 運行環(huán)境</b>

25、;</p><p>  Intel® Pentium® 2及以上處理器,32M以上內(nèi)存,4G以上硬盤</p><p>  Microsoft® Windows? 9X/NT操作系統(tǒng)</p><p>  800*600或以上的屏幕分辨率</p><p>  確保機器上安裝有.Net FrameWork 1.0或者以

26、上版本</p><p>  第二章 軟件架構及系統(tǒng)用例圖</p><p><b>  第一節(jié) 系統(tǒng)架構</b></p><p>  軟件的總體架構如圖2.1:</p><p>  圖2.1 軟件架構圖</p><p>  第二節(jié) 系統(tǒng)總體用例</p><p>  圖

27、2.2 系統(tǒng)總體用例圖</p><p><b>  程序功能框圖</b></p><p>  圖2.3 程序功能圖</p><p><b>  第四節(jié) 發(fā)送郵件類</b></p><p>  是發(fā)送郵件的核心,類名為SmtpMail,隸屬于命名空間MailSend。封裝了發(fā)送郵件的具體實現(xiàn)方法,

28、也是具體的RFC用代碼實現(xiàn)的過程。而用戶通過具體的操作接口,接口與SmtpMail類通過交互操作來實現(xiàn)用戶發(fā)送信件的操作。</p><p>  第五節(jié) 附加小功能類</p><p>  是獲取一些諸如系統(tǒng)時間,當前用戶名,以及本機IP之類的類,類名為AddExtra,隸屬于命名空間MailSend。</p><p>  第三章 SMTP協(xié)議的研究</p&g

29、t;<p>  由于要開發(fā)的是郵件客戶端程序,就不得不用到SMTP協(xié)議和POP協(xié)議。而我在這里做的是郵件發(fā)送功能的實現(xiàn),因此就必然會涉及到SMTP(Simple Mail Transfer Protocol)協(xié)議。SMTP被用來在因特網(wǎng)上發(fā)送郵件,該協(xié)議規(guī)定了一些基本的命令和方法使客戶端與服務器進行交互,以達到發(fā)送郵件的目的。</p><p>  第一節(jié) SMTP協(xié)議簡介及工作原理</p>

30、;<p><b>  1 介紹</b></p><p>  簡單郵件傳輸協(xié)議(SMTP)的目標是可靠高效地傳送郵件,它獨立于傳送子系統(tǒng)而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。</p><p>  SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務提供了進程間通信環(huán)境(IPCE),此環(huán)境可以包括一個網(wǎng)絡,幾個網(wǎng)絡或一個網(wǎng)絡的子網(wǎng)。理解到傳

31、送系統(tǒng)(或IPCE)不是一對一的是很重要的。進程可能直接和其它進程通過已知的IPCE通信。郵件是一個應用程序或進程間通信。郵件可以通過連接在不同IPCE上的進程跨網(wǎng)絡進行郵件傳送。更特別的是,郵件可以通過不同網(wǎng)絡上的主機接力式傳送。</p><p>  2 SMTP模型 </p><p>  SMTP設計基于以下通信模型:針對用戶的郵件請求,發(fā)送SMTP建立與接收SMTP之間建立一個雙向

32、傳送通道。接收SMTP可以是最終接收者也可以是中間傳送者。SMTP命令由發(fā)送SMTP發(fā)出,由接收SMTP接收,而應答則反方面?zhèn)魉汀?lt;/p><p>  一旦傳送通道建立,SMTP發(fā)送者發(fā)送MAIL命令指明郵件發(fā)送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP發(fā)送者再發(fā)出RCPT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發(fā)出拒絕接收應答(但不中止整個郵件操作),雙

33、方將如此重復多次。當接收者收到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答。</p><p>  SMTP提供傳送郵件的機制,如果接收方與發(fā)送方連接在同一個傳送服務下時,郵件可以直接由發(fā)送方主機傳送到接收方主機;或者,當兩者不在同一個傳送服務下時,通過中繼SMTP服務器傳送。為了能夠?qū)MTP服務器提供中繼能力,它必須擁有最終目的主機地址和郵箱名稱。</p><p&g

34、t;  MAIL命令參數(shù)是回復路徑,它指定郵件從何處來;而RCPT命令的參數(shù)是轉(zhuǎn)發(fā)路徑的,它指定郵件向何處去。向前路徑是源路徑,而回復路徑是返回路徑(它用于發(fā)生錯誤時返回郵件)。</p><p>  當同一個消息要發(fā)往不同的接收者時,SMTP遇到了向不同接收者發(fā)送同一份數(shù)據(jù)的復制品的問題,郵件命令和應答有一個比較奇怪的語法,應答也有一個數(shù)字代碼。在下面,例子中可以看到哪些使用實際的命令和應答。完整的命令和應答在第

35、四節(jié)。</p><p>  命令與應答對大小寫不敏感,也就是說,命令和應答可以是大寫,小寫或兩者的混合,但這一點對用戶郵件名稱卻不一定是對的,因為有的主機對用戶名大小寫是敏感的。這樣SMTP實現(xiàn)中就將用戶郵箱名稱保留成初始時的樣子,主機名稱對大小寫不敏感。</p><p>  命令與應答由ASCII字母表組成,當傳送服務提供8位字節(jié)傳送通道,每7位字符正確傳送,而最高位被填充為0。當指定一

36、般的命令或應答格式后,參數(shù)會由一些類似于語言的字符串表示出來,如"<string>"或"<reverse-path>",這里尖括號表示這是一種類似于語言的變量。</p><p>  第二節(jié) SMTP協(xié)議的命令和應答</p><p>  1 SMTP協(xié)議的命令</p><p>  SMTP命令定義了

37、郵件傳輸或由用戶定義的系統(tǒng)功能。它的命令是由<CRLF>結(jié)束的字符串。而在帶有參數(shù)的情況下,命令本身由<SP>和參數(shù)分開,如果未帶參數(shù)可以直接和<CRLF>連接。郵箱的語法格式必須和接收站點的格式一致。下面討論SMTP命令和應答。</p><p>  發(fā)送郵件操作涉及到不同的數(shù)據(jù)對象,它們由不同的參數(shù)相互連接。回復路徑就是MAIL命令的參數(shù),而轉(zhuǎn)發(fā)路徑則是RCPT命令的參數(shù),郵

38、件日期是DATA命令的參數(shù)。這些參數(shù)或者數(shù)據(jù)對象必須跟在命令后。這種模式也就要求有不同的緩沖區(qū)來存儲這些對象,也就是說,有一個回復路徑緩沖區(qū),一個轉(zhuǎn)發(fā)路徑緩沖區(qū),一個郵件內(nèi)容緩沖區(qū)。特定的命令產(chǎn)生自己的緩沖區(qū),或使一個或多個緩沖的內(nèi)容被清除。</p><p>  HELLO (HELO)</p><p>  此命令用于向接收SMTP確認發(fā)送SMTP。參數(shù)域包括發(fā)送SMTP的主機名。接收SM

39、TP通過連接確認命令來向發(fā)送SMTP確認接收SMTP。引命令和OK響應確認發(fā)送和接收SMTP進入了初始狀態(tài),也就是說,沒有操作正在執(zhí)行,所有狀態(tài)表和緩沖區(qū)已經(jīng)被子清除。</p><p>  MAIL (MAIL) </p><p>  此命令用于開始將郵件發(fā)送到一個多個郵箱中。參數(shù)域包括回復路徑。返回路徑中包括了可選的主機和發(fā)送者郵箱列表。當有主機列表時,它是一個回復路徑源,它說明此郵箱是

40、由在表中的主機一一傳遞發(fā)送(第一個主機是最后一個接收到此郵件的主機)過來的。此表也有作向發(fā)送者返回非傳遞信號的源路徑。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可能就是空的。</p><p>  此命令清除回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復路徑信息插入到回復路徑緩沖區(qū)中。<

41、;/p><p>  RECIPIENT (RCPT)</p><p>  此命令用于確定郵件內(nèi)容的唯一接收者;多個接收者將由多個此命令指定。轉(zhuǎn)發(fā)路徑中包括一個可選的主機和一個必須的目的郵箱。當出現(xiàn)主機列表時,這就是一個源路徑,它指明郵件必須向列表中的上一個主機發(fā)送。如果接收SMTP未實現(xiàn)郵件的傳遞發(fā)送,就會返回如未知本地用戶(550)的信息給用戶。</p><p>  

42、當郵件被傳遞發(fā)送時,傳遞主機必須將自己的名稱由轉(zhuǎn)發(fā)路徑的開始處移至回復路徑的結(jié)束處。當郵件最終到達目的地時,接收SMTP將以它的主機郵件格式自己的名稱插入目標郵件中。例如,由傳遞主機A接收的帶有如下參數(shù)的郵件時,</p><p>  FROM:<USERX@HOSTY.ARPA></p><p>  TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HO

43、STD.ARPA></p><p><b>  將會變成如下形式:</b></p><p>  FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA></p><p>  TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.</p><p>  此命令導致它的

44、轉(zhuǎn)發(fā)路徑參數(shù)加入轉(zhuǎn)發(fā)路徑緩沖區(qū)中。</p><p>  DATA (DATA)</p><p>  接收者將跟在命令后的行作為郵件內(nèi)容。此命令導致此命令后的郵件內(nèi)容加入郵件內(nèi)容緩沖區(qū)。郵件內(nèi)容可以包括所有128個ASCII碼字符。郵件內(nèi)容由只包括一個句號的行結(jié)束,也就是如下的字符序列:"<CRLF>.<CRLF>",它指示了郵件的結(jié)束。</

45、p><p>  郵件內(nèi)容的結(jié)束指示要求接收者現(xiàn)在就處理保存的郵件內(nèi)容。此過程將回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)的內(nèi)容全部清空。如果操作成功,接收者必須返回OK應答;如果失敗也必須返回失敗應答。</p><p>  當接收SMTP收到一條信息時,無論是用作轉(zhuǎn)發(fā)還是此郵件已經(jīng)到達目的地,它都必須在郵件內(nèi)容的開始處加上時間戳這一行,這一行指示了接收到郵件主機和發(fā)出此郵件主機的標識,以及

46、接收到郵件內(nèi)容的時間和日期。轉(zhuǎn)發(fā)的信件將有多行這樣的時間戳。當接收SMTP作最后一站的傳送時,它將返回路徑信息行插入郵件中。此行包括了發(fā)送命令中的<reverse-path>的信息。在這里,最后一站的傳送的意思是郵件將被送到目的用戶手中,但在一些情況下,郵件可能需要更進一步的加工并由另外的郵件系統(tǒng)傳送。</p><p>  可能在返回路徑中的郵箱與實際發(fā)送的郵件不一致,這個情況可能發(fā)生在需要傳送一個特

47、定的錯誤處理信箱而不是信件發(fā)送者那里。上面所述說明了,最后的郵件內(nèi)容由一個返回路徑行,和在其后的一個或多個時間戳行構成。這些行后面是郵件內(nèi)容的頭和體信息。</p><p>  當處理后面的郵件數(shù)據(jù)指示部分成功時就需要特定的說明。這種情況可能發(fā)生在發(fā)送SMTP發(fā)現(xiàn)當郵件需要傳送給多個用戶時,只能夠成功地向其中的一部分發(fā)送信息這種情況下。在這種情況下,必須對DATA命令發(fā)送OK應答,而接收SMTP組織并發(fā)送一個&qu

48、ot;不可傳遞郵件"信息到信息的發(fā)送者。在此信息中或者發(fā)送一個不成功接收者的列表,或者每次發(fā)送一個不成接收者,而發(fā)送多次。所有不可傳遞郵件信息由MAIL命令發(fā)送。</p><p>  返回路徑和接收時間戳例子</p><p>  Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA></p>&

49、lt;p>  Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST</p><p>  Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST</p><p>  Received: from ABC.ARPA by DEF.ARPA ; 27 Oct

50、 81 15:01:59 PST</p><p>  Date: 27 Oct 81 15:01:01 PST </p><p>  From: JOE@ABC.ARPA </p><p>  Subject: Improved Mailing System Installed </p><p>  To: SAM@JKL.ARPA <

51、/p><p>  This is to inform you that ... </p><p>  SEND (SEND)</p><p>  此命令用于開始一個發(fā)送命令,將郵件發(fā)送到一個或多個終端上。參數(shù)域包括了一個回復路徑,此命令如果成功就將郵件發(fā)送到終端上了。 </p><p>  回復路徑包括一個可選的主機列表和發(fā)送者郵箱。當出現(xiàn)主機列

52、表時,表示這是一個傳送路徑,郵件就是經(jīng)過這個路徑上的每個主機發(fā)送到這里的(列表上第一個主機是最后經(jīng)手的主機)。此表用于返回非傳遞信號到發(fā)送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可能就是空的。</p><p>  此命令清除回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復路徑信息插入到

53、回復路徑緩沖區(qū)中。</p><p>  SEND OR MAIL (SOML)</p><p>  此命令用于開始一個郵件操作將郵件內(nèi)容傳送到一個或多個終端上,或者傳送到郵箱中。對于每個接收者,如果接收者終端打開,郵件內(nèi)容將被傳送到接收者的終端上,否則就送到接收者的郵箱中。參數(shù)域包括回復路徑,如果成功地將信息送到終端或郵箱中此命令成功。</p><p>  回復路徑

54、包括一個可選的主機列表和發(fā)送者郵箱。當出現(xiàn)主機列表時,表示這是一個傳送路徑,郵件就是經(jīng)過這個路徑上的每個主機發(fā)送到這里的(列表上第一個主機是最后經(jīng)手的主機)。此表用于返回非傳遞信號到發(fā)送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可能就是空的。</p><p>  此命令清除回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和

55、郵件內(nèi)容緩沖區(qū),并且將此命令的回復路徑信息插入到回復路徑緩沖區(qū)中。</p><p>  SEND AND MAIL (SAML)</p><p>  此命令用于開始一個郵件操作將郵件內(nèi)容傳送到一個或多個終端上,并傳送到郵箱中。如果接收者終端打開,郵件內(nèi)容將被傳送到接收者的終端上和接收者的郵箱中。參數(shù)域包括回復路徑,如果成功地將信息送到郵箱中此命令成功。</p><p&g

56、t;  回復路徑包括一個可選的主機列表和發(fā)送者郵箱。當出現(xiàn)主機列表時,表示這是一個傳送路徑,郵件就是經(jīng)過這個路徑上的每個主機發(fā)送到這里的(列表上第一個主機是最后經(jīng)手的主機)。此表用于返回非傳遞信號到發(fā)送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可能就是空的。</p><p>  此命令清除回復路徑緩沖區(qū),

57、轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復路徑信息插入到回復路徑緩沖區(qū)中。</p><p>  RESET (RSET)</p><p>  此命令指示當送郵件操作將被放棄。任何保存的發(fā)送者,接收者和郵件內(nèi)容應該被拋棄,所有緩沖區(qū)和狀態(tài)表應該被清除,接收方必須返回OK應答。</p><p>  VERIFY (VRFY)</p><p&g

58、t;  此命令要求接收者確認參數(shù)是一個用戶。如果這是(已經(jīng)知道的)用戶名,返回用戶的全名和指定的郵箱。此命令對回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。</p><p>  EXPAND (EXPN)</p><p>  此命令要求接收者確認參數(shù)指定了一個郵件發(fā)送列表,如果是一個郵件發(fā)送列表,就返回表中的成員。如果這是(已經(jīng)知道的)用戶名,返回用戶的全名和指定的郵箱。此命令對

59、回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。</p><p>  HELP (HELP)</p><p>  此命令導致接收者向HELP命令的發(fā)送者發(fā)出幫助信息。此命令可以帶參數(shù),并返回特定的信息作為應答。此命令對回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。</p><p>  NOOP (NOOP) </p><p>

60、;  此命令不影響任何參數(shù)和已經(jīng)發(fā)出的命令。它只是說明沒有任何操作而不是說明接收者發(fā)送了一個OK應答。此命令對回復路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。</p><p>  QUIT (QUIT)</p><p>  此命令指示接收方必須發(fā)送OK應答然后關閉傳送信道。接收方在接到QUIT命令并做出響應之前不應該關閉通信信道。發(fā)送方在發(fā)送QUIT命令和接收到響應之前也不應該關閉

61、信道。即使出錯,也不應該關閉信道。如果連接被提前關閉,接收方應該象接收到RSET命令一樣,取消所有等待的操作,但不恢復原先已經(jīng)做過的操作。而發(fā)送方應該象接收到暫時錯誤(4XX)一樣假定命令和操作仍在支持之中。</p><p>  TURN (TURN)</p><p>  此命令指定接收方要么發(fā)送OK應答并改變角色為發(fā)送SMTP,要么發(fā)送拒絕信息并保持自己的角色。如果程序A現(xiàn)在是發(fā)送SMT

62、P,它發(fā)出TURN命令后接收到OK(250)應答,它就變成了接收SMTP。程序A就進入初始狀態(tài),好象通信信道剛打開一樣,這時它發(fā)送220準備好服務信號。如果程序B現(xiàn)在是接收SMTP,它發(fā)出TURN命令后接收到OK(250)應答,它就變成了發(fā)送SMTP。程序A就進入初始狀態(tài),好象通信信道剛打開一樣,這時它準備接收220準備好服務信號。</p><p>  若要拒絕改變角色,接收方可以發(fā)送502應答。</p&g

63、t;<p>  對于這些命令的順序有一定的限制。對話的第一個命令必須是HELLO命令,此命令在此后的會話中也可以使用。如果HELLO命令的參數(shù)不可接受,必須由返回一個501失敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態(tài)下。 NOOP,HELP,EXPN和VRFY命令可以在會話的任何時候使用。MAIL,SEND,SOML或SAML命令開始一個郵件操作。一旦開始了以后就要發(fā)送RCPT和DATA命令。郵件操作可以由RS

64、ET命令終止。在一個會話中可以有一個或多個操作。</p><p>  如果在操作開始參數(shù)不可接受,必須返回501失敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態(tài)下。如果操作中的命令順序出錯,必須返回503失敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態(tài)下。</p><p>  會話的最后一個命令必須是QUIT命令。此命令在會話的其它時間不能使用。</p>&l

65、t;p>  COMMAND語法格式</p><p>  命令是由命令碼和其后的參數(shù)域組成的。命令碼是四個字母組成的,不區(qū)別大小寫。因為下面的命令的作用是相同的:</p><p>  MAIL Mail mail MaIl mAIl</p><p>  這對于引導任何參數(shù)值的標記也是適用的,如TO和to就是一樣的。命令碼和參數(shù)由一個或多個空格分開。然而在回復路徑

66、和轉(zhuǎn)發(fā)路徑中的參數(shù)是區(qū)別大小寫的。特別是在一些主機上,"smith"和"Smith"就根本不是一個用戶。</p><p>  參數(shù)域由不定長的字符串組成,它由<CRLF>結(jié)束,接收方在完全接收到此序列前不會采取任何行動。方括號代表可選的參數(shù)域。如果不選擇的話,系統(tǒng)選擇默認的設置。</p><p>  下面是SMTP命令: HELO <

67、;SP> <domain> <CRLF> MAIL <SP> FROM:<reverse-path> <CRLF></p><p>  RCPT <SP> TO:<forward-path> <CRLF></p><p>  DATA <CRLF></p><

68、;p>  RSET <CRLF></p><p>  SEND <SP> FROM:<reverse-path> <CRLF></p><p>  SOML <SP> FROM:<reverse-path> <CRLF></p><p>  SAML <SP> FR

69、OM:<reverse-path> <CRLF></p><p>  VRFY <SP> <string> <CRLF></p><p>  EXPN <SP> <string> <CRLF></p><p>  HELP [<SP> <string&g

70、t;] <CRLF></p><p>  NOOP <CRLF></p><p>  QUIT <CRLF></p><p>  TURN <CRLF></p><p>  2 SMTP的應答碼</p><p>  對SMTP命令的響應是多樣的,它確定了在郵件傳輸過程中

71、請求和處理的同步,也保證了發(fā)送SMTP知道接收SMTP的狀態(tài)。每個命令必須有且只有一個響應。</p><p>  SMTP響應由三位數(shù)字組成,其后跟一些文本。數(shù)字幫助決定下一個應該進入的狀態(tài),而文本對人是有意義的。三位的響應已經(jīng)包括了足夠的信息,不用再閱讀文本,文本可以直接拋棄或者傳遞給用戶。特別的是,文本是與接收和環(huán)境相關的,所以每次接收到的文本可能不同。在附錄E中可以看到全部的響應碼。正規(guī)的情況下,響應由下面

72、序列構成:三位的數(shù)字,<SP>,一行文本和一個<CRLF>,或者也可以是一個多行響應。只有EXPN和HELP命令可以導致多行應答,然而,對所有命令,多行響應都是允許的。</p><p>  REPLY CODES BY FUNCTION GROUPS 500 格式錯誤,命令不可識別(此錯誤也包括命令行過長)</p><p>  501 參數(shù)格式錯誤</p>

73、;<p>  502 命令不可實現(xiàn)</p><p>  503 錯誤的命令序列</p><p>  504 命令參數(shù)不可實現(xiàn)</p><p>  211 系統(tǒng)狀態(tài)或系統(tǒng)幫助響應</p><p><b>  214 幫助信息</b></p><p>  220 <domain&g

74、t; 服務就緒</p><p>  221 <domain> 服務關閉傳輸信道 </p><p>  421 <domain> 服務未就緒,關閉傳輸信道(當必須關閉時,此應答可以作為對任何命令的響應)</p><p>  250 要求的郵件操作完成</p><p>  251 用戶非本地,將轉(zhuǎn)發(fā)向<forward

75、-path></p><p>  450 要求的郵件操作未完成,郵箱不可用(例如,郵箱忙)</p><p>  550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問)</p><p>  451 放棄要求的操作;處理過程中出錯</p><p>  551 用戶非本地,請嘗試<forward-path><

76、;/p><p>  452 系統(tǒng)存儲不足,要求的操作未執(zhí)行</p><p>  552 過量的存儲分配,要求的操作未執(zhí)行</p><p>  553 郵箱名不可用,要求的操作未執(zhí)行(例如郵箱格式錯誤)</p><p>  354 開始郵件輸入,以<CRLF>.<CRLF>結(jié)束</p><p><

77、;b>  554 操作失敗</b></p><p>  第四章 RFC822</p><p>  說到發(fā)送和接受郵件,我們就必須不得不提RFC822了。RFC822的全稱是“ARPA因特網(wǎng)文本信件格式的標準”(Standard for the Format of ARPA Internet Text Messages)。該標準提供了郵件內(nèi)容的格式和相關語義。</p

78、><p>  第一節(jié) RFC822簡單介紹</p><p>  RFC822規(guī)定的電子郵件內(nèi)容全部由ASCII字符組成,就是通常所說的文本文件,因而標準將它稱為Internet文本信件(Internet Text Messages)。</p><p>  從直觀上看,信件非常簡單,就是一系列由ASCII字符組成的文本行,每一行以回車換行符(“CRLF“,就是ASCI

79、I碼的13和10)結(jié)束。</p><p>  從組織上看,信件內(nèi)容結(jié)構分為兩大部分,中間用一個空白行(只有CRLF符的行)來分隔。第一部分稱為信件的頭部(the header of the message),包括有關發(fā)送方、接收方、發(fā)送日期等信息。第二部分稱為信件的體部(Body of the message),包括信件內(nèi)容的正文文本。信頭是必需的,信體是可選的,即信體可有可無。如果不存在信體,用作分隔的空白行也

80、就不需要。在信體中,也可以有用作分隔的空白行。這樣設計的信件便于進行語法分析,提取信件的基本信息。</p><p>  在RFC822中規(guī)定,信件體就是一系列的向收信人表達信息的文本行,比較簡單,可以包含任意文本,并沒有附加的結(jié)構。信件頭則具有比較復雜的結(jié)構,在下一小節(jié)中詳述。</p><p>  第二節(jié) 信件的頭部</p><p>  1 信頭的一般格式<

81、;/p><p>  信頭的結(jié)構比較復雜,信頭由若干信頭字段(header field)組成,這些字段為用戶和程序提供了關于信件的信息。要了解信頭的結(jié)構就要弄清楚各種信頭字段。</p><p>  所有的信頭字段都具有相同的語法結(jié)構,從邏輯上說,包括四部分,字段名(field name),緊跟冒號":" (colon),后跟字段體(field body),最后以回車換行符(C

82、RLF)終止。即</p><p>  信頭字段 = 字段名:字段體 CRLF</p><p>  字段名必須由除了冒號和空格以外的可打印US—ASCII字符(其值在33和126之間)組成,大多數(shù)字段的字段名稱由一系列字母,數(shù)字組成,中間經(jīng)常插入橫線符。字段名告訴電子郵件軟件如何翻譯該行中剩下的內(nèi)容。</p><p>  字段體可以包括除了CR和LF之外的任何ASCI

83、I字符。但是其中的空格,加括號的注釋,引號和多行字段都比較復雜,另外,字段體的語法和語義依賴于字段名,每個類型的字段有特定的格式。</p><p>  RFC822為信件定義了一些標準字段,并提供了用戶自行定義非標準字段的方</p><p>  2 結(jié)構化字段和非結(jié)構化字段</p><p>  每個字段所包含的信息不同,字段大體可以分為結(jié)構化字段和非結(jié)構化字段。&

84、lt;/p><p>  結(jié)構化字段有特定的格式,由語法分析程序檢測。Sender 字段就是一個很好的例子,它的字段內(nèi)容是信箱, 有一個離散的結(jié)構。</p><p>  非結(jié)構化的字段含有任意的數(shù)據(jù),沒有固定格式。例如,Subject字段可以含有任意的文字,并且沒有固定格式。非結(jié)構化的字段數(shù)量較少,只有Subject、 Comments、擴展字段,非標準字段、IN—Reply和Reference

85、s等。所有其它字段都是結(jié)構化的。</p><p>  3 信頭字段的元素</p><p>  盡管Email信件的總體結(jié)構非常簡單,但一些信頭字段的結(jié)構是很復雜的。下面介紹一些大多數(shù)字段共有的元素。</p><p><b> ?。?)空白符</b></p><p>  像其它文本文件一樣,空白符包括空格符(ASCII碼

86、32)和制表符Tab(ASCII碼19)。此外,行末的回車換行符CRLF也應算是空白符。使用空白符可以對字段進行格式化,增加它的可讀性。例如,每個字段間用CRLF來分離,在字段內(nèi)用空格來分隔字段名和字段內(nèi)容。在Subject后面的冒號和內(nèi)容之間插入空格字符,會使字段結(jié)構更加清晰。在Email中,空白符的使用并沒有固定的規(guī)則,但應當正確地使用,僅在需要時才使用空白符,以便接收軟件進行語法分析。</p><p>&l

87、t;b> ?。?)注解</b></p><p>  注解是由括號括起來的一系列字符,例如,(這份禮物)。注解一般用在非結(jié)構化的信頭字段中,沒有語法語義,僅為人提供了一些附加的信息。如果在加引號的字符串中有包括在括號中的字符,那是字符串的一部分,不是注解。在解釋信件的時候,會將注解忽略,可以用一個空格字符代替它們,這樣就什么也不會破壞。</p><p><b> 

88、?。?)字段折疊</b></p><p>  每個信頭字段從邏輯上說應當是一個由字段名、冒號、字段體和CRLF組成的單一的行,但為了書寫與顯示的方便,增加可讀性,也為了符合1000/80的行字符數(shù)的限制,可以將超過80個字符的信頭字段分為多行,即對于比較長的字段,可以分割成幾行,形成折疊。在結(jié)構化和非結(jié)構化字段中都允許折疊。通過在字段中某些點插入CRLF符和至少一個或多個空白字符來實現(xiàn)字段的折疊,第一

89、行后面的行稱為信頭字段的續(xù)行。續(xù)行都以一個空白符開始,這種方法稱為折疊(folding),例如標題字段Subject: This is a test可以表示為:</p><p>  Subject: This is a test</p><p>  反之,將一個被折疊成多行的信頭字段恢復到它的單行表示的過程叫做去折疊,只要簡單地移除后面跟著空格的CRLF,將折疊空白符CRLF轉(zhuǎn)換成空格字符

90、,就可以完成去折疊(unfolding)。在分析被折疊的字段的語法時,要把一個多行的折疊字段展開為一行,根據(jù)它的非折疊的形式來分析它的語法與語義。</p><p><b> ?。?)字段大小寫</b></p><p>  字段名稱是不區(qū)分大小寫的,所以Subject、subject或SUBJECT都一樣。不過字段名稱大小寫有習慣的常用形式,如主題字段的大小寫形式通常為

91、Subject。字段體的大小寫稍微復雜點,要視情況而定。比如Subject后面的字段體,其中的大寫可能就是縮寫的專用名詞,不能改動。</p><p><b>  4標準的信頭字段</b></p><p>  下面介紹RFC822中定義的常用的標準信頭字段。</p><p>  表4.1 RFC822常用的標準信頭字段</p>&

92、lt;p>  圖表中的關鍵字表明了電子郵件借用了辦公室備忘錄中的概念和術語:電子郵件的頭部能夠包含一行說明應當接收到該備忘錄的接收方。象傳統(tǒng)的辦公室備忘錄一樣,電子郵件使用關鍵字Cc指明一個復寫副本(carbon copy).電子郵件軟件必須向Cc:后面的電子郵件地址表中的每個地址發(fā)送一份消息的副本。</p><p>  傳統(tǒng)的辦公室過程要求備忘錄的發(fā)送方通知接收方副本是否傳給其它人。有時發(fā)送方希望將備忘錄

93、的一個副本給別人而不顯示出有一個副本被發(fā)送出去。一些電子郵件系統(tǒng)提供這樣的選項,遵循傳統(tǒng)的辦公室術語,用盲復寫副本(blind carbon copy)來表示。創(chuàng)建消息的用戶</p><p>  在關鍵字Bcc后給出一個電子郵件地址表,指定一個或多個盲復寫副本。雖然Bcc在發(fā)送方出現(xiàn),但當信息發(fā)送時,郵件系統(tǒng)將它從消息中除去。每個接收方必須檢查頭部的To和Cc行以決定信息是直接發(fā)送還是作為盲副本發(fā)送的(有些郵件系

94、統(tǒng)在正文部分附加信息來告訴接收者它是一個盲副本)。其它接收者不知道有哪些用戶接收到盲副本。</p><p>  電子郵件使用與傳統(tǒng)的辦公室備忘錄相同的格式和術語:頭部包括與消息有關的信息,正文包括消息文本。電子郵件頭部的行說明發(fā)送方、接收方、日期、主題、應當收到副本的人的列表。</p><p><b> ?。?)擴展字段</b></p><p>

95、;  如果想在信頭中加入RFC822中沒有規(guī)定的字段,就需要創(chuàng)建非標準字段。方法非常簡單,只要在自定義的信頭字段名的前面使用X-前綴。RFC822將這種方法稱為擴展字段。 事實上已經(jīng)有許多擴展字段被廣泛應用,但沒有標準定義。例如:</p><p><b>  X-LOOP字段</b></p><p>  X-LOOP字段用來防止郵件的循環(huán)傳送。過濾或郵件列表處

96、理程序,可以給它處理的每個信件增加一個X-LOOP字段,以后就可以根據(jù)這個字段中含有的特別值,判斷一個信件是否被循環(huán)傳送。如果確認郵件發(fā)生了循環(huán),過濾或郵件列表處理程序就可以用不同的方式處理該信件。</p><p>  ◆X-Mailer字段</p><p>  X-Mailer字段用于指示什么樣的程序產(chǎn)生了這個信件,它是使用最廣泛的擴展字段。產(chǎn)生郵件的軟件可以為所有發(fā)送的信件增加合適的X

97、-Mailer字段,該字段不僅含有軟件的名稱,還包含軟件的版本號。例如軟件名為Littlefox Mailer,版本為V1.0, 可以將“X-Mailer:Littlefox Mailer V1.0”加到郵件信頭中去。</p><p>  下面列出了一些在因特網(wǎng)電子郵件中可以找到的普通關鍵字,以及使用它們的目的。</p><p>  關鍵字 含義</p><p&

98、gt;  From 發(fā)送方地址</p><p>  To 接收方地址</p><p>  Cc 復制副本地址</p><p>  Date 信息創(chuàng)建日期</p><p>  Subject 信息主題</p><p>  Reply-To 回復地址</p&g

99、t;<p>  X-Charset 使用的字符集(通常為ASCII)</p><p>  X-Mailer 發(fā)送信息所使用的軟件</p><p>  X-Sender 發(fā)送方地址的副本</p><p>  X-Face 經(jīng)編碼的發(fā)送方面孔的圖象</p><p>  整個系統(tǒng)的核心是收發(fā)信件的操作,因此為了

100、方便維護,以后的升級,故將這兩個最主要的操作寫成類庫(.dll)的形式,以組件的形式加載到主程序中,而且其它的功能如果需要的話,也可以通過這樣的組件的形式增加到主程序中。這也體現(xiàn)了C Sharp這一新的微軟主推語言的方便和高校。而且這樣做也方便了我們小組的程序的順利結(jié)合。</p><p>  第五章 命名控件MailSend</p><p>  由于在C Sharp語言中,都是以命名控件來

101、組織程序的。而所有的類都歸屬于一個特定的命名空間下。需要的命名空間系統(tǒng)本身自帶了一部分,而且如果系統(tǒng)沒有你需要的命名空間的話,就可以自己編寫,本節(jié)中的這個命名空間就是由于需要而編寫的。而調(diào)用某一個類中的某個變量成員的方法就是通過 命名空間名.類名.變量成員 來訪問的,當然在C Sharp 中如果在程序開始通過Using 命名空間名,就可以直接的象C++那樣來訪問成員變量,可以說相當?shù)姆奖?,這些都會在程序中體現(xiàn)出來,再次不再做過多的敘述。

102、</p><p>  第一節(jié) 發(fā)送郵件類SmtpMail</p><p>  1 主要成員變量說明</p><p>  1)網(wǎng)絡連接類及實例TcpClient tc</p><p>  為 TCP 網(wǎng)絡服務提供客戶端連接類TcpClient實例對象tc。TcpClient 類提供了一些簡單的方法,用于在同步阻塞模式下通過網(wǎng)絡來連接、發(fā)送

103、和接收流數(shù)據(jù)。而實例化的過程也是連接SMTP服務器的過程。它的重載方法之一的兩個參數(shù)一個為服務器名稱字符串,另一個為服務器的埠。</p><p>  2)提供用于網(wǎng)絡訪問的基礎數(shù)據(jù)流及其實例 NetworkStream ns</p><p>  此類提供訪問網(wǎng)絡的基礎數(shù)據(jù)流的方法。其中最基本也是最重要的兩個方法就是Write()和Read()方法,至于參數(shù)不再次贅述。</p>

104、<p>  3)一維字符串數(shù)組變量FilePath</p><p>  此字符串數(shù)組主要用來存放用戶選擇的附件的絕對路徑名,并在發(fā)送帶附件的郵件時用到。</p><p>  4)發(fā)送郵件所需的基本參數(shù)</p><p>  比如用于ESMTP等錄檢驗用的用戶名、密碼,發(fā)送郵件需要的收信人,發(fā)信人地址以及主題等等在此不再贅述。</p><

105、p>  2 主要成員函數(shù)說明</p><p>  1)重載的構造函數(shù) SmtpMail()</p><p>  此函數(shù)主要用于在初始化過程中,把用戶選擇的附件的路徑以參數(shù)的形式傳給FilePath。</p><p>  2)添加附件的函數(shù)AddAttachment</p><p>  傳給FilePath的路徑,通過這樣一個函數(shù)就可

106、以循環(huán)的動態(tài)的添加到IList接口的一個對象中了,方便以后在具體的實現(xiàn)的過程中的使用。</p><p>  3)得到上傳的附件的文件流GetStream</p><p>  由于在網(wǎng)絡中的操作都是以網(wǎng)絡流的形式來實現(xiàn)的,因此先將上傳的附件轉(zhuǎn)換成文件流,然后再用Write的方法把這些附件的文件流寫入到網(wǎng)絡中,來完成發(fā)送附件的操作。具體實現(xiàn)代碼如下所示:</p><p&g

107、t;  private string GetStream(string FilePath) </p><p><b>  { </b></p><p>  //建立文件流對象 </p><p>  System.IO.FileStreamFileStr=new System.IO.FileStream(FilePath,System.IO.F

108、ileMode.Open); </p><p>  byte[] by=new byte[System.Convert.ToInt32(FileStr.Length)]; </p><p>  FileStr.Read(by,0,by.Length); </p><p>  FileStr.Close(); </p><p>  return

109、(System.Convert.ToBase64String(by)); </p><p><b>  }</b></p><p>  4)將字符串編碼為Base64字符串的函數(shù)Base64Encode</p><p>  由于ESMTP的LOGIN認證機制是采用Base64編碼,當用戶發(fā)出AUTHLOGIN的命令后,服務器返回334的應答碼

110、等待用戶輸入。如果身份確認后服務器返回235的應答碼,否則返回失敗信息。所以要將用戶名和密碼轉(zhuǎn)換成Base64編碼然后再發(fā)給服務器。此函數(shù)的作用就是把給定的字符串轉(zhuǎn)換成相應的Base64編碼的字符串。</p><p>  5)發(fā)送SMTP命令的函數(shù)SendCommand</p><p>  這個函數(shù)的作用是把SMTP命令的字符串轉(zhuǎn)換成對應的字節(jié)型值(C#中規(guī)定的Write方法只能寫入字

111、節(jié)型的數(shù)據(jù))然后寫入網(wǎng)絡中,如果操作成功就返回一個標志為真的布爾型變量,如果操作失敗或者發(fā)生異常就返回標志為假的布爾型變量。具體代碼如下所示:</p><p>  private bool SendCommand(string str) </p><p><b>  { </b></p><p><b>  //定義一個數(shù)組</

112、b></p><p>  byte[] WriteBuffer; </p><p>  //設定一個布爾類型的變量</p><p>  bool state=false; </p><p>  WriteBuffer = Encoding.Default.GetBytes(str);</p><p>  //加入

113、防錯機制,可以有效提高程序運行的效率和捕獲出錯信息</p><p><b>  try</b></p><p><b>  {</b></p><p>  //向網(wǎng)絡中寫入數(shù)據(jù)</p><p>  ns.Write(WriteBuffer,0,WriteBuffer.Length); </p&

114、gt;<p>  state=true;</p><p><b>  }</b></p><p>  catch(Exception ex)</p><p><b>  {</b></p><p><b>  //返回出錯信息</b></p><

溫馨提示

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

評論

0/150

提交評論