畢業(yè)論文(電子郵件客戶(hù)端軟件)_第1頁(yè)
畢業(yè)論文(電子郵件客戶(hù)端軟件)_第2頁(yè)
畢業(yè)論文(電子郵件客戶(hù)端軟件)_第3頁(yè)
畢業(yè)論文(電子郵件客戶(hù)端軟件)_第4頁(yè)
畢業(yè)論文(電子郵件客戶(hù)端軟件)_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 xx 科技大學(xué)本科生畢業(yè)論文 I第 I 頁(yè) 共 52 頁(yè)電子郵件客戶(hù)端軟件目錄目錄第第 1 1 章章 引引 言言.11.1 電子郵件介紹.11.2 開(kāi)發(fā)背景.21.3 開(kāi)發(fā)環(huán)境及運(yùn)行環(huán)境.31.3.1 開(kāi)發(fā)環(huán)境.31.3.2 運(yùn)行環(huán)境.3第第 2 2 章章 軟件架構(gòu)及系統(tǒng)用例圖軟件架構(gòu)及系統(tǒng)用例圖.42.1 系統(tǒng)架構(gòu):.42.2 系統(tǒng)總體用例:.42.3 程序功能框架圖:.52.4 發(fā)送郵件類(lèi).62.5 附加小功能類(lèi).6第第 3 3 章章 SMTPSMTP 協(xié)議的研究協(xié)議的研究 .83.1.1 介紹 SMTP 協(xié)議.83.1.2 SMTP 模型.83.2.1 SMTP 協(xié)議的命令.103.2

2、.2 SMTP 的應(yīng)答.18第第 4 4 章章 RFC822RFC822.21214.1 RFC822 簡(jiǎn)單介紹.214.2 信件的頭部.22第第 5 5 章章 命名控件命名控件 MAILSENDMAILSEND .295.1 發(fā)送郵件的類(lèi) SMTPMAIL.29 xx 科技大學(xué)本科生畢業(yè)論文 II第 II 頁(yè) 共 52 頁(yè)5.2 ADDEXTRA類(lèi) .40第第 6 6 章章 軟件運(yùn)行時(shí)的界面軟件運(yùn)行時(shí)的界面.426.1 新建賬號(hào).426.2 發(fā)送不帶附件的郵件.436.3 發(fā)送帶附件的郵件.436.4 驗(yàn)證郵件發(fā)送是否成功.44第第 7 7 章章 系統(tǒng)測(cè)試系統(tǒng)測(cè)試.467.1 同一 SMTP

3、 服務(wù)器發(fā)送純文本的郵件測(cè)試.467.2 同一 SMTP 服務(wù)器發(fā)送帶附件的郵件測(cè)試.467.3 不同 SMTP 服務(wù)器發(fā)送郵件測(cè)試.47第第 8 8 章章 結(jié)結(jié) 論論.48致致 謝謝.49參考文獻(xiàn)參考文獻(xiàn).50 xx 科技大學(xué)本科生畢業(yè)論文 0第 0 頁(yè) 共 52 頁(yè)第第 1 1 章章 引引 言言1.11.1 電子郵件介紹電子郵件介紹電子郵件(簡(jiǎn)稱(chēng) E-mai1)又稱(chēng)電子信箱、電子郵政,它是種用電子手段提供信息交換的通信方式。它是全球多種網(wǎng)絡(luò)上使用最普遍的一項(xiàng)服務(wù)。這種非交互式的通信,加速了信息的交流及數(shù)據(jù)傳送,它是個(gè)簡(jiǎn)易、快速的方法。通過(guò)連接全世界的 Internet,實(shí)現(xiàn)各類(lèi)信號(hào)的傳送、

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

5、己的信箱中讀取信件,信箱實(shí)際上是由文件管理系統(tǒng)支持的個(gè)實(shí)體。因?yàn)殡娮余]件是通過(guò)郵件服務(wù)器(mai1 server)來(lái)傳遞檔的。通常 mail server是執(zhí)行多任務(wù)操作系統(tǒng) UNIX 的計(jì)算機(jī),它提供 24 小時(shí)的電子郵件服務(wù),用戶(hù)只要向 mail server 管理人員申請(qǐng)個(gè)信箱賬號(hào),就可使用這項(xiàng)快速的郵件服務(wù)。 xx 科技大學(xué)本科生畢業(yè)論文 1第 1 頁(yè) 共 52 頁(yè)電子郵件的工作原理:1) 電子郵件系統(tǒng)是一種新型的信息系統(tǒng),是通信技術(shù)和計(jì)算機(jī)技術(shù)結(jié)合的產(chǎn)物。 電子郵件的傳輸是通過(guò)電子郵件簡(jiǎn)單傳輸協(xié)議(Simple Mail Transfer Protocol,簡(jiǎn)稱(chēng)SMTP)這一系統(tǒng)軟件

6、來(lái)完成的,它是 Internet 下的一種電子郵件通信協(xié)議。 2) 電子郵件的基本原理,是在通信網(wǎng)上設(shè)立“電子信箱系統(tǒng)” ,它實(shí)際上是一個(gè)計(jì)算機(jī)系統(tǒng)。系統(tǒng)的硬件是一個(gè)高性能、大容量的計(jì)算機(jī)。硬盤(pán)作為信箱的存儲(chǔ)介質(zhì),在硬盤(pán)上為用戶(hù)分一定的存儲(chǔ)空間作為用戶(hù)的“信箱” ,每位用戶(hù)都有屬于自己的個(gè)電子信箱。并確定個(gè)用戶(hù)名和用戶(hù)可以自己隨意修改的口令。存儲(chǔ)空間包含存放所收信件、編輯信件以及信件存盤(pán)三部分空間,用戶(hù)使用口令開(kāi)啟自己的信箱,并進(jìn)行發(fā)信、讀信、編輯、轉(zhuǎn)發(fā)、存檔等各種操作。系統(tǒng)功能主要由軟件實(shí)現(xiàn)。3) 電子郵件的通信是在信箱之間進(jìn)行的。用戶(hù)首先開(kāi)啟自己的信箱,然后通過(guò)鍵入命令的方式將需要發(fā)送的郵

7、件發(fā)到對(duì)方的信箱中。郵件在信箱之間進(jìn)行傳遞和交換,也可以與另個(gè)郵件系統(tǒng)進(jìn)行傳遞和交換。收方在取信時(shí),使用特定賬號(hào)從信箱提取。1.21.2 開(kāi)發(fā)背景開(kāi)發(fā)背景當(dāng)前流行的各大郵件客戶(hù)端軟件的除了最主要的收發(fā)信件之外,功能越來(lái)越復(fù)雜,但是人們平常真正用到的功能很少,很多功能尤其對(duì)于那些計(jì)算機(jī)知識(shí)相對(duì)缺乏的人來(lái)說(shuō),更加顯得太過(guò)于華麗而不太實(shí)用。有鑒于此,在了解 RFC 底層協(xié)議的基礎(chǔ)上,我們開(kāi)發(fā)了這個(gè)各種功能相對(duì)簡(jiǎn)單實(shí)用的郵件客戶(hù)端程序,簡(jiǎn)化了很多不必要的功能。 xx 科技大學(xué)本科生畢業(yè)論文 2第 2 頁(yè) 共 52 頁(yè)1.31.3 開(kāi)發(fā)環(huán)境及運(yùn)行環(huán)境開(kāi)發(fā)環(huán)境及運(yùn)行環(huán)境當(dāng)前流行的各大郵件客戶(hù)端軟件的除了最

8、主要的收發(fā)信件之外,功能越來(lái)越復(fù)雜,但是人們平常真正用到的功能很少,很多功能尤其對(duì)于那些計(jì)算機(jī)知識(shí)相對(duì)缺乏的人來(lái)說(shuō),更加顯得太過(guò)于華麗而不太實(shí)用。有鑒于此,在了解 RFC 底層協(xié)議的基礎(chǔ)上,我們開(kāi)發(fā)了這個(gè)各種功能相對(duì)簡(jiǎn)單實(shí)用的郵件客戶(hù)端程序,簡(jiǎn)化了很多不必要的功能。.1 開(kāi)發(fā)環(huán)境開(kāi)發(fā)環(huán)境Microsoft Windows XP Professional、Microsoft visual studio 2005 C#、Microsoft access數(shù)據(jù)庫(kù)。.2 運(yùn)行環(huán)境運(yùn)行環(huán)境郵件客戶(hù)端運(yùn)行在 Windows 2000 或以上操作系統(tǒng)平臺(tái)、并且安裝有Micros

9、oft .NET Framework 2.0或者以上版本。 xx 科技大學(xué)本科生畢業(yè)論文 0第 0 頁(yè) 共 52 頁(yè)第第 2 2 章章 軟件架構(gòu)及系統(tǒng)用例圖軟件架構(gòu)及系統(tǒng)用例圖2.12.1 系統(tǒng)架構(gòu):系統(tǒng)架構(gòu):如圖 2.1:圖 2.1 軟件架構(gòu)圖2.22.2 系統(tǒng)總體用例:系統(tǒng)總體用例:如圖 2.2:用戶(hù)主界面主要功能選擇發(fā)送郵件類(lèi)接收郵件類(lèi) xx 科技大學(xué)本科生畢業(yè)論文 1第 1 頁(yè) 共 52 頁(yè)用戶(hù)新建賬號(hào)發(fā)送郵件接收郵件純文本郵件帶附件郵件圖 2.2 系統(tǒng)總體用例圖2.32.3 程序功能框架圖:程序功能框架圖:如圖 2.2: xx 科技大學(xué)本科生畢業(yè)論文 2第 2 頁(yè) 共 52 頁(yè)客戶(hù)端

10、軟件電子郵件接收系統(tǒng)電子郵件接收系統(tǒng)附加功能各種錯(cuò)誤的提示簡(jiǎn)單郵件接收帶有附件的郵件接收簡(jiǎn)單郵件發(fā)送帶有附件的郵件發(fā)送電子郵件編寫(xiě)電子郵件的分類(lèi)管理通訊簿管理圖 2.3 程序功能圖2.42.4 發(fā)送郵件類(lèi)發(fā)送郵件類(lèi)是以“發(fā)送郵件”的核心,類(lèi)名為 SmtpMail,隸屬于命名空間 MailSend。封裝了發(fā)送郵件的具體實(shí)現(xiàn)方法,也是具體的 RFC 用代碼實(shí)現(xiàn)的過(guò)程。而用戶(hù)通過(guò)具體的操作接口,接口與 SmtpMail 類(lèi)通過(guò)交互操作來(lái)實(shí)現(xiàn)用戶(hù)發(fā)送信件的操作。2.52.5 附加小功能類(lèi)附加小功能類(lèi)是獲取一些諸如系統(tǒng)時(shí)間,當(dāng)前用戶(hù)名,以及本機(jī) IP 之類(lèi)的類(lèi),類(lèi)名為 xx 科技大學(xué)本科生畢業(yè)論文 3第

11、 3 頁(yè) 共 52 頁(yè)AddExtra,隸屬于命名空間 MailSend。 xx 科技大學(xué)本科生畢業(yè)論文 4第 4 頁(yè) 共 52 頁(yè)第第 3 章章 SMTP 協(xié)議的研究協(xié)議的研究由于要開(kāi)發(fā)的是郵件客戶(hù)端程序,就不得不用到 SMTP 協(xié)議和 POP 協(xié)議。而我個(gè)人負(fù)責(zé)的是郵件發(fā)送功能的實(shí)現(xiàn),因此就必然會(huì)涉及到 SMTP(Simple Mail Transfer Protocol)協(xié)議。SMTP 被用來(lái)在因特網(wǎng)上發(fā)送郵件,該協(xié)議規(guī)定了一些基本的命令和方法使客戶(hù)端與服務(wù)器進(jìn)行交互,以達(dá)到發(fā)送郵件的目的。.1 介紹介紹 SMTPSMTP 協(xié)議協(xié)議簡(jiǎn)單郵件傳輸協(xié)議(SMTP)的目標(biāo)是可靠

12、高效地傳送郵件,它獨(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)行郵件傳送。更特別的是,郵件可以通過(guò)不同網(wǎng)絡(luò)上的主機(jī)接力式傳送。.2 SMTPSMTP 模型模型SMTP 設(shè)計(jì)基于以下通信模型:針對(duì)用戶(hù)的郵件請(qǐng)求,發(fā)送 SMTP 建立與接

13、收 xx 科技大學(xué)本科生畢業(yè)論文 5第 5 頁(yè) 共 52 頁(yè)SMTP 之間建立一個(gè)雙向傳送通道。接收 SMTP 可以是最終接收者也可以是中間傳送者。SMTP 命令由發(fā)送 SMTP 發(fā)出,由接收 SMTP 接收,而應(yīng)答則反方面?zhèn)魉?。一旦傳送通道建立,SMTP 發(fā)送者發(fā)送 MAIL 命令指明郵件發(fā)送者。如果 SMTP接收者可以接收郵件則返回 OK 應(yīng)答。SMTP 發(fā)送者再發(fā)出 RCPT 命令確認(rèn)郵件是否接收到。如果 SMTP 接收者接收,則返回 OK 應(yīng)答;如果不能接收到,則發(fā)出拒絕接收應(yīng)答(但不中止整個(gè)郵件操作) ,雙方將如此重復(fù)多次。當(dāng)接收者收到全部郵件后會(huì)接收到特別的序列,如果接收者成功處理

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

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

16、種類(lèi)似于語(yǔ)言的變量。.1 SMTPSMTP 協(xié)議的命令協(xié)議的命令SMTP 命令定義了郵件傳輸或由用戶(hù)定義的系統(tǒng)功能。它的命令是由結(jié)束的字符串。而在帶有參數(shù)的情況下,命令本身由和參數(shù)分開(kāi),如果未帶參數(shù)可以直接和連接。郵箱的語(yǔ)法格式必須和接收站點(diǎn)的格式一致。下面討論 SMTP命令和應(yīng)答。發(fā)送郵件操作涉及到不同的數(shù)據(jù)對(duì)象,它們由不同的參數(shù)相互連接?;貜?fù)路徑就是 MAIL 命令的參數(shù),而轉(zhuǎn)發(fā)路徑則是 RCPT 命令的參數(shù),郵件日期是 DATA 命令的參數(shù)。這些參數(shù)或者數(shù)據(jù)對(duì)象必須跟在命令后。這種模式也就要求有不同的緩沖區(qū)來(lái)存儲(chǔ)這些對(duì)象,也就是說(shuō),有一個(gè)回復(fù)路徑緩沖區(qū),一個(gè)轉(zhuǎn)發(fā)路徑緩沖區(qū)

17、,一個(gè)郵件內(nèi)容緩沖區(qū)。特定的命令產(chǎn)生自己的緩沖區(qū),或使一個(gè)或多個(gè)緩沖的內(nèi)容被清除。HELLO (HELO)此命令用于向接收 SMTP 確認(rèn)發(fā)送 SMTP。參數(shù)域包括發(fā)送 SMTP 的主機(jī)名。接收 SMTP 通過(guò)連接確認(rèn)命令來(lái)向發(fā)送 SMTP 確認(rèn)接收 SMTP。引命令和 OK 響應(yīng)確認(rèn)發(fā)送和接收 SMTP 進(jìn)入了初始狀態(tài),也就是說(shuō),沒(méi)有操作正在執(zhí)行,所有狀態(tài)表和緩 xx 科技大學(xué)本科生畢業(yè)論文 7第 7 頁(yè) 共 52 頁(yè)沖區(qū)已經(jīng)被子清除。MAIL (MAIL) 此命令用于開(kāi)始將郵件發(fā)送到一個(gè)多個(gè)郵箱中。參數(shù)域包括回復(fù)路徑。返回路徑中包括了可選的主機(jī)和發(fā)送者郵箱列表。當(dāng)有主機(jī)列表時(shí),它是一個(gè)回復(fù)

18、路徑源,它說(shuō)明此郵箱是由在表中的主機(jī)一一傳遞發(fā)送(第一個(gè)主機(jī)是最后一個(gè)接收到此郵件的主機(jī))過(guò)來(lái)的。此表也有作向發(fā)送者返回非傳遞信號(hào)的源路徑。因?yàn)槊總€(gè)傳遞主機(jī)地址都被加在此表起始處,它就必須使用發(fā)送 IPCE 而不是接收 IPCE(如果它們不是一個(gè) IPCE 的話(huà))清楚的名稱(chēng)。一些出錯(cuò)信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。RECIPIENT (RCPT)此命令用于確定郵件內(nèi)容的唯一接收者;多個(gè)接收者將由多個(gè)此命令指定。轉(zhuǎn)發(fā)路徑中包括一個(gè)可選的主機(jī)和一個(gè)必須的目的郵箱。當(dāng)出現(xiàn)主機(jī)列表時(shí),這就是一個(gè)源路

19、徑,它指明郵件必須向列表中的上一個(gè)主機(jī)發(fā)送。如果接收 SMTP 未實(shí)現(xiàn)郵件的傳遞發(fā)送,就會(huì)返回如未知本地用戶(hù)(550)的信息給用戶(hù)。當(dāng)郵件被傳遞發(fā)送時(shí),傳遞主機(jī)必須將自己的名稱(chēng)由轉(zhuǎn)發(fā)路徑的開(kāi)始處移至回復(fù)路徑的結(jié)束處。當(dāng)郵件最終到達(dá)目的地時(shí),接收 SMTP 將以它的主機(jī)郵件格式自己的名稱(chēng)插入目標(biāo)郵件中。例如,由傳遞主機(jī) A 接收的帶有如下參數(shù)的郵件時(shí),F(xiàn)ROM:TO:將會(huì)變成如下形式: xx 科技大學(xué)本科生畢業(yè)論文 8第 8 頁(yè) 共 52 頁(yè)FROM:TO:.此命令導(dǎo)致它的轉(zhuǎn)發(fā)路徑參數(shù)加入轉(zhuǎn)發(fā)路徑緩沖區(qū)中。DATA (DATA)接收者將跟在命令后的行作為郵件內(nèi)容。此命令導(dǎo)致此命令后的郵件內(nèi)容加入

20、郵件內(nèi)容緩沖區(qū)。郵件內(nèi)容可以包括所有 128 個(gè) ASCII 碼字符。郵件內(nèi)容由只包括一個(gè)句號(hào)的行結(jié)束,也就是如下的字符序列:.,它指示了郵件的結(jié)束。郵件內(nèi)容的結(jié)束指示要求接收者現(xiàn)在就處理保存的郵件內(nèi)容。此過(guò)程將回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)的內(nèi)容全部清空。如果操作成功,接收者必須返回 OK 應(yīng)答;如果失敗也必須返回失敗應(yīng)答。當(dāng)接收 SMTP 收到一條信息時(shí),無(wú)論是用作轉(zhuǎn)發(fā)還是此郵件已經(jīng)到達(dá)目的地,它都必須在郵件內(nèi)容的開(kāi)始處加上時(shí)間戳這一行,這一行指示了接收到郵件主機(jī)和發(fā)出此郵件主機(jī)的標(biāo)識(shí),以及接收到郵件內(nèi)容的時(shí)間和日期。轉(zhuǎn)發(fā)的信件將有多行這樣的時(shí)間戳。當(dāng)接收 SMTP 作最后

21、一站的傳送時(shí),它將返回路徑信息行插入郵件中。此行包括了發(fā)送命令中的的信息。在這里,最后一站的傳送的意思是郵件將被送到目的用戶(hù)手中,但在一些情況下,郵件可能需要更進(jìn)一步的加工并由另外的郵件系統(tǒng)傳送??赡茉诜祷芈窂街械泥]箱與實(shí)際發(fā)送的郵件不一致,這個(gè)情況可能發(fā)生在需要傳送一個(gè)特定的錯(cuò)誤處理信箱而不是信件發(fā)送者那里。上面所述說(shuō)明了,最后的郵件內(nèi)容由一個(gè)返回路徑行,和在其后的一個(gè)或多個(gè)時(shí)間戳行構(gòu)成。這些行后面是郵件內(nèi)容 xx 科技大學(xué)本科生畢業(yè)論文 9第 9 頁(yè) 共 52 頁(yè)的頭和體信息。當(dāng)處理后面的郵件數(shù)據(jù)指示部分成功時(shí)就需要特定的說(shuō)明。這種情況可能發(fā)生在發(fā)送 SMTP 發(fā)現(xiàn)當(dāng)郵件需要傳送給多個(gè)用戶(hù)

22、時(shí),只能夠成功地向其中的一部分發(fā)送信息這種情況下。在這種情況下,必須對(duì) DATA 命令發(fā)送 OK 應(yīng)答,而接收 SMTP 組織并發(fā)送一個(gè)不可傳遞郵件信息到信息的發(fā)送者。在此信息中或者發(fā)送一個(gè)不成功接收者的列表,或者每次發(fā)送一個(gè)不成接收者,而發(fā)送多次。所有不可傳遞郵件信息由MAIL 命令發(fā)送。返回路徑和接收時(shí)間戳例子Return-Path: Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PSTReceived: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PSTReceived:

23、 from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PSTDate: 27 Oct 81 15:01:01 PST From: JOEABC.ARPA Subject: Improved Mailing System Installed To: SAMJKL.ARPA This is to inform you that . SEND (SEND)此命令用于開(kāi)始一個(gè)發(fā)送命令,將郵件發(fā)送到一個(gè)或多個(gè)終端上。參數(shù)域包括了一個(gè)回復(fù)路徑,此命令如果成功就將郵件發(fā)送到終端上了。 xx 科技大學(xué)本科生畢業(yè)論文 10第 10 頁(yè) 共 52 頁(yè)回復(fù)路徑包括一個(gè)可選的

24、主機(jī)列表和發(fā)送者郵箱。當(dāng)出現(xiàn)主機(jī)列表時(shí),表示這是一個(gè)傳送路徑,郵件就是經(jīng)過(guò)這個(gè)路徑上的每個(gè)主機(jī)發(fā)送到這里的(列表上第一個(gè)主機(jī)是最后經(jīng)手的主機(jī)) 。此表用于返回非傳遞信號(hào)到發(fā)送者。因?yàn)槊總€(gè)傳遞主機(jī)地址都被加在此表起始處,它就必須使用發(fā)送 IPCE 而不是接收 IPCE(如果它們不是一個(gè)IPCE 的話(huà))清楚的名稱(chēng)。一些出錯(cuò)信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。SEND OR MAIL (SOML)此命令用于開(kāi)始一個(gè)郵件操作將郵件內(nèi)容傳送到一個(gè)或多個(gè)終端上,或者傳送到郵箱中。對(duì)于每個(gè)接收者,如果接收者終

25、端打開(kāi),郵件內(nèi)容將被傳送到接收者的終端上,否則就送到接收者的郵箱中。參數(shù)域包括回復(fù)路徑,如果成功地將信息送到終端或郵箱中此命令成功?;貜?fù)路徑包括一個(gè)可選的主機(jī)列表和發(fā)送者郵箱。當(dāng)出現(xiàn)主機(jī)列表時(shí),表示這是一個(gè)傳送路徑,郵件就是經(jīng)過(guò)這個(gè)路徑上的每個(gè)主機(jī)發(fā)送到這里的(列表上第一個(gè)主機(jī)是最后經(jīng)手的主機(jī)) 。此表用于返回非傳遞信號(hào)到發(fā)送者。因?yàn)槊總€(gè)傳遞主機(jī)地址都被加在此表起始處,它就必須使用發(fā)送 IPCE 而不是接收 IPCE(如果它們不是一個(gè)IPCE 的話(huà))清楚的名稱(chēng)。一些出錯(cuò)信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復(fù)路徑信息插入到回復(fù)路徑

26、緩沖區(qū)中。SEND AND MAIL (SAML) xx 科技大學(xué)本科生畢業(yè)論文 11第 11 頁(yè) 共 52 頁(yè)此命令用于開(kāi)始一個(gè)郵件操作將郵件內(nèi)容傳送到一個(gè)或多個(gè)終端上,并傳送到郵箱中。如果接收者終端打開(kāi),郵件內(nèi)容將被傳送到接收者的終端上和接收者的郵箱中。參數(shù)域包括回復(fù)路徑,如果成功地將信息送到郵箱中此命令成功?;貜?fù)路徑包括一個(gè)可選的主機(jī)列表和發(fā)送者郵箱。當(dāng)出現(xiàn)主機(jī)列表時(shí),表示這是一個(gè)傳送路徑,郵件就是經(jīng)過(guò)這個(gè)路徑上的每個(gè)主機(jī)發(fā)送到這里的(列表上第一個(gè)主機(jī)是最后經(jīng)手的主機(jī)) 。此表用于返回非傳遞信號(hào)到發(fā)送者。因?yàn)槊總€(gè)傳遞主機(jī)地址都被加在此表起始處,它就必須使用發(fā)送 IPCE 而不是接收 IP

27、CE(如果它們不是一個(gè)IPCE 的話(huà))清楚的名稱(chēng)。一些出錯(cuò)信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。RESET (RSET)此命令指示當(dāng)送郵件操作將被放棄。任何保存的發(fā)送者,接收者和郵件內(nèi)容應(yīng)該被拋棄,所有緩沖區(qū)和狀態(tài)表應(yīng)該被清除,接收方必須返回 OK 應(yīng)答。VERIFY (VRFY)此命令要求接收者確認(rèn)參數(shù)是一個(gè)用戶(hù)。如果這是(已經(jīng)知道的)用戶(hù)名,返回用戶(hù)的全名和指定的郵箱。此命令對(duì)回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒(méi)有影響。EXPAND (EXPN)此命令要求接收者確認(rèn)參數(shù)指定了一個(gè)郵

28、件發(fā)送列表,如果是一個(gè)郵件發(fā)送列表,就返回表中的成員。如果這是(已經(jīng)知道的)用戶(hù)名,返回用戶(hù)的全名和指定的郵箱。 xx 科技大學(xué)本科生畢業(yè)論文 12第 12 頁(yè) 共 52 頁(yè)此命令對(duì)回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒(méi)有影響。HELP (HELP)此命令導(dǎo)致接收者向 HELP 命令的發(fā)送者發(fā)出幫助信息。此命令可以帶參數(shù),并返回特定的信息作為應(yīng)答。此命令對(duì)回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒(méi)有影響。NOOP (NOOP) 此命令不影響任何參數(shù)和已經(jīng)發(fā)出的命令。它只是說(shuō)明沒(méi)有任何操作而不是說(shuō)明接收者發(fā)送了一個(gè) OK 應(yīng)答。此命令對(duì)回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖

29、區(qū)沒(méi)有影響。QUIT (QUIT)此命令指示接收方必須發(fā)送 OK 應(yīng)答然后關(guān)閉傳送信道。接收方在接到 QUIT 命令并做出響應(yīng)之前不應(yīng)該關(guān)閉通信信道。發(fā)送方在發(fā)送 QUIT 命令和接收到響應(yīng)之前也不應(yīng)該關(guān)閉信道。即使出錯(cuò),也不應(yīng)該關(guān)閉信道。如果連接被提前關(guān)閉,接收方應(yīng)該象接收到 RSET 命令一樣,取消所有等待的操作,但不恢復(fù)原先已經(jīng)做過(guò)的操作。而發(fā)送方應(yīng)該象接收到暫時(shí)錯(cuò)誤(4XX)一樣假定命令和操作仍在支持之中。TURN (TURN)此命令指定接收方要么發(fā)送 OK 應(yīng)答并改變角色為發(fā)送 SMTP,要么發(fā)送拒絕信息并保持自己的角色。如果程序 A 現(xiàn)在是發(fā)送 SMTP,它發(fā)出 TURN 命令后接

30、收到OK(250)應(yīng)答,它就變成了接收 SMTP。程序 A 就進(jìn)入初始狀態(tài),好象通信信道剛打開(kāi)一樣,這時(shí)它發(fā)送 220 準(zhǔn)備好服務(wù)信號(hào)。如果程序 B 現(xiàn)在是接收 SMTP,它發(fā)出 xx 科技大學(xué)本科生畢業(yè)論文 13第 13 頁(yè) 共 52 頁(yè)TURN 命令后接收到 OK(250)應(yīng)答,它就變成了發(fā)送 SMTP。程序 A 就進(jìn)入初始狀態(tài),好象通信信道剛打開(kāi)一樣,這時(shí)它準(zhǔn)備接收 220 準(zhǔn)備好服務(wù)信號(hào)。若要拒絕改變角色,接收方可以發(fā)送 502 應(yīng)答。對(duì)于這些命令的順序有一定的限制。對(duì)話(huà)的第一個(gè)命令必須是 HELLO 命令,此命令在此后的會(huì)話(huà)中也可以使用。如果 HELLO 命令的參數(shù)不可接受,必須由返

31、回一個(gè) 501 失敗應(yīng)答,同時(shí)接收到的 SMTP 必須保持在與剛才一致的狀態(tài)下。 NOOP,HELP,EXPN 和 VRFY 命令可以在會(huì)話(huà)的任何時(shí)候使用。MAIL,SEND,SOML 或 SAML 命令開(kāi)始一個(gè)郵件操作。一旦開(kāi)始了以后就要發(fā)送RCPT 和 DATA 命令。郵件操作可以由 RSET 命令終止。在一個(gè)會(huì)話(huà)中可以有一個(gè)或多個(gè)操作。如果在操作開(kāi)始參數(shù)不可接受,必須返回 501 失敗應(yīng)答,同時(shí)接收到的 SMTP 必須保持在與剛才一致的狀態(tài)下。如果操作中的命令順序出錯(cuò),必須返回 503 失敗應(yīng)答,同時(shí)接收到的 SMTP 必須保持在與剛才一致的狀態(tài)下。會(huì)話(huà)的最后一個(gè)命令必須是 QUIT 命

32、令。此命令在會(huì)話(huà)的其它時(shí)間不能使用。COMMAND 語(yǔ)法格式命令是由命令碼和其后的參數(shù)域組成的。命令碼是四個(gè)字母組成的,不區(qū)別大小寫(xiě)。因?yàn)橄旅娴拿畹淖饔檬窍嗤模篗AIL Mail mail MaIl mAIl這對(duì)于引導(dǎo)任何參數(shù)值的標(biāo)記也是適用的,如 TO 和 to 就是一樣的。命令碼和參數(shù)由一個(gè)或多個(gè)空格分開(kāi)。然而在回復(fù)路徑和轉(zhuǎn)發(fā)路徑中的參數(shù)是區(qū)別大小寫(xiě)的。特 xx 科技大學(xué)本科生畢業(yè)論文 14第 14 頁(yè) 共 52 頁(yè)別是在一些主機(jī)上,smith和Smith就根本不是一個(gè)用戶(hù)。參數(shù)域由不定長(zhǎng)的字符串組成,它由結(jié)束,接收方在完全接收到此序列前不會(huì)采取任何行動(dòng)。方括號(hào)代表可選的參數(shù)域。如果不

33、選擇的話(huà),系統(tǒng)選擇默認(rèn)的設(shè)置。下面是 SMTP 命令: HELO MAIL FROM: RCPT TO: DATA RSET SEND FROM: SOML FROM: SAML FROM: VRFY EXPN HELP NOOP QUIT TURN .2 SMTPSMTP 的應(yīng)答的應(yīng)答 xx 科技大學(xué)本科生畢業(yè)論文 15第 15 頁(yè) 共 52 頁(yè)對(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)入的狀

34、態(tài),而文本對(duì)人是有意義的。三位的響應(yīng)已經(jīng)包括了足夠的信息,不用再閱讀文本,文本可以直接拋棄或者傳遞給用戶(hù)。特別的是,文本是與接收和環(huán)境相關(guān)的,所以每次接收到的文本可能不同。在附錄 E 中可以看到全部的響應(yīng)碼。正規(guī)的情況下,響應(yīng)由下面序列構(gòu)成:三位的數(shù)字,一行文本和一個(gè),或者也可以是一個(gè)多行響應(yīng)。只有 EXPN 和 HELP 命令可以導(dǎo)致多行應(yīng)答,然而,對(duì)所有命令,多行響應(yīng)都是允許的。REPLY CODES BY FUNCTION GROUPS 500 格式錯(cuò)誤,命令不可識(shí)別(此錯(cuò)誤也包括命令行過(guò)長(zhǎng))501 參數(shù)格式錯(cuò)誤502 命令不可實(shí)現(xiàn)503 錯(cuò)誤的命令序列504 命令參數(shù)不可實(shí)現(xiàn)211 系

35、統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)214 幫助信息220 服務(wù)就緒221 服務(wù)關(guān)閉傳輸信道 421 服務(wù)未就緒,關(guān)閉傳輸信道(當(dāng)必須關(guān)閉時(shí),此應(yīng)答可以作為對(duì)任何命令的響應(yīng)) xx 科技大學(xué)本科生畢業(yè)論文 16第 16 頁(yè) 共 52 頁(yè)250 要求的郵件操作完成251 用戶(hù)非本地,將轉(zhuǎn)發(fā)向450 要求的郵件操作未完成,郵箱不可用(例如,郵箱忙)550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問(wèn))451 放棄要求的操作;處理過(guò)程中出錯(cuò)551 用戶(hù)非本地,請(qǐng)嘗試452 系統(tǒng)存儲(chǔ)不足,要求的操作未執(zhí)行552 過(guò)量的存儲(chǔ)分配,要求的操作未執(zhí)行553 郵箱名不可用,要求的操作未執(zhí)行(例如郵箱格式錯(cuò)誤

36、)354 開(kāi)始郵件輸入,以.結(jié)束554 操作失敗 xx 科技大學(xué)本科生畢業(yè)論文 17第 17 頁(yè) 共 52 頁(yè)第第 4 4 章章 RFC822RFC822說(shuō)道發(fā)送和接受郵件,我們就必須不得不提 RFC822 了。RFC822 的全稱(chēng)是“ARPA 因特網(wǎng)文本信件格式的標(biāo)準(zhǔn)”(Standard for the Format of ARPA Internet Text Messages)。該標(biāo)準(zhǔn)提供了郵件內(nèi)容的格式和相關(guān)語(yǔ)義。4.14.1 RFC822RFC822 簡(jiǎn)單介紹簡(jiǎn)單介紹RFC822 規(guī)定的電子郵件內(nèi)容全部由 ASCII 字符組成,就是通常所說(shuō)的文本文件,因而標(biāo)準(zhǔn)將它稱(chēng)為 Internet

37、 文本信件(Internet Text Messages)。從直觀上看,信件非常簡(jiǎn)單,就是一系列由 ASCII 字符組成的文本行,每一行以回車(chē)換行符(“CRLF“,就是 ASCII 碼的 13 和 10)結(jié)束。從組織上看,信件內(nèi)容結(jié)構(gòu)分為兩大部分,中間用一個(gè)空白行(只有 CRLF 符的行)來(lái)分隔。第一部分稱(chēng)為信件的頭部(the header of the message),包括有關(guān)發(fā)送方、接收方、發(fā)送日期等信息。第二部分稱(chēng)為信件的體部(Body of the message),包括信件內(nèi)容的正文文本。信頭是必需的,信體是可選的,即信體可有可無(wú)。如果不存在信體,用作分隔的空白行也就不需要。在信體

38、中,也可以有用作分隔的空白行。這樣設(shè)計(jì)的信件便于進(jìn)行語(yǔ)法分析,提取信件的基本信息。在 RFC822 中規(guī)定,信件體就是一系列的向收信人表達(dá)信息的文本行,比較簡(jiǎn)單,可以包含任意文本,并沒(méi)有附加的結(jié)構(gòu)。信件頭則具有比較復(fù)雜的結(jié)構(gòu),在下一小節(jié)中詳述。 xx 科技大學(xué)本科生畢業(yè)論文 18第 18 頁(yè) 共 52 頁(yè)4.24.2 信件的頭部信件的頭部1、信件頭部的一般格式 信頭的結(jié)構(gòu)比較復(fù)雜,信頭由若干信頭字段(header field)組成,這些字段為用戶(hù)和程序提供了關(guān)于信件的信息。要了解信頭的結(jié)構(gòu)就要弄清楚各種信頭字段。所有的信頭字段都具有相同的語(yǔ)法結(jié)構(gòu),從邏輯上說(shuō),包括四部分,字段名(field n

39、ame),緊跟冒號(hào): (colon),后跟字段體(field body),最后以回車(chē)換行符(CRLF)終止。即信頭字段 = 字段名:字段體 CRLF字段名必須由除了冒號(hào)和空格以外的可打印 USASCII 字符(其值在 33 和 126 之間)組成,大多數(shù)字段的字段名稱(chēng)由一系列字母,數(shù)字組成,中間經(jīng)常插入橫線(xiàn)符。字段名告訴電子郵件軟件如何翻譯該行中剩下的內(nèi)容。字段體可以包括除了 CR 和 LF 之外的任何 ASCII 字符。但是其中的空格,加括號(hào)的注釋?zhuān)?hào)和多行字段都比較復(fù)雜,另外,字段體的語(yǔ)法和語(yǔ)義依賴(lài)于字段名,每個(gè)類(lèi)型的字段有特定的格式。RFC822 為信件定義了一些標(biāo)準(zhǔn)字段,并提供了用戶(hù)

40、自行定義非標(biāo)準(zhǔn)字段的方2、結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段 每個(gè)字段所包含的信息不同,字段大體可以分為結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段。結(jié)構(gòu)化字段有特定的格式,由語(yǔ)法分析程序檢測(cè)。Sender 字段就是一個(gè)很好的例子,它的字段內(nèi)容是信箱, 有一個(gè)離散的結(jié)構(gòu)。非結(jié)構(gòu)化的字段含有任意的數(shù)據(jù),沒(méi)有固定格式。例如,Subject 字段可以含有任 xx 科技大學(xué)本科生畢業(yè)論文 19第 19 頁(yè) 共 52 頁(yè)意的文字,并且沒(méi)有固定格式。非結(jié)構(gòu)化的字段數(shù)量較少,只有 Subject、 Comments、擴(kuò)展字段,非標(biāo)準(zhǔn)字段、INReply 和 References 等。所有其它字段都是結(jié)構(gòu)化的。3、信頭字段的元素 盡管 E

41、mail 信件的總體結(jié)構(gòu)非常簡(jiǎn)單,但一些信頭字段的結(jié)構(gòu)是很復(fù)雜的。下面介紹一些大多數(shù)字段共有的元素。(1)空白符像其它文本文件一樣,空白符包括空格符(ASCII 碼 32)和制表符 Tab(ASCII 碼 19)。此外,行末的回車(chē)換行符 CRLF 也應(yīng)算是空白符。使用空白符可以對(duì)字段進(jìn)行格式化,增加它的可讀性。例如,每個(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)注解注解是由

42、括號(hào)括起來(lái)的一系列字符,例如,(這份禮物)。注解一般用在非結(jié)構(gòu)化的信頭字段中,沒(méi)有語(yǔ)法語(yǔ)義,僅為人提供了一些附加的信息。如果在加引號(hào)的字符串中有包括在括號(hào)中的字符,那是字符串的一部分,不是注解。在解釋信件的時(shí)候,會(huì)將注解忽略,可以用一個(gè)空格字符代替它們,這樣就什么也不會(huì)破壞。(3)字段折疊每個(gè)信頭字段從邏輯上說(shuō)應(yīng)當(dāng)是一個(gè)由字段名、冒號(hào)、字段體和 CRLF 組成的單 xx 科技大學(xué)本科生畢業(yè)論文 20第 20 頁(yè) 共 52 頁(yè)一的行,但為了書(shū)寫(xiě)與顯示的方便,增加可讀性,也為了符合 1000/80 的行字符數(shù)的限制,可以將超過(guò) 80 個(gè)字符的信頭字段分為多行,即對(duì)于比較長(zhǎng)的字段,可以分割成幾行,形

43、成折疊。在結(jié)構(gòu)化和非結(jié)構(gòu)化字段中都允許折疊。通過(guò)在字段中某些點(diǎn)插入CRLF 符和至少一個(gè)或多個(gè)空白字符來(lái)實(shí)現(xiàn)字段的折疊,第一行后面的行稱(chēng)為信頭字段的續(xù)行。續(xù)行都以一個(gè)空白符開(kāi)始,這種方法稱(chēng)為折疊(folding) ,例如標(biāo)題字段Subject: This is a test 可以表示為: Subject: This is a test反之,將一個(gè)被折疊成多行的信頭字段恢復(fù)到它的單行表示的過(guò)程叫做去折疊,只要簡(jiǎn)單地移除后面跟著空格的 CRLF,將折疊空白符 CRLF 轉(zhuǎn)換成空格字符,就可以完成去折疊(unfolding)。在分析被折疊的字段的語(yǔ)法時(shí),要把一個(gè)多行的折疊字段展開(kāi)為一行,根據(jù)它的非折

44、疊的形式來(lái)分析它的語(yǔ)法與語(yǔ)義。(4)字段大小寫(xiě)字段名稱(chēng)是不區(qū)分大小寫(xiě)的,所以 Subject、subject 或 SUBJECT 都一樣。不過(guò)字段名稱(chēng)大小寫(xiě)有習(xí)慣的常用形式,如主題字段的大小寫(xiě)形式通常為 Subject。字段體的大小寫(xiě)稍微復(fù)雜點(diǎn),要視情況而定。比如 Subject 后面的字段體,其中的大寫(xiě)可能就是縮寫(xiě)的專(zhuān)用名詞,不能改動(dòng)。4、標(biāo)準(zhǔn)的信頭字段 下面介紹 RFC822 中定義的常用的標(biāo)準(zhǔn)信頭字段。表 4.1 RFC822 常用的標(biāo)準(zhǔn)信頭字段與發(fā)信方有關(guān)的信頭字段格式:From:mailbox寫(xiě)信人字段。說(shuō)明信件的原始創(chuàng)建者,給出他的 xx 科技大學(xué)本科生畢業(yè)論文 21第 21 頁(yè)

45、共 52 頁(yè)舉例:From:電子信箱地址。創(chuàng)建者對(duì)信件的原始內(nèi)容負(fù)責(zé)。格式:Sender:mailbox舉例:From:Sender:發(fā)送者字段。說(shuō)明實(shí)際提交發(fā)送這個(gè)信件的人,給出他的電子信箱地址。當(dāng)發(fā)信人與寫(xiě)信人不一樣時(shí)使用。比如,秘書(shū)替經(jīng)理發(fā)信。發(fā)送者對(duì)發(fā)送負(fù)責(zé)。格式:Reply-TO:mailbox舉例:From: From:回復(fù)字段。指定應(yīng)當(dāng)把回信發(fā)到哪里。如果有此字段,回信將會(huì)發(fā)給它指定的郵箱,而不會(huì)發(fā)給From 字段指定的郵箱。比如,發(fā)送的是經(jīng)理的信,但回信應(yīng)交辦公室處理。與收信方有關(guān)的信頭字段格式:TO:mailbox list舉例:TO:收信人字段。指定主要收信人的郵箱地址,可

46、以是多個(gè)郵箱地址的列表,地址中間用逗號(hào)隔開(kāi)。格式:Cc:mailbox list舉例:Cc:抄送字段。指定此信件要同時(shí)發(fā)給哪些人,也稱(chēng)為抄送。也可以使用郵箱地址列表,抄送給多個(gè)人。格式:Bcc:mailbox list密抄字段。指定此信件要同時(shí)秘密發(fā)給哪些人,也稱(chēng)為密件抄送。也可以使用郵箱地址列表,密抄給多個(gè)人。其它的信頭字段格式:Date:date-time舉例:Date:Tue,04 Dec 2004 16:18:08 +800日期字段:Date 字段含有電子郵件創(chuàng)建的日期和時(shí)間。格式:Subject:*text舉例:Subject:Hello! 信件主題字段。描述信件的主題。當(dāng)回復(fù)信件時(shí)

47、,通常在主題前面增加“Re:”前綴,標(biāo)記為該信件為回復(fù)信件:當(dāng)信件被轉(zhuǎn)發(fā)時(shí),通常 xx 科技大學(xué)本科生畢業(yè)論文 22第 22 頁(yè) 共 52 頁(yè)Subject:Re:Hello!在主題文字前面加上“Fw:” , “Fwd:”這樣的前綴。格式:Received:from domain ;發(fā)送主機(jī)by domain ;接收主機(jī)via atom ;物理路徑id msg-id ;接收者msg id接受字段。是投遞信件的特定郵件服務(wù)器所作的記錄。處理郵件投遞的每個(gè)服務(wù)器必須給它處理的每個(gè)信頭的前面加一個(gè) Received 字段,用以描述信件到達(dá)目的地所經(jīng)過(guò)的路徑以及相關(guān)信息。當(dāng)跟蹤各個(gè)電子郵件問(wèn)題時(shí),這個(gè)

48、信息很有幫助。舉例:Received:from wang by li Tue dec 2003 12:18:02 +800格式:Comments:*text注釋字段。用于把一個(gè)注解添加到信件中。格式:Resent-*舉例:Resent-FromResent-SenderResent-dateResent-Reply-To重發(fā)字段。當(dāng)需要把收到的信件重發(fā)給另一組收信人的時(shí)候,可以保持整個(gè)原始信件不變,并簡(jiǎn)單地產(chǎn)生重發(fā)信件所要求的新信頭字段。為避免與以前的字段相混。新添加的信頭字段都加上Resent-前綴字符串,它們的語(yǔ)法與未加前綴的同名字段相同。格式:Mess

49、age-ID:msg-id信件標(biāo)識(shí)字段。用于表示一個(gè)信件唯一標(biāo)識(shí),該字段通常有 Smtp 服務(wù)器生成,這個(gè)值通常是唯一的。形式根據(jù)使用的軟件而定。通常左邊是標(biāo)識(shí)符,右邊指定電腦名圖 2 7 - 2 表中的關(guān)鍵字表明了電子郵件借用了辦公室備忘錄中的概念和術(shù)語(yǔ):電子郵件的頭部能夠包含一行說(shuō)明應(yīng)當(dāng)接收到該備忘錄的接收方。象傳統(tǒng)的辦公室備忘錄一樣,電子郵件使用關(guān)鍵字 Cc 指明一個(gè)復(fù)寫(xiě)副本(carbon copy).電子郵件軟件必須向 Cc:后面的電子郵件地址表中的每個(gè)地址發(fā)送一份消息的副本。 xx 科技大學(xué)本科生畢業(yè)論文 23第 23 頁(yè) 共 52 頁(yè)傳統(tǒng)的辦公室過(guò)程要求備忘錄的發(fā)送方通知接收方副本

50、是否傳給其它人。有時(shí)發(fā)送方希望將備忘錄的一個(gè)副本給別人而不顯示出有一個(gè)副本被發(fā)送出去。一些電子郵件系統(tǒng)提供這樣的選項(xiàng),遵循傳統(tǒng)的辦公室術(shù)語(yǔ),用盲復(fù)寫(xiě)副本(blind carbon copy)來(lái)表示。創(chuàng)建消息的用戶(hù)在關(guān)鍵字 Bcc 后給出一個(gè)電子郵件地址表,指定一個(gè)或多個(gè)盲復(fù)寫(xiě)副本。雖然Bcc 在發(fā)送方出現(xiàn),但當(dāng)信息發(fā)送時(shí),郵件系統(tǒng)將它從消息中除去。每個(gè)接收方必須檢查頭部的 To 和 Cc 行以決定信息是直接發(fā)送還是作為盲副本發(fā)送的(有些郵件系統(tǒng)在正文部分附加信息來(lái)告訴接收者它是一個(gè)盲副本)。其它接收者不知道有哪些用戶(hù)接收到盲副本。電子郵件使用與傳統(tǒng)的辦公室備忘錄相同的格式和術(shù)語(yǔ):頭部包括與消息

51、有關(guān)的信息,正文包括消息文本。電子郵件頭部的行說(shuō)明發(fā)送方、接收方、日期、主題、應(yīng)當(dāng)收到副本的人的列表。(5)擴(kuò)展字段如果想在信頭中加入 RFC822 中沒(méi)有規(guī)定的字段,就需要?jiǎng)?chuàng)建非標(biāo)準(zhǔn)字段。方法非常簡(jiǎn)單,只要在自定義的信頭字段名的前面使用 X-前綴。RFC822 將這種方法稱(chēng)為擴(kuò)展字段。 事實(shí)上已經(jīng)有許多擴(kuò)展字段被廣泛應(yīng)用,但沒(méi)有標(biāo)準(zhǔn)定義。例如:X-LOOP 字段X-LOOP 字段用來(lái)防止郵件的循環(huán)傳送。過(guò)濾或郵件列表處理程序,可以給它處理的每個(gè)信件增加一個(gè) X-LOOP 字段,以后就可以根據(jù)這個(gè)字段中含有的特別值,判斷一 xx 科技大學(xué)本科生畢業(yè)論文 24第 24 頁(yè) 共 52 頁(yè)個(gè)信件是否

52、被循環(huán)傳送。如果確認(rèn)郵件發(fā)生了循環(huán),過(guò)濾或郵件列表處理程序就可以用不同的方式處理該信件。X-Mailer 字段X-Mailer 字段用于指示什么樣的程序產(chǎn)生了這個(gè)信件,它是使用最廣泛的擴(kuò)展字段。產(chǎn)生郵件的軟件可以為所有發(fā)送的信件增加合適的 X-Mailer 字段,該字段不僅含有軟件的名稱(chēng),還包含軟件的版本號(hào)。例如軟件名為 Littlefox Mailer,版本為V1.0, 可以將“X-Mailer:Littlefox Mailer V1.0”加到郵件信頭中去。圖 2 7 - 2 列出了一些在因特網(wǎng)電子郵件中可以找到的普通關(guān)鍵字,以及使用它們的目的。關(guān)鍵字 含義From 發(fā)送方地址To 接收方地

53、址Cc 復(fù)制副本地址Date 信息創(chuàng)建日期Subject 信息主題Reply-To 回復(fù)地址X-Charset 使用的字符集(通常為 ASCII)X-Mailer 發(fā)送信息所使用的軟件X-Sender 發(fā)送方地址的副本X-Face 經(jīng)編碼的發(fā)送方面孔的圖象 xx 科技大學(xué)本科生畢業(yè)論文 25第 25 頁(yè) 共 52 頁(yè)整個(gè)系統(tǒng)的核心是收發(fā)信件的操作,因此為了方便維護(hù),以后的升級(jí),故將這兩個(gè)最主要的操作寫(xiě)成類(lèi)庫(kù)(.dll)的形式,以組件的形式加載到主程序中,而且其它的功能如果需要的話(huà),也可以通過(guò)這樣的組件的形式增加到主程序中。這也體現(xiàn)了 C Sharp 這一新的微軟主推語(yǔ)言的方便和高校。而且這樣做

54、也方便了我們小組的程序的順利結(jié)合。 xx 科技大學(xué)本科生畢業(yè)論文 26第 26 頁(yè) 共 52 頁(yè)第第 5 5 章章 命名控件命名控件 MailSendMailSend5.15.1 發(fā)送郵件的類(lèi)發(fā)送郵件的類(lèi) SmtpMailSmtpMail1、主要成員變量說(shuō)明 1)網(wǎng)絡(luò)連接類(lèi)及實(shí)例 TcpClient tc為 TCP 網(wǎng)絡(luò)服務(wù)提供客戶(hù)端連接類(lèi) TcpClient 實(shí)例對(duì)象 tc。TcpClient 類(lèi)提供了一些簡(jiǎn)單的方法,用于在同步阻塞模式下通過(guò)網(wǎng)絡(luò)來(lái)連接、發(fā)送和接收流數(shù)據(jù)。而實(shí)例化的過(guò)程也是連接 SMTP 服務(wù)器的過(guò)程。它的重載方法之一的兩個(gè)參數(shù)一個(gè)為服務(wù)器名稱(chēng)字符串,另一個(gè)為服務(wù)器的埠。2)

55、提供用于網(wǎng)絡(luò)訪問(wèn)的基礎(chǔ)數(shù)據(jù)流及其實(shí)例 NetworkStream ns此類(lèi)提供訪問(wèn)網(wǎng)絡(luò)的基礎(chǔ)數(shù)據(jù)流的方法。其中最基本也是最重要的兩個(gè)方法就是Write()和 Read()方法,至于參數(shù)不再次贅述。3)一維字符串?dāng)?shù)組變量 FilePath此字符串?dāng)?shù)組主要用來(lái)存放用戶(hù)選擇的附件的絕對(duì)路徑名,并在發(fā)送帶附件的郵件時(shí)用到。4)發(fā)送郵件所需的基本參數(shù)比如用于 ESMTP 等錄檢驗(yàn)用的用戶(hù)名、密碼,發(fā)送郵件需要的收信人,發(fā)信人地址以及主題等等在此不再贅述。2、主要成員函數(shù)說(shuō)明 xx 科技大學(xué)本科生畢業(yè)論文 27第 27 頁(yè) 共 52 頁(yè)1)重載的構(gòu)造函數(shù) SmtpMail()此函數(shù)主要用于在初始化過(guò)程中,

56、把用戶(hù)選擇的附件的路徑以參數(shù)的形式傳給FilePath。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ì)象 System.IO.FileS

57、tream FileStr=new System.IO.FileStream(FilePath,System.IO.FileMode.Open); byte by=new byteSystem.Convert.ToInt32(FileStr.Length); FileStr.Read(by,0,by.Length); FileStr.Close(); return(System.Convert.ToBase64String(by); 4)將字符串編碼為 Base64 字符串的函數(shù)Base64Encode xx 科技大學(xué)本科生畢業(yè)論文 28第 28 頁(yè) 共 52 頁(yè)由于 ESMTP 的 LOGI

58、N 認(rèn)證機(jī)制是采用 Base64 編碼,當(dāng)用戶(hù)發(fā)出 AUTHLOGIN 的命令后,服務(wù)器返回 334 的應(yīng)答碼等待用戶(hù)輸入。如果身份確認(rèn)后服務(wù)器返回 235 的應(yīng)答碼,否則返回失敗信息。所以要將用戶(hù)名和密碼轉(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)志為假的布爾型變量。

59、具體代碼如下所示:private bool SendCommand(string str) /定義一個(gè)數(shù)組byte WriteBuffer; /設(shè)定一個(gè)布爾類(lèi)型的變量bool state=false; WriteBuffer = Encoding.Default.GetBytes(str);/加入防錯(cuò)機(jī)制,可以有效提高程序運(yùn)行的效率和捕獲出錯(cuò)信息try/向網(wǎng)絡(luò)中寫(xiě)入數(shù)據(jù) xx 科技大學(xué)本科生畢業(yè)論文 29第 29 頁(yè) 共 52 頁(yè)ns.Write(WriteBuffer,0,WriteBuffer.Length); state=true;catch(Exception ex)/返回出錯(cuò)信息Me

60、ssageBox.Show (ex.ToString ();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 =; xx 科技大學(xué)本科生畢業(yè)論文 30第 30 頁(yè) 共 52 頁(yè)/定義一個(gè)字節(jié)型的數(shù)組byte ReadBuffer = new byte

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論