




已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本科畢業(yè)設(shè)計說明書第I頁共V頁畢業(yè)設(shè)計說明書電子郵件客戶端軟件作作作作者者者者學(xué)學(xué)學(xué)學(xué)號號號號學(xué)院學(xué)院學(xué)院學(xué)院系系系系電子與計算機科學(xué)技術(shù)學(xué)院計算機科學(xué)與技術(shù)系專專專專業(yè)業(yè)業(yè)業(yè)計算機科學(xué)與技術(shù)指導(dǎo)教師指導(dǎo)教師指導(dǎo)教師指導(dǎo)教師評評評評閱閱閱閱人人人人2006年6月本科畢業(yè)設(shè)計說明書第II頁共V頁電子郵件客戶端軟件摘要電子郵件在當(dāng)今社會中扮演了一個很重要的角色。越來越多的人在使用它。而且用它的人數(shù)勢必會繼續(xù)增加。雖然,現(xiàn)在已經(jīng)有很多的郵件收發(fā)軟件例如著名的FOXMAIL但是對于大多數(shù)的非專業(yè)的人來說它還是有點難度稍嫌負(fù)責(zé)。因此,我們就利用SMTP和POP協(xié)議從底層開發(fā)了這個軟件。SMTP全稱是簡單郵件傳輸協(xié)議,它專門用來發(fā)送郵件用的。POP全稱是郵局協(xié)議,是專門用于接收郵件的。我主要是負(fù)責(zé)如何實現(xiàn)發(fā)送郵件功能的。MAILSEND命名空間是我整個程序的核心。它包括兩個類。在SMTPMAIL的類中包含了一個SENDMAIL的方法,它從底層詳細(xì)地實現(xiàn)了和服務(wù)器的交互操作。你既可以用它發(fā)送一個純文本郵件,也可以發(fā)送一個帶有附件的郵件,理所當(dāng)然地,你也可以使用不同的SMTP服務(wù)器。經(jīng)過測試,證實此軟件是一個支持多收信人,多附件的群發(fā)軟件。雖然它沒有FOXMAIL那么強大的功能,但是它容易掌握和使用。關(guān)鍵詞關(guān)鍵詞關(guān)鍵詞關(guān)鍵詞,命命命命名名名名空空空空間間間間,類類類類,附附附附件件件件SMTP本科畢業(yè)設(shè)計說明書第III頁共V頁EMAILCLIENTSOFTWAREABSTRACTEMAILPLAYAVERYIMPORTANTROLEINMODERNTIMESMOREANDMOREPEOPLEAREUSINGIT,ANDTHENUMBEROFITWILLLARGERANDLARGERTHOUGHTHEREAREALOTOFSOFTWAREFORSENDINGANDRECEIVINGLETTERSSUCHASFOXMAILWHICHAREALSOMULTIFUNCTIONAL,ITISDIFFICULTANDCOMPLICATEDTOTHEMOSTOFPEOPLEWHOARECURBSTONEFORTHISREASON,WEDOTHISSOFTWAREWITHTHEROCKBOTTOMPROTOCOLOFSMTPANDPOPTHEFULLNAMEOFSMTPISSIMPLEMAILTRANSFERPROTOCOLITISUSEDTOSENDINGLETTERSTHEFULLNAMEOFPOPISPOSTOFFICEPROTOCOLWHICHISSPECIALTORECEIVELETTERSIBASICALLYTAKECHARGETOHOWTOREALIZETHEFUNCTIONOFSENDINGLETTERSANAMESPACEWHICHISNAMEDMAILSENDISTHESOULOFMYPROGRAMEITINCLUDESTWOCLASSESAMETHODNAMEDSENDMIALWHICHREALIZETHEFUCTIONSTEPBYSTEPBELONGSTOTHECLASSOFSMTPMAILITDETAILEDLYNOTETHETRACKOFCLIENTEXCHANGETOTHESERVERYOUCANUSETHESOFTWARETOSENDEITHERATEXTEMAILORATEXTEMAILWITHATTACHMENTSYOUALSOCANSENDALETTERTOMANYADDRESSEEINTHENATUREOFTHINGS,YOUCANUSEADIFFERENTSMTPSERVICETHESOFTWAREIDIDSUPPORTMULTILETTERSANDMULTISENDERAFTERITESTITISSIMPLIERTHANFOXMAILANDOTHERPROFESSIONALSOFTWARES,BUTITISEASYTOHOLDANDUSEKEYWORDSSMTP,NAMESPACE,CLASS,ATTACHMENT本科畢業(yè)設(shè)計說明書第IV頁共V頁目錄1引言711電子郵件介紹712開發(fā)背景813開發(fā)環(huán)境及運行環(huán)境82軟件架構(gòu)及系統(tǒng)用例圖921系統(tǒng)架構(gòu)922系統(tǒng)總體用例924發(fā)送郵件類1025附加小功能類103SMTP協(xié)議的研究1031SMTP協(xié)議簡介及工作原理1132SMTP協(xié)議的命令和應(yīng)答12321SMTP協(xié)議的命令124RFC8222041RFC822簡單介紹2042信件的頭部205命名控件MAILSEND2651發(fā)送郵件類SMTPMAIL2652ADDEXTRA類33521調(diào)用WINDOWSAPI所需的命名空間33523在程序中具體的使用346軟件運行時的界面3561新建郵件帳號357系統(tǒng)測試3871同一SMTP服務(wù)器發(fā)送郵件的測試3872利用不同的SMTP服務(wù)器發(fā)送郵件的測試38本科畢業(yè)設(shè)計說明書第V頁共V頁8結(jié)論40參考文獻(xiàn)41致謝42外文文獻(xiàn)原文譯文畢畢畢畢業(yè)業(yè)業(yè)業(yè)設(shè)設(shè)設(shè)設(shè)計計計計開開開開題題題題報報報報告告告告本科畢業(yè)設(shè)計說明書第VII頁共LX頁1引言引言引言引言11電子郵件介紹電子郵件介紹電子郵件介紹電子郵件介紹電子郵件簡稱EMAI1又稱電子信箱、電子郵政,它是種用電子手段提供信息交換的通信方式。它是全球多種網(wǎng)絡(luò)上使用最普遍的一項服務(wù)。這種非交互式的通信,加速了信息的交流及數(shù)據(jù)傳送,它是個簡易、快速的方法。通過連接全世界的INTERNET,實現(xiàn)各類信號的傳送、接收、存貯等處理,將郵件送到世界的各個角落。到目前為止,可以說電子郵件是INTERNET資源使用最多的一種服務(wù),EMAI1不只局限于信件的傳遞,還可用來傳遞文件、聲音及圖形、圖像等不同類型的信息。電子郵件不是一種“終端到終端”的服務(wù),是被稱為“存貯轉(zhuǎn)發(fā)式”服務(wù)。這正是電子信箱系統(tǒng)的核心,利用存貯轉(zhuǎn)發(fā)可進(jìn)行非實時通信,屬異步通信方式。即信件發(fā)送者可隨時隨地發(fā)送郵件,不要求接收者同時在場,即使對方現(xiàn)在不在,仍可將郵件立刻送到對方的信箱內(nèi),且存儲在對方的電子郵箱中。接收者可在他認(rèn)為方便的時候讀取信件,不受時空限制。在這里,“發(fā)送”郵件意味著將郵件放到收件人的信箱中,而“接收”郵件則意味著從自己的信箱中讀取信件,信箱實際上是由文件管理系統(tǒng)支持的個實體。因為電子郵件是通過郵件服務(wù)器MAI1SERVER來傳遞檔的。通常MAILSERVER是執(zhí)行多任務(wù)操作系統(tǒng)UNIX的計算機,它提供24小時的電子郵件服務(wù),用戶只要向MAILSERVER管理人員申請個信箱賬號,就可使用這項快速的郵件服務(wù)。電子郵件的工作原理1電子郵件系統(tǒng)是一種新型的信息系統(tǒng),是通信技術(shù)和計算機技術(shù)結(jié)合的產(chǎn)物。電子郵件的傳輸是通過電子郵件簡單傳輸協(xié)議SIMPLEMAILTRANSFERPROTOCOL,簡稱SMTP這一系統(tǒng)軟件來完成的,它是INTERNET下的一種電子郵件通信協(xié)議。2電子郵件的基本原理,是在通信網(wǎng)上設(shè)立“電子信箱系統(tǒng)”,它實際上是一個計算機系統(tǒng)。系統(tǒng)的硬件是一個高性能、大容量的計算機。硬盤作為信箱的存儲介質(zhì),在硬盤上為用戶分一定的存儲空間作為用戶的“信箱”,每位用戶都有屬于自己的個電子信箱。并確定個用戶名和用戶可以自己隨意修改的口令。存儲空間包含存放所收信件、編輯信件以及信件存盤三部分空間,用戶使用口令開啟自己的信箱,并進(jìn)行發(fā)信、讀信、編輯、轉(zhuǎn)發(fā)、存檔等各種操作。系統(tǒng)功能主要由軟件實現(xiàn)。3電子郵件的通信是在信箱之間進(jìn)行的。用戶首先開啟自己的信箱,然后通過鍵入命令的方式將需要發(fā)送的郵件發(fā)到對方的信箱中。郵件在信箱之間進(jìn)行傳遞和交本科畢業(yè)設(shè)計說明書第VIII頁共LX頁換,也可以與另個郵件系統(tǒng)進(jìn)行傳遞和交換。收方在取信時,使用特定賬號從信箱提取。12開發(fā)背景開發(fā)背景開發(fā)背景開發(fā)背景當(dāng)前流行的各大郵件客戶端軟件的除了最主要的收發(fā)信件之外,功能越來越復(fù)雜,但是人們平常真正用到的功能很少,很多功能尤其對于那些計算機知識相對缺乏的人來說,更加顯得太過于華麗而不太實用。有鑒于此,在了解RFC底層協(xié)議的基礎(chǔ)上,我們開發(fā)了這個各種功能相對簡單實用的郵件客戶端程序,簡化了很多不必要的功能。13開發(fā)環(huán)境及運行環(huán)境開發(fā)環(huán)境及運行環(huán)境開發(fā)環(huán)境及運行環(huán)境開發(fā)環(huán)境及運行環(huán)境131開發(fā)環(huán)境AMDATHLONTM,512M內(nèi)存,80G硬盤MICROSOFTWINDOWSXPPROFESSIONALMICROSOFTVISUALSTUDIO2003CSHARPMICROSOFTDEVELOPERNETWORKFORVISUALSTUDIONET2003132運行環(huán)境INTELPENTIUM2及以上處理器,32M以上內(nèi)存,4G以上硬盤MICROSOFTWINDOWS9X/NT操作系統(tǒng)800600或以上的屏幕分辨率確保機器上安裝有NETFRAMEWORK10或者以上版本本科畢業(yè)設(shè)計說明書第IX頁共LX頁2軟件架構(gòu)及系統(tǒng)用例圖軟件架構(gòu)及系統(tǒng)用例圖軟件架構(gòu)及系統(tǒng)用例圖軟件架構(gòu)及系統(tǒng)用例圖21系統(tǒng)架構(gòu)系統(tǒng)架構(gòu)系統(tǒng)架構(gòu)系統(tǒng)架構(gòu)軟件的總體架構(gòu)如圖21圖21軟件架構(gòu)圖22系統(tǒng)總體用例系統(tǒng)總體用例系統(tǒng)總體用例系統(tǒng)總體用例圖22系統(tǒng)總體用例圖23程序功能框圖程序功能框圖程序功能框圖程序功能框圖用戶新建賬號發(fā)送郵件接收郵件純文本郵件帶附件郵件用戶主界面主要功能選擇發(fā)送郵件類接收郵件類本科畢業(yè)設(shè)計說明書第X頁共LX頁圖23程序功能圖24發(fā)送郵件類發(fā)送郵件類發(fā)送郵件類發(fā)送郵件類是發(fā)送郵件的核心,類名為SMTPMAIL,隸屬于命名空間MAILSEND。封裝了發(fā)送郵件的具體實現(xiàn)方法,也是具體的RFC用代碼實現(xiàn)的過程。而用戶通過具體的操作接口,接口與SMTPMAIL類通過交互操作來實現(xiàn)用戶發(fā)送信件的操作。25附加小功能類附加小功能類附加小功能類附加小功能類是獲取一些諸如系統(tǒng)時間,當(dāng)前用戶名,以及本機IP之類的類,類名為ADDEXTRA,隸屬于命名空間MAILSEND。3SMTP協(xié)議的研究協(xié)議的研究協(xié)議的研究協(xié)議的研究由于要開發(fā)的是郵件客戶端程序,就不得不用到SMTP協(xié)議和POP協(xié)議。而我個人負(fù)責(zé)的是郵件發(fā)送功能的實現(xiàn),因此就必然會涉及到SMTP(SIMPLEMAILTRANSFERPROTOCOL)協(xié)議。SMTP被用來在因特網(wǎng)上發(fā)送郵件,該協(xié)議規(guī)定了一些基本的命令客戶端軟件電子郵件接收系統(tǒng)電子郵件接收系統(tǒng)附加功能各種錯誤的提示簡單郵件接收帶有附件的郵件接收簡單郵件發(fā)送帶有附件的郵件發(fā)送電子郵件編寫電子郵件的分類管理通訊簿管理本科畢業(yè)設(shè)計說明書第XI頁共LX頁和方法使客戶端與服務(wù)器進(jìn)行交互,以達(dá)到發(fā)送郵件的目的。31SMTP協(xié)議簡介及工作原理協(xié)議簡介及工作原理協(xié)議簡介及工作原理協(xié)議簡介及工作原理311介紹簡單郵件傳輸協(xié)議(SMTP)的目標(biāo)是可靠高效地傳送郵件,它獨立于傳送子系統(tǒng)而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務(wù)提供了進(jìn)程間通信環(huán)境(IPCE),此環(huán)境可以包括一個網(wǎng)絡(luò),幾個網(wǎng)絡(luò)或一個網(wǎng)絡(luò)的子網(wǎng)。理解到傳送系統(tǒng)(或IPCE)不是一對一的是很重要的。進(jìn)程可能直接和其它進(jìn)程通過已知的IPCE通信。郵件是一個應(yīng)用程序或進(jìn)程間通信。郵件可以通過連接在不同IPCE上的進(jìn)程跨網(wǎng)絡(luò)進(jìn)行郵件傳送。更特別的是,郵件可以通過不同網(wǎng)絡(luò)上的主機接力式傳送。312SMTP模型SMTP設(shè)計基于以下通信模型針對用戶的郵件請求,發(fā)送SMTP建立與接收SMTP之間建立一個雙向傳送通道。接收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)答(但不中止整個郵件操作),雙方將如此重復(fù)多次。當(dāng)接收者收到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應(yīng)答。SMTP提供傳送郵件的機制,如果接收方與發(fā)送方連接在同一個傳送服務(wù)下時,郵件可以直接由發(fā)送方主機傳送到接收方主機;或者,當(dāng)兩者不在同一個傳送服務(wù)下時,通過中繼SMTP服務(wù)器傳送。為了能夠?qū)MTP服務(wù)器提供中繼能力,它必須擁有最終目的主機地址和郵箱名稱。MAIL命令參數(shù)是回復(fù)路徑,它指定郵件從何處來;而RCPT命令的參數(shù)是轉(zhuǎn)發(fā)路徑的,它指定郵件向何處去。向前路徑是源路徑,而回復(fù)路徑是返回路徑(它用于發(fā)生錯誤時返回郵件)。當(dāng)同一個消息要發(fā)往不同的接收者時,SMTP遇到了向不同接收者發(fā)送同一份數(shù)據(jù)的復(fù)制品的問題,郵件命令和應(yīng)答有一個比較奇怪的語法,應(yīng)答也有一個數(shù)字代碼。在下面,例子中可以看到哪些使用實際的命令和應(yīng)答。完整的命令和應(yīng)答在第四節(jié)。本科畢業(yè)設(shè)計說明書第XII頁共LX頁命令與應(yīng)答對大小寫不敏感,也就是說,命令和應(yīng)答可以是大寫,小寫或兩者的混合,但這一點對用戶郵件名稱卻不一定是對的,因為有的主機對用戶名大小寫是敏感的。這樣SMTP實現(xiàn)中就將用戶郵箱名稱保留成初始時的樣子,主機名稱對大小寫不敏感。命令與應(yīng)答由ASCII字母表組成,當(dāng)傳送服務(wù)提供8位字節(jié)傳送通道,每7位字符正確傳送,而最高位被填充為0。當(dāng)指定一般的命令或應(yīng)答格式后,參數(shù)會由一些類似于語言的字符串表示出來,如“或“,這里尖括號表示這是一種類似于語言的變量。32SMTP協(xié)議的命令和應(yīng)答協(xié)議的命令和應(yīng)答協(xié)議的命令和應(yīng)答協(xié)議的命令和應(yīng)答321SMTP協(xié)議的命令SMTP命令定義了郵件傳輸或由用戶定義的系統(tǒng)功能。它的命令是由結(jié)束的字符串。而在帶有參數(shù)的情況下,命令本身由和參數(shù)分開,如果未帶參數(shù)可以直接和連接。郵箱的語法格式必須和接收站點的格式一致。下面討論SMTP命令和應(yīng)答。發(fā)送郵件操作涉及到不同的數(shù)據(jù)對象,它們由不同的參數(shù)相互連接?;貜?fù)路徑就是MAIL命令的參數(shù),而轉(zhuǎn)發(fā)路徑則是RCPT命令的參數(shù),郵件日期是DATA命令的參數(shù)。這些參數(shù)或者數(shù)據(jù)對象必須跟在命令后。這種模式也就要求有不同的緩沖區(qū)來存儲這些對象,也就是說,有一個回復(fù)路徑緩沖區(qū),一個轉(zhuǎn)發(fā)路徑緩沖區(qū),一個郵件內(nèi)容緩沖區(qū)。特定的命令產(chǎn)生自己的緩沖區(qū),或使一個或多個緩沖的內(nèi)容被清除。HELLOHELO此命令用于向接收SMTP確認(rèn)發(fā)送SMTP。參數(shù)域包括發(fā)送SMTP的主機名。接收SMTP通過連接確認(rèn)命令來向發(fā)送SMTP確認(rèn)接收SMTP。引命令和OK響應(yīng)確認(rèn)發(fā)送和接收SMTP進(jìn)入了初始狀態(tài),也就是說,沒有操作正在執(zhí)行,所有狀態(tài)表和緩沖區(qū)已經(jīng)被子清除。MAILMAIL此命令用于開始將郵件發(fā)送到一個多個郵箱中。參數(shù)域包括回復(fù)路徑。返回路徑中包括了可選的主機和發(fā)送者郵箱列表。當(dāng)有主機列表時,它是一個回復(fù)路徑源,它說明此郵箱是由在表中的主機一一傳遞發(fā)送(第一個主機是最后一個接收到此郵件的主機)過來的。此表也有作向發(fā)送者返回非傳遞信號的源路徑。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一本科畢業(yè)設(shè)計說明書第XIII頁共LX頁個IPCE的話)清楚的名稱。一些出錯信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。RECIPIENTRCPT此命令用于確定郵件內(nèi)容的唯一接收者;多個接收者將由多個此命令指定。轉(zhuǎn)發(fā)路徑中包括一個可選的主機和一個必須的目的郵箱。當(dāng)出現(xiàn)主機列表時,這就是一個源路徑,它指明郵件必須向列表中的上一個主機發(fā)送。如果接收SMTP未實現(xiàn)郵件的傳遞發(fā)送,就會返回如未知本地用戶(550)的信息給用戶。當(dāng)郵件被傳遞發(fā)送時,傳遞主機必須將自己的名稱由轉(zhuǎn)發(fā)路徑的開始處移至回復(fù)路徑的結(jié)束處。當(dāng)郵件最終到達(dá)目的地時,接收SMTP將以它的主機郵件格式自己的名稱插入目標(biāo)郵件中。例如,由傳遞主機A接收的帶有如下參數(shù)的郵件時,F(xiàn)ROMTO將會變成如下形式FROMTO此命令導(dǎo)致它的轉(zhuǎn)發(fā)路徑參數(shù)加入轉(zhuǎn)發(fā)路徑緩沖區(qū)中。DATADATA接收者將跟在命令后的行作為郵件內(nèi)容。此命令導(dǎo)致此命令后的郵件內(nèi)容加入郵件內(nèi)容緩沖區(qū)。郵件內(nèi)容可以包括所有128個ASCII碼字符。郵件內(nèi)容由只包括一個句號的行結(jié)束,也就是如下的字符序列“,它指示了郵件的結(jié)束。郵件內(nèi)容的結(jié)束指示要求接收者現(xiàn)在就處理保存的郵件內(nèi)容。此過程將回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)的內(nèi)容全部清空。如果操作成功,接收者必須返回OK應(yīng)答;如果失敗也必須返回失敗應(yīng)答。當(dāng)接收SMTP收到一條信息時,無論是用作轉(zhuǎn)發(fā)還是此郵件已經(jīng)到達(dá)目的地,它都必須在郵件內(nèi)容的開始處加上時間戳這一行,這一行指示了接收到郵件主機和發(fā)出此郵件主機的標(biāo)識,以及接收到郵件內(nèi)容的時間和日期。轉(zhuǎn)發(fā)的信件將有多行這樣的時間戳。當(dāng)接收SMTP作最后一站的傳送時,它將返回路徑信息行插入郵件中。此行包括了發(fā)送命令中的的信息。在這里,最后一站的傳送的意思是郵件將被送到目的用戶手中,但在一些情況下,郵件可能需要更進(jìn)一步的加工并由另外的郵本科畢業(yè)設(shè)計說明書第XIV頁共LX頁件系統(tǒng)傳送??赡茉诜祷芈窂街械泥]箱與實際發(fā)送的郵件不一致,這個情況可能發(fā)生在需要傳送一個特定的錯誤處理信箱而不是信件發(fā)送者那里。上面所述說明了,最后的郵件內(nèi)容由一個返回路徑行,和在其后的一個或多個時間戳行構(gòu)成。這些行后面是郵件內(nèi)容的頭和體信息。當(dāng)處理后面的郵件數(shù)據(jù)指示部分成功時就需要特定的說明。這種情況可能發(fā)生在發(fā)送SMTP發(fā)現(xiàn)當(dāng)郵件需要傳送給多個用戶時,只能夠成功地向其中的一部分發(fā)送信息這種情況下。在這種情況下,必須對DATA命令發(fā)送OK應(yīng)答,而接收SMTP組織并發(fā)送一個“不可傳遞郵件“信息到信息的發(fā)送者。在此信息中或者發(fā)送一個不成功接收者的列表,或者每次發(fā)送一個不成接收者,而發(fā)送多次。所有不可傳遞郵件信息由MAIL命令發(fā)送。返回路徑和接收時間戳例子RETURNPATHRECEIVEDFROMGHIARPABYJKLARPA27OCT81152739PSTRECEIVEDFROMDEFARPABYGHIARPA27OCT81151513PSTRECEIVEDFROMABCARPABYDEFARPA27OCT81150159PSTDATE27OCT81150101PSTFROMJOEABCARPASUBJECTIMPROVEDMAILINGSYSTEMINSTALLEDTOSAMJKLARPATHISISTOINFORMYOUTHATSENDSEND此命令用于開始一個發(fā)送命令,將郵件發(fā)送到一個或多個終端上。參數(shù)域包括了一個回復(fù)路徑,此命令如果成功就將郵件發(fā)送到終端上了?;貜?fù)路徑包括一個可選的主機列表和發(fā)送者郵箱。當(dāng)出現(xiàn)主機列表時,表示這是一個傳送路徑,郵件就是經(jīng)過這個路徑上的每個主機發(fā)送到這里的(列表上第一個主機是最后經(jīng)手的主機)。此表用于返回非傳遞信號到發(fā)送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令本科畢業(yè)設(shè)計說明書第XV頁共LX頁的回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。SENDORMAILSOML此命令用于開始一個郵件操作將郵件內(nèi)容傳送到一個或多個終端上,或者傳送到郵箱中。對于每個接收者,如果接收者終端打開,郵件內(nèi)容將被傳送到接收者的終端上,否則就送到接收者的郵箱中。參數(shù)域包括回復(fù)路徑,如果成功地將信息送到終端或郵箱中此命令成功。回復(fù)路徑包括一個可選的主機列表和發(fā)送者郵箱。當(dāng)出現(xiàn)主機列表時,表示這是一個傳送路徑,郵件就是經(jīng)過這個路徑上的每個主機發(fā)送到這里的(列表上第一個主機是最后經(jīng)手的主機)。此表用于返回非傳遞信號到發(fā)送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。SENDANDMAILSAML此命令用于開始一個郵件操作將郵件內(nèi)容傳送到一個或多個終端上,并傳送到郵箱中。如果接收者終端打開,郵件內(nèi)容將被傳送到接收者的終端上和接收者的郵箱中。參數(shù)域包括回復(fù)路徑,如果成功地將信息送到郵箱中此命令成功?;貜?fù)路徑包括一個可選的主機列表和發(fā)送者郵箱。當(dāng)出現(xiàn)主機列表時,表示這是一個傳送路徑,郵件就是經(jīng)過這個路徑上的每個主機發(fā)送到這里的(列表上第一個主機是最后經(jīng)手的主機)。此表用于返回非傳遞信號到發(fā)送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復(fù)路徑可能就是空的。此命令清除回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū),并且將此命令的回復(fù)路徑信息插入到回復(fù)路徑緩沖區(qū)中。RESETRSET此命令指示當(dāng)送郵件操作將被放棄。任何保存的發(fā)送者,接收者和郵件內(nèi)容應(yīng)該被拋棄,所有緩沖區(qū)和狀態(tài)表應(yīng)該被清除,接收方必須返回OK應(yīng)答。VERIFYVRFY此命令要求接收者確認(rèn)參數(shù)是一個用戶。如果這是(已經(jīng)知道的)用戶名,返回用戶的全名和指定的郵箱。此命令對回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩本科畢業(yè)設(shè)計說明書第XVI頁共LX頁沖區(qū)沒有影響。EXPANDEXPN此命令要求接收者確認(rèn)參數(shù)指定了一個郵件發(fā)送列表,如果是一個郵件發(fā)送列表,就返回表中的成員。如果這是(已經(jīng)知道的)用戶名,返回用戶的全名和指定的郵箱。此命令對回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。HELPHELP此命令導(dǎo)致接收者向HELP命令的發(fā)送者發(fā)出幫助信息。此命令可以帶參數(shù),并返回特定的信息作為應(yīng)答。此命令對回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。NOOPNOOP此命令不影響任何參數(shù)和已經(jīng)發(fā)出的命令。它只是說明沒有任何操作而不是說明接收者發(fā)送了一個OK應(yīng)答。此命令對回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和郵件內(nèi)容緩沖區(qū)沒有影響。QUITQUIT此命令指示接收方必須發(fā)送OK應(yīng)答然后關(guān)閉傳送信道。接收方在接到QUIT命令并做出響應(yīng)之前不應(yīng)該關(guān)閉通信信道。發(fā)送方在發(fā)送QUIT命令和接收到響應(yīng)之前也不應(yīng)該關(guān)閉信道。即使出錯,也不應(yīng)該關(guān)閉信道。如果連接被提前關(guān)閉,接收方應(yīng)該象接收到RSET命令一樣,取消所有等待的操作,但不恢復(fù)原先已經(jīng)做過的操作。而發(fā)送方應(yīng)該象接收到暫時錯誤(4XX)一樣假定命令和操作仍在支持之中。TURNTURN此命令指定接收方要么發(fā)送OK應(yīng)答并改變角色為發(fā)送SMTP,要么發(fā)送拒絕信息并保持自己的角色。如果程序A現(xiàn)在是發(fā)送SMTP,它發(fā)出TURN命令后接收到OK(250)應(yīng)答,它就變成了接收SMTP。程序A就進(jìn)入初始狀態(tài),好象通信信道剛打開一樣,這時它發(fā)送220準(zhǔn)備好服務(wù)信號。如果程序B現(xiàn)在是接收SMTP,它發(fā)出TURN命令后接收到OK(250)應(yīng)答,它就變成了發(fā)送SMTP。程序A就進(jìn)入初始狀態(tài),好象通信信道剛打開一樣,這時它準(zhǔn)備接收220準(zhǔn)備好服務(wù)信號。若要拒絕改變角色,接收方可以發(fā)送502應(yīng)答。對于這些命令的順序有一定的限制。對話的第一個命令必須是HELLO命令,此命令在此后的會話中也可以使用。如果HELLO命令的參數(shù)不可接受,必須由返回一個501失敗應(yīng)答,同時接收到的SMTP必須保持在與剛才一致的狀態(tài)下。NOOP,本科畢業(yè)設(shè)計說明書第XVII頁共LX頁HELP,EXPN和VRFY命令可以在會話的任何時候使用。MAIL,SEND,SOML或SAML命令開始一個郵件操作。一旦開始了以后就要發(fā)送RCPT和DATA命令。郵件操作可以由RSET命令終止。在一個會話中可以有一個或多個操作。如果在操作開始參數(shù)不可接受,必須返回501失敗應(yīng)答,同時接收到的SMTP必須保持在與剛才一致的狀態(tài)下。如果操作中的命令順序出錯,必須返回503失敗應(yīng)答,同時接收到的SMTP必須保持在與剛才一致的狀態(tài)下。會話的最后一個命令必須是QUIT命令。此命令在會話的其它時間不能使用。COMMAND語法格式命令是由命令碼和其后的參數(shù)域組成的。命令碼是四個字母組成的,不區(qū)別大小寫。因為下面的命令的作用是相同的MAILMAILMAILMAILMAIL這對于引導(dǎo)任何參數(shù)值的標(biāo)記也是適用的,如TO和TO就是一樣的。命令碼和參數(shù)由一個或多個空格分開。然而在回復(fù)路徑和轉(zhuǎn)發(fā)路徑中的參數(shù)是區(qū)別大小寫的。特別是在一些主機上,“SMITH“和“SMITH“就根本不是一個用戶。參數(shù)域由不定長的字符串組成,它由結(jié)束,接收方在完全接收到此序列前不會采取任何行動。方括號代表可選的參數(shù)域。如果不選擇的話,系統(tǒng)選擇默認(rèn)的設(shè)置。下面是SMTP命令HELOMAILFROMRCPTTODATARSETSENDFROMSOMLFROMSAMLFROMVRFYEXPNHELPNOOPQUITTURN本科畢業(yè)設(shè)計說明書第XVIII頁共LX頁322SMTP的應(yīng)答碼對SMTP命令的響應(yīng)是多樣的,它確定了在郵件傳輸過程中請求和處理的同步,也保證了發(fā)送SMTP知道接收SMTP的狀態(tài)。每個命令必須有且只有一個響應(yīng)。SMTP響應(yīng)由三位數(shù)字組成,其后跟一些文本。數(shù)字幫助決定下一個應(yīng)該進(jìn)入的狀態(tài),而文本對人是有意義的。三位的響應(yīng)已經(jīng)包括了足夠的信息,不用再閱讀文本,文本可以直接拋棄或者傳遞給用戶。特別的是,文本是與接收和環(huán)境相關(guān)的,所以每次接收到的文本可能不同。在附錄E中可以看到全部的響應(yīng)碼。正規(guī)的情況下,響應(yīng)由下面序列構(gòu)成三位的數(shù)字,一行文本和一個,或者也可以是一個多行響應(yīng)。只有EXPN和HELP命令可以導(dǎo)致多行應(yīng)答,然而,對所有命令,多行響應(yīng)都是允許的。REPLYCODESBYFUNCTIONGROUPS500格式錯誤,命令不可識別(此錯誤也包括命令行過長)501參數(shù)格式錯誤502命令不可實現(xiàn)503錯誤的命令序列504命令參數(shù)不可實現(xiàn)211系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)214幫助信息220服務(wù)就緒221服務(wù)關(guān)閉傳輸信道421服務(wù)未就緒,關(guān)閉傳輸信道(當(dāng)必須關(guān)閉時,此應(yīng)答可以作為對任何命令的響應(yīng))250要求的郵件操作完成251用戶非本地,將轉(zhuǎn)發(fā)向450要求的郵件操作未完成,郵箱不可用(例如,郵箱忙)550要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問)451放棄要求的操作;處理過程中出錯551用戶非本地,請嘗試452系統(tǒng)存儲不足,要求的操作未執(zhí)行552過量的存儲分配,要求的操作未執(zhí)行553郵箱名不可用,要求的操作未執(zhí)行(例如郵箱格式錯誤)本科畢業(yè)設(shè)計說明書第XIX頁共LX頁354開始郵件輸入,以結(jié)束554操作失敗本科畢業(yè)設(shè)計說明書第XX頁共LX頁4RFC822說道發(fā)送和接受郵件,我們就必須不得不提RFC822了。RFC822的全稱是“ARPA因特網(wǎng)文本信件格式的標(biāo)準(zhǔn)”STANDARDFORTHEFORMATOFARPAINTERNETTEXTMESSAGES。該標(biāo)準(zhǔn)提供了郵件內(nèi)容的格式和相關(guān)語義。41RFC822簡單介紹簡單介紹簡單介紹簡單介紹RFC822規(guī)定的電子郵件內(nèi)容全部由ASCII字符組成,就是通常所說的文本文件,因而標(biāo)準(zhǔn)將它稱為INTERNET文本信件INTERNETTEXTMESSAGES。從直觀上看,信件非常簡單,就是一系列由ASCII字符組成的文本行,每一行以回車換行符“CRLF“,就是ASCII碼的13和10結(jié)束。從組織上看,信件內(nèi)容結(jié)構(gòu)分為兩大部分,中間用一個空白行只有CRLF符的行來分隔。第一部分稱為信件的頭部THEHEADEROFTHEMESSAGE,包括有關(guān)發(fā)送方、接收方、發(fā)送日期等信息。第二部分稱為信件的體部BODYOFTHEMESSAGE,包括信件內(nèi)容的正文文本。信頭是必需的,信體是可選的,即信體可有可無。如果不存在信體,用作分隔的空白行也就不需要。在信體中,也可以有用作分隔的空白行。這樣設(shè)計的信件便于進(jìn)行語法分析,提取信件的基本信息。在RFC822中規(guī)定,信件體就是一系列的向收信人表達(dá)信息的文本行,比較簡單,可以包含任意文本,并沒有附加的結(jié)構(gòu)。信件頭則具有比較復(fù)雜的結(jié)構(gòu),在下一小節(jié)中詳述。42信件的頭部信件的頭部信件的頭部信件的頭部421信頭的一般格式信頭的結(jié)構(gòu)比較復(fù)雜,信頭由若干信頭字段HEADERFIELD組成,這些字段為用戶和程序提供了關(guān)于信件的信息。要了解信頭的結(jié)構(gòu)就要弄清楚各種信頭字段。所有的信頭字段都具有相同的語法結(jié)構(gòu),從邏輯上說,包括四部分,字段名FIELDNAME,緊跟冒號“COLON,后跟字段體FIELDBODY,最后以回車換行符CRLF終止。即信頭字段字段名字段體CRLF字段名必須由除了冒號和空格以外的可打印USASCII字符其值在33和126之間組成,大多數(shù)字段的字段名稱由一系列字母,數(shù)字組成,中間經(jīng)常插入橫線符。字段名告訴電子郵件軟件如何翻譯該行中剩下的內(nèi)容。本科畢業(yè)設(shè)計說明書第XXI頁共LX頁字段體可以包括除了CR和LF之外的任何ASCII字符。但是其中的空格,加括號的注釋,引號和多行字段都比較復(fù)雜,另外,字段體的語法和語義依賴于字段名,每個類型的字段有特定的格式。RFC822為信件定義了一些標(biāo)準(zhǔn)字段,并提供了用戶自行定義非標(biāo)準(zhǔn)字段的方422結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段每個字段所包含的信息不同,字段大體可以分為結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段。結(jié)構(gòu)化字段有特定的格式,由語法分析程序檢測。SENDER字段就是一個很好的例子,它的字段內(nèi)容是信箱,有一個離散的結(jié)構(gòu)。非結(jié)構(gòu)化的字段含有任意的數(shù)據(jù),沒有固定格式。例如,SUBJECT字段可以含有任意的文字,并且沒有固定格式。非結(jié)構(gòu)化的字段數(shù)量較少,只有SUBJECT、COMMENTS、擴展字段,非標(biāo)準(zhǔn)字段、INREPLY和REFERENCES等。所有其它字段都是結(jié)構(gòu)化的。423信頭字段的元素盡管EMAIL信件的總體結(jié)構(gòu)非常簡單,但一些信頭字段的結(jié)構(gòu)是很復(fù)雜的。下面介紹一些大多數(shù)字段共有的元素。(1)空白符像其它文本文件一樣,空白符包括空格符ASCII碼32和制表符TABASCII碼19。此外,行末的回車換行符CRLF也應(yīng)算是空白符。使用空白符可以對字段進(jìn)行格式化,增加它的可讀性。例如,每個字段間用CRLF來分離,在字段內(nèi)用空格來分隔字段名和字段內(nèi)容。在SUBJECT后面的冒號和內(nèi)容之間插入空格字符,會使字段結(jié)構(gòu)更加清晰。在EMAIL中,空白符的使用并沒有固定的規(guī)則,但應(yīng)當(dāng)正確地使用,僅在需要時才使用空白符,以便接收軟件進(jìn)行語法分析。(2)注解注解是由括號括起來的一系列字符,例如,這份禮物。注解一般用在非結(jié)構(gòu)化的信頭字段中,沒有語法語義,僅為人提供了一些附加的信息。如果在加引號的字符串中有包括在括號中的字符,那是字符串的一部分,不是注解。在解釋信件的時候,會將注解忽略,可以用一個空格字符代替它們,這樣就什么也不會破壞。(3)字段折疊每個信頭字段從邏輯上說應(yīng)當(dāng)是一個由字段名、冒號、字段體和CRLF組成的單一的行,但為了書寫與顯示的方便,增加可讀性,也為了符合1000/80的行字符數(shù)的限制,可以將超過80個字符的信頭字段分為多行,即對于比較長的字段,可以分割成幾行,形成折疊。在結(jié)構(gòu)化和非結(jié)構(gòu)化字段中都允許折疊。通過在字段中某些點插本科畢業(yè)設(shè)計說明書第XXII頁共LX頁入CRLF符和至少一個或多個空白字符來實現(xiàn)字段的折疊,第一行后面的行稱為信頭字段的續(xù)行。續(xù)行都以一個空白符開始,這種方法稱為折疊(FOLDING),例如標(biāo)題字段SUBJECTTHISISATEST可以表示為SUBJECTTHISISATEST反之,將一個被折疊成多行的信頭字段恢復(fù)到它的單行表示的過程叫做去折疊,只要簡單地移除后面跟著空格的CRLF,將折疊空白符CRLF轉(zhuǎn)換成空格字符,就可以完成去折疊UNFOLDING。在分析被折疊的字段的語法時,要把一個多行的折疊字段展開為一行,根據(jù)它的非折疊的形式來分析它的語法與語義。(4)字段大小寫字段名稱是不區(qū)分大小寫的,所以SUBJECT、SUBJECT或SUBJECT都一樣。不過字段名稱大小寫有習(xí)慣的常用形式,如主題字段的大小寫形式通常為SUBJECT。字段體的大小寫稍微復(fù)雜點,要視情況而定。比如SUBJECT后面的字段體,其中的大寫可能就是縮寫的專用名詞,不能改動。424標(biāo)準(zhǔn)的信頭字段下面介紹RFC822中定義的常用的標(biāo)準(zhǔn)信頭字段。表41RFC822常用的標(biāo)準(zhǔn)信頭字段與發(fā)信方有關(guān)的信頭字段格式FROMMAILBOX寫信人字段。說明信件的原始創(chuàng)建者,給出他的電子信本科畢業(yè)設(shè)計說明書第XXIII頁共LX頁舉例FROMWANG163COM箱地址。創(chuàng)建者對信件的原始內(nèi)容負(fù)責(zé)。格式SENDERMAILBOX舉例FROMWANG163COMSENDERLISINACOM發(fā)送者字段。說明實際提交發(fā)送這個信件的人,給出他的電子信箱地址。當(dāng)發(fā)信人與寫信人不一樣時使用。比如,秘書替經(jīng)理發(fā)信。發(fā)送者對發(fā)送負(fù)責(zé)。格式REPLYTOMAILBOX舉例FROMWANG163COMFROMZHAOSOHOCOM回復(fù)字段。指定應(yīng)當(dāng)把回信發(fā)到哪里。如果有此字段,回信將會發(fā)給它指定的郵箱,而不會發(fā)給FROM字段指定的郵箱。比如,發(fā)送的是經(jīng)理的信,但回信應(yīng)交辦公室處理。與收信方有關(guān)的信頭字段格式TOMAILBOXLIST舉例TOZHANG263COM收信人字段。指定主要收信人的郵箱地址,可以是多個郵箱地址的列表,地址中間用逗號隔開。格式CCMAILBOXLIST舉例CCZHANG863COM抄送字段。指定此信件要同時發(fā)給哪些人,也稱為抄送。也可以使用郵箱地址列表,抄送給多個人。格式BCCMAILBOXLIST密抄字段。指定此信件要同時秘密發(fā)給哪些人,也稱為密件抄送。也可以使用郵箱地址列表,密抄給多個人。其它的信頭字段格式DATEDATETIME舉例DATETUE,04DEC2004161808800日期字段DATE字段含有電子郵件創(chuàng)建的日期和時間。格式SUBJECTTEXT舉例SUBJECTHELLOSUBJECTREHELLO信件主題字段。描述信件的主題。當(dāng)回復(fù)信件時,通常在主題前面增加“RE”前綴,標(biāo)記為該信件為回復(fù)信件當(dāng)信件被轉(zhuǎn)發(fā)時,通常在主題文字前面加上“FW”,“FWD”這樣的前綴。格式RECEIVED“FROM“DOMAIN發(fā)送主機“BY“DOMAIN接收主機“VIA“ATOM物理路徑“ID“MSGID接收者M(jìn)SGID接受字段。是投遞信件的特定郵件服務(wù)器所作的記錄。處理郵件投遞的每個服務(wù)器必須給它處理的每個信頭的前面加一個RECEIVED字段,用以描述信件到達(dá)目的地所經(jīng)過的路徑以及相關(guān)信息。當(dāng)跟蹤各個電子郵件問題時,這個信息很有幫助。舉例RECEIVEDFROMWANG195001BYLI129504TUEDEC2003121802800格式COMMENTSTEXT注釋字段。用于把一個注解添加到信件中。格式RESENT舉例RESENTFROMRESENTSENDERRESENTDATERESENTREPLYTO重發(fā)字段。當(dāng)需要把收到的信件重發(fā)給另一組收信人的時候,可以保持整個原始信件不變,并簡單地產(chǎn)生重發(fā)信件所要求的新信頭字段。為避免與以前的字段相混。新添加的信頭字段都加上RESENT前綴字符串,它們的語法與未加前綴的同名字段相同。格式MESSAGEIDMSGID信件標(biāo)識字段。用于表示一個信件唯一標(biāo)識,該字段通常有SMTP服務(wù)器生成,這個值通常是唯一的。形式根據(jù)使用的軟件而定。通常左邊是標(biāo)識符,右邊指定電腦名圖272表中的關(guān)鍵字表明了電子郵件借用了辦公室備忘錄中的概念和術(shù)語電子郵件的頭部能夠包含一行說明應(yīng)當(dāng)接收到該備忘錄的接收方。象傳統(tǒng)的辦公室備忘錄一樣,電子郵件使用關(guān)鍵字CC指明一個復(fù)寫副本CARBONCOPY電子郵件軟件必須向CC后面的電子郵件地址表中的每個地址發(fā)送一份消息的副本。本科畢業(yè)設(shè)計說明書第XXIV頁共LX頁傳統(tǒng)的辦公室過程要求備忘錄的發(fā)送方通知接收方副本是否傳給其它人。有時發(fā)送方希望將備忘錄的一個副本給別人而不顯示出有一個副本被發(fā)送出去。一些電子郵件系統(tǒng)提供這樣的選項,遵循傳統(tǒng)的辦公室術(shù)語,用盲復(fù)寫副本BLINDCARBONCOPY來表示。創(chuàng)建消息的用戶在關(guān)鍵字BCC后給出一個電子郵件地址表,指定一個或多個盲復(fù)寫副本。雖然BCC在發(fā)送方出現(xiàn),但當(dāng)信息發(fā)送時,郵件系統(tǒng)將它從消息中除去。每個接收方必須檢查頭部的TO和CC行以決定信息是直接發(fā)送還是作為盲副本發(fā)送的有些郵件系統(tǒng)在正文部分附加信息來告訴接收者它是一個盲副本。其它接收者不知道有哪些用戶接收到盲副本。電子郵件使用與傳統(tǒng)的辦公室備忘錄相同的格式和術(shù)語頭部包括與消息有關(guān)的信息,正文包括消息文本。電子郵件頭部的行說明發(fā)送方、接收方、日期、主題、應(yīng)當(dāng)收到副本的人的列表。(5)擴展字段如果想在信頭中加入RFC822中沒有規(guī)定的字段,就需要創(chuàng)建非標(biāo)準(zhǔn)字段。方法非常簡單,只要在自定義的信頭字段名的前面使用X前綴。RFC822將這種方法稱為擴展字段。事實上已經(jīng)有許多擴展字段被廣泛應(yīng)用,但沒有標(biāo)準(zhǔn)定義。例如XLOOP字段XLOOP字段用來防止郵件的循環(huán)傳送。過濾或郵件列表處理程序,可以給它處理的每個信件增加一個XLOOP字段,以后就可以根據(jù)這個字段中含有的特別值,判斷一個信件是否被循環(huán)傳送。如果確認(rèn)郵件發(fā)生了循環(huán),過濾或郵件列表處理程序就可以用不同的方式處理該信件。XMAILER字段XMAILER字段用于指示什么樣的程序產(chǎn)生了這個信件,它是使用最廣泛的擴展字段。產(chǎn)生郵件的軟件可以為所有發(fā)送的信件增加合適的XMAILER字段,該字段不僅含有軟件的名稱,還包含軟件的版本號。例如軟件名為LITTLEFOXMAILER,版本為V10,可以將“XMAILERLITTLEFOXMAILERV10”加到郵件信頭中去。圖272列出了一些在因特網(wǎng)電子郵件中可以找到的普通關(guān)鍵字,以及使用它們的目的。關(guān)鍵字含義FROM發(fā)送方地址本科畢業(yè)設(shè)計說明書第XXV頁共LX頁TO接收方地址CC復(fù)制副本地址DATE信息創(chuàng)建日期SUBJECT信息主題REPLYTO回復(fù)地址XCHARSET使用的字符集(通常為ASCII)XMAILER發(fā)送信息所使用的軟件XSENDER發(fā)送方地址的副本XFACE經(jīng)編碼的發(fā)送方面孔的圖象整個系統(tǒng)的核心是收發(fā)信件的操作,因此為了方便維護,以后的升級,故將這兩個最主要的操作寫成類庫DLL的形式,以組件的形式加載到主程序中,而且其它的功能如果需要的話,也可以通過這樣的組件的形式增加到主程序中。這也體現(xiàn)了CSHARP這一新的微軟主推語言的方便和高校。而且這樣做也方便了我們小組的程序的順利結(jié)合。本科畢業(yè)設(shè)計說明書第XXVI頁共LX頁5命名控件命名控件命名控件命名控件MAILSEND由于在CSHARP語言中,都是以命名控件來組織程序的。而所有的類都?xì)w屬于一個特定的命名空間下。需要的命名空間系統(tǒng)本身自帶了一部分,而且如果系統(tǒng)沒有你需要的命名空間的話,就可以自己編寫,本節(jié)中的這個命名空間就是由于需要而編寫的。而調(diào)用某一個類中的某個變量成員的方法就是通過命名空間名類名變量成員來訪問的,當(dāng)然在CSHARP中如果在程序開始通過USING命名空間名,就可以直接的象C那樣來訪問成員變量,可以說相當(dāng)?shù)姆奖?,這些都會在程序中體現(xiàn)出來,再次不再做過多的敘述。51發(fā)送郵件類發(fā)送郵件類發(fā)送郵件類發(fā)送郵件類SMTPMAIL511主要成員變量說明1網(wǎng)絡(luò)連接類及實例TCPCLIENTTC為TCP網(wǎng)絡(luò)服務(wù)提供客戶端連接類TCPCLIENT實例對象TC。TCPCLIENT類提供了一些簡單的方法,用于在同步阻塞模式下通過網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。而實例化的過程也是連接SMTP服務(wù)器的過程。它的重載方法之一的兩個參數(shù)一個為服務(wù)器名稱字符串,另一個為服務(wù)器的埠。2)提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流及其實例NETWORKSTREAMNS此類提供訪問網(wǎng)絡(luò)的基礎(chǔ)數(shù)據(jù)流的方法。其中最基本也是最重要的兩個方法就是WRITE()和READ()方法,至于參數(shù)不再次贅述。3)一維字符串?dāng)?shù)組變量FILEPATH此字符串?dāng)?shù)組主要用來存放用戶選擇的附件的絕對路徑名,并在發(fā)送帶附件的郵件時用到。4)發(fā)送郵件所需的基本參數(shù)比如用于ESMTP等錄檢驗用的用戶名、密碼,發(fā)送郵件需要的收信人,發(fā)信人地址以及主題等等在此不再贅述。512主要成員函數(shù)說明1)重載的構(gòu)造函數(shù)SMTPMAIL()此函數(shù)主要用于在初始化過程中,把用戶選擇的附件的路徑以參數(shù)的形式傳給FILEPATH。2)添加附件的函數(shù)ADDATTACHMENT本科畢業(yè)設(shè)計說明書第XXVII頁共LX頁傳給FILEPATH的路徑,通過這樣一個函數(shù)就可以循環(huán)的動態(tài)的添加到ILIST接口的一個對象中了,方便以后在具體的實現(xiàn)的過程中的使用。3)得到上傳的附件的文件流GETSTREAM由于在網(wǎng)絡(luò)中的操作都是以網(wǎng)絡(luò)流的形式來實現(xiàn)的,因此先將上傳的附件轉(zhuǎn)換成文件流,然后再用WRITE的方法把這些附件的文件流寫入到網(wǎng)絡(luò)中,來完成發(fā)送附件的操作。具體實現(xiàn)代碼如下所示PRIVATESTRINGGETSTREAMSTRINGFILEPATH/建立文件流對象SYSTEMIOFILESTREAMFILESTRNEWSYSTEMIOFILESTREAMFILEPATH,SYSTEMIOFILEMODEOPENBYTEBYNEWBYTESYSTEMCONVERTTOINT32FILESTRLENGTHFILESTRREADBY,0,BYLENGTHFILESTRCLOSERETURNSYSTEMCONVERTTOBASE64STRINGBY4)將字符串編碼為BASE64字符串的函數(shù)BASE64ENCODE由于ESMTP的LOGIN認(rèn)證機制是采用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這個函數(shù)的作用是把SMTP命令的字符串轉(zhuǎn)換成對應(yīng)的字節(jié)型值(C中規(guī)定的WRITE方法只能寫入字節(jié)型的數(shù)據(jù))然后寫入網(wǎng)絡(luò)中,如果操作成功就返回一個標(biāo)志為真的布爾型變量,如果操作失敗或者發(fā)生異常就返回標(biāo)志為假的布爾型變量。具體代碼如下所示PRIVATEBOOLSENDCOMMANDSTRINGSTR/定義一個數(shù)組BYTEWRITEBUFFER本科畢業(yè)設(shè)計說明書第XXVIII頁共LX頁/設(shè)定一個布爾類型的變量BOOLSTATEFALSEWRITEBUFFERENCODINGDEFAULTGETBYTESSTR/加入防錯機制,可以有效提高程序運行的效率和捕獲出錯信息TRY/向網(wǎng)絡(luò)中寫入數(shù)據(jù)NSWRITEWRITEBUFFER,0,WRITEBUFFERLENGTHSTATETRUECATCHEXCEPTIONEX/返回出錯信息MESSAGEBOXSHOWEXTOSTRINGSTATEFALSE/返回標(biāo)志位RETURNSTATE
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市勞務(wù)合同范例
- 勞動合同范本在昆明
- 包地合同范本模板
- 出口車牌架采購合同范本
- 臨時用房建設(shè)合同范本
- 第五課 我是小畫家-模塊組 教學(xué)設(shè)計 -2023-2024學(xué)年大連版(2015)初中信息技術(shù)七年級下冊
- 勞動合同范本申請
- 養(yǎng)羊合作合同范本
- 2024年云浮市郁南縣河口鎮(zhèn)招聘筆試真題
- 2024年日照銀行社會招聘考試真題
- 超市入駐合作協(xié)議合同范本
- 化學(xué)實驗室安全管理培訓(xùn)與教育考核試卷
- DB34-T 4859-2024 農(nóng)村河道清淤規(guī)范
- 報告廳設(shè)計規(guī)范
- 髖關(guān)節(jié)置換術(shù)后并發(fā)癥
- 我的家鄉(xiāng)安徽淮北城市介紹課件
- 《大學(xué)生創(chuàng)新創(chuàng)業(yè)教程》高職大學(xué)生創(chuàng)新創(chuàng)業(yè)課程全套教學(xué)課件
- 中醫(yī)肝與膽課件
- 2024年青田中小學(xué)教師招聘真題
- 技術(shù)標(biāo)編制要求及注意事項
- 部編人教版八年級語文下冊全冊課件
評論
0/150
提交評論