版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
南京理工大學(xué)畢業(yè)設(shè)計(jì)說(shuō)明書(論文)作者:X鵬學(xué)號(hào):0706580140學(xué)院(系):計(jì)算機(jī)科學(xué)與技術(shù)專業(yè):網(wǎng)絡(luò)工程題目:電子客戶端的設(shè)計(jì)與實(shí)現(xiàn)教授樊春麗教授樊春麗指導(dǎo)者:(姓名)(專業(yè)技術(shù)職務(wù))評(píng)閱者:(姓名)(專業(yè)技術(shù)職務(wù))2011年5月畢業(yè)設(shè)計(jì)說(shuō)明書(論文)中文摘要電子是—種用電子手段提供信息交換的通信方式。它是全球多種網(wǎng)絡(luò)上使用最普遍的一項(xiàng)服務(wù)。這種非交互式的通信,加速了信息的交流及數(shù)據(jù)傳送。通過(guò)連接全世界的Internet,實(shí)現(xiàn)各類信號(hào)的傳送、接收、存貯等處理,將送到世界的各個(gè)角落。到目前為止,可以說(shuō)電子是Internet資源使用最多的一種服務(wù)。本電子系統(tǒng)主要包括的動(dòng)能有:信箱管理(收件箱、發(fā)件箱、草稿箱、已發(fā)送信箱以及的接受,發(fā)送,刪除),聯(lián)系人管理(選擇聯(lián)系人、添加刪除聯(lián)系人),用戶管理(添加刪除用戶、更改當(dāng)前用戶)。所有的都存放在access數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)的表有:聯(lián)系人,用戶,收件箱,發(fā)件箱,草稿箱,已發(fā)送。附件默認(rèn)存放在系統(tǒng)工程目錄下的附件文件夾中,用戶可以通過(guò)點(diǎn)擊附件另存為按鈕,將附件保存至用戶指定的位置。關(guān)鍵詞電子服務(wù)客戶端畢業(yè)設(shè)計(jì)說(shuō)明書(論文)外文摘要TitleclientDesignandImplementationAbstractisakindofexchangeofinformationbyelectronicmeanstoprovidemunication.Itisthemostwidelyusedserviceoftheworld'svarietynetworks.Thisnon-interactivemunicationsacceleratetheexchangeofinformationanddatatransmission.ConnectingthewholeworldInternet,itachievevarioustypesofsignaltransmission,reception,storageandotherprocessing,themessagesenttoallcornersoftheworld.Sofar,wecansayisthemostusedserviceduringtheInternetresources.Thesystemincludesthefunctions:MailManagement(Inbox,Outbox,Drafts,SentBoxandacceptanceof,sendmail,deletemail),ContactManagement(SelectContacts,addanddeletecontacts),UserManagement(addanddeleteuser,setcurrentuser),Allmailisstoredinaccessdatabase,DatabasetablehasContacts,users,Inbox,OutBox,DraftsBox,SentBox.Annexdefaultstoredinthesystemdirectoryundertheprojectfolderintheannex,UserscanclicktheAnnexSaveAsbuttontosavetheattachmenttoauserspecifiedlocation.KeywordsMailServiceMailclient1引言31.1電子介紹31.2電子的工作原理41.3電子技術(shù)現(xiàn)狀41.3.1端到端的安全電子技術(shù)41.3.2傳輸層的安全電子技術(shù)51.4開發(fā)環(huán)境及運(yùn)行環(huán)境62應(yīng)用系統(tǒng)開發(fā)理論基礎(chǔ)62.1SMTP介紹62.1.1SMTP的工作原理及其模型82.1.2SMTP協(xié)議的命令和應(yīng)答92.2POP3協(xié)議122.2.1POP3協(xié)議簡(jiǎn)介122.2.2POP3協(xié)議簡(jiǎn)介122.3jmail組建簡(jiǎn)介及其特點(diǎn)132.3.1jmail組建簡(jiǎn)介132.3.2Jmail的特點(diǎn)132.4MFC簡(jiǎn)介132.4.1MFC概述132.4.2MFC中對(duì)話框類型143客戶端總體設(shè)計(jì)143.1系統(tǒng)總框架153.2程序功能圖154客戶端詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)164.1數(shù)據(jù)庫(kù)模塊的的設(shè)計(jì)與實(shí)現(xiàn)164.1.1數(shù)據(jù)庫(kù)表的設(shè)計(jì)164.1.2關(guān)鍵數(shù)據(jù)庫(kù)操作功能代碼184.2發(fā)送模塊的的設(shè)計(jì)與實(shí)現(xiàn)204.2.1類和界面的設(shè)計(jì)204.2.2關(guān)鍵代碼214.3收件箱的設(shè)計(jì)與實(shí)現(xiàn)224.3.1類的設(shè)計(jì)以及組建導(dǎo)入224.3.2關(guān)鍵代碼244.4發(fā)件箱、草稿箱、已發(fā)送信箱的設(shè)計(jì)與實(shí)現(xiàn)284.4.1類和界面的設(shè)計(jì)284.4.2關(guān)鍵代碼304.5聯(lián)系人模塊的設(shè)計(jì)與實(shí)現(xiàn)314.5.1類和界面的設(shè)計(jì)314.5.2關(guān)鍵代碼324.6用戶模塊的設(shè)計(jì)與實(shí)現(xiàn)334.6.1類和界面的設(shè)計(jì)334.6.2關(guān)鍵代碼344.7其它關(guān)鍵代碼364.7.1窗口創(chuàng)建函數(shù)364.7.2窗口銷毀函數(shù)375結(jié)論396致謝397參考文獻(xiàn)391引言21世紀(jì)是網(wǎng)絡(luò)飛速發(fā)展的時(shí)代,電子已經(jīng)成為熱門話題。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)應(yīng)用已經(jīng)滲透到人類社會(huì)的各個(gè)角落。作為網(wǎng)絡(luò)世界信息傳輸?shù)闹吸c(diǎn)的電子,更是人們關(guān)注的焦點(diǎn)。通過(guò)電子無(wú)論朋友在何方,都可以通過(guò)電子方便的聯(lián)系交流,電子開辟網(wǎng)絡(luò)世界里的一片天地。電腦的日益普及,大大改變了各行各業(yè)的工作方式和人們的生活方式,越來(lái)越多的人開始進(jìn)入到電腦的世界。電腦的普及化,進(jìn)而促進(jìn)了互聯(lián)網(wǎng)的進(jìn)一步的發(fā)展和完善,而作為互聯(lián)網(wǎng)上基本的存在電子系統(tǒng)給予了上網(wǎng)的電腦用戶另一個(gè)別樣的空間。1.1電子介紹電子(簡(jiǎn)稱E-mai1)又稱電子信箱、電子郵政,它是—種用電子手段提供信息交換的通信方式。它是全球多種網(wǎng)絡(luò)上使用最普遍的一項(xiàng)服務(wù)。這種非交互式的通信,加速了信息的交流及數(shù)據(jù)傳送,它是—個(gè)簡(jiǎn)易、快速的方法。通過(guò)連接全世界的Internet,實(shí)現(xiàn)各類信號(hào)的傳送、接收、存貯等處理,將送到世界的各個(gè)角落。到目前為止,可以說(shuō)電子是Internet資源使用最多的一種服務(wù),E-mai1不只局限于信件的傳遞,還可用來(lái)傳遞文件、聲音及圖形、圖像等不同類型的信息。電子不是一種“終端到終端”的服務(wù),是被稱為“存貯轉(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ā)送”意味著將放到收件人的信箱中,而“接收”則意味著從自己的信箱中讀取信件,信箱實(shí)際上是由文件管理系統(tǒng)支持的—個(gè)實(shí)體。因?yàn)殡娮邮峭ㄟ^(guò)服務(wù)器(mai1server)來(lái)傳遞檔的。通常mailserver是執(zhí)行多任務(wù)操作系統(tǒng)UNIX的計(jì)算機(jī),它提供24小時(shí)的電子服務(wù),用戶只要向mailserver管理人員申請(qǐng)—個(gè)信箱賬號(hào),就可使用這項(xiàng)快速的服務(wù)。1.2電子的工作原理1)電子系統(tǒng)是一種新型的信息系統(tǒng),是通信技術(shù)和計(jì)算機(jī)技術(shù)結(jié)合的產(chǎn)物。電子的傳輸是通過(guò)電子簡(jiǎn)單傳輸協(xié)議(SimpleMailTransferProtocol,簡(jiǎn)稱SMTP)這一系統(tǒng)軟件來(lái)完成的,它是Internet下的一種電子通信協(xié)議。2)電子的基本原理,是在通信網(wǎng)上設(shè)立“電子信箱系統(tǒng)”,它實(shí)際上是一個(gè)計(jì)算機(jī)系統(tǒng)。系統(tǒng)的硬件是一個(gè)高性能、大容量的計(jì)算機(jī)。硬盤作為信箱的存儲(chǔ)介質(zhì),在硬盤上為用戶分一定的存儲(chǔ)空間作為用戶的“信箱”,每位用戶都有屬于自己的—個(gè)電子信箱。并確定—個(gè)用戶名和用戶可以自己隨意修改的口令。存儲(chǔ)空間包含存放所收信件、編輯信件以及信件存盤三部分空間,用戶使用口令開啟自己的信箱,并進(jìn)行發(fā)信、讀信、編輯、轉(zhuǎn)發(fā)、存檔等各種操作。系統(tǒng)功能主要由軟件實(shí)現(xiàn)。3)電子的通信是在信箱之間進(jìn)行的。用戶首先開啟自己的信箱,然后通過(guò)鍵入命令的方式將需要發(fā)送的發(fā)到對(duì)方的信箱中。在信箱之間進(jìn)行傳遞和交換,也可以與另—個(gè)系統(tǒng)進(jìn)行傳遞和交換。收方在取信時(shí),使用特定賬號(hào)從信箱提取。1.3電子技術(shù)現(xiàn)狀隨著網(wǎng)絡(luò)的進(jìn)一步發(fā)展,電子已經(jīng)成為人們聯(lián)系溝通的重要手段,而電子的安全問(wèn)題也越來(lái)越得到使用者的重視。對(duì)此,惠普公司及時(shí)提出了安全電子的全面解決方案。1.3.1端到端的安全電子技術(shù)端到端的安全電子技術(shù),保證從被發(fā)出到被接收的整個(gè)過(guò)程中,內(nèi)容XX,無(wú)法修改,并且不可否認(rèn)(privacy,integrity,non-repudation)。目前的Internet上,有兩套成型的端到端安全電子標(biāo)準(zhǔn):PGP和S/MIME。PGP是PrettyGoodPrivacy的簡(jiǎn)稱,是一種長(zhǎng)期一直在學(xué)術(shù)圈和技術(shù)圈內(nèi)得到廣泛使用的安全標(biāo)準(zhǔn)。其特點(diǎn)是通過(guò)單向散列算法對(duì)內(nèi)容進(jìn)行簽名,以保證信件內(nèi)容無(wú)法修改,使用公鑰和私鑰技術(shù)保證內(nèi)容XX且不可否認(rèn)。發(fā)信人與收信人的公鑰都分布在公開的地方,如FTP站點(diǎn),而公鑰本身的權(quán)威性(這把公鑰是否代表發(fā)信人?)則可以由第三方、特別是收信人所熟悉或信任的第三方進(jìn)行簽名認(rèn)證,沒有統(tǒng)一的集中的機(jī)構(gòu)進(jìn)行公鑰/私鑰的簽發(fā)。即在PGP系統(tǒng)中,信任是雙方之間的直接關(guān)系,或是通過(guò)第三者、第四者的間接關(guān)系,但任意兩方之間都是對(duì)等的,整個(gè)信任關(guān)系構(gòu)成網(wǎng)狀結(jié)構(gòu),這就是所謂的WEBofTrust。最近,基于PGP的模式又發(fā)展出了另一種類似的安全電子標(biāo)準(zhǔn),稱為GPG,GnuPrivacyGuard。S/MIME是SecureMulti-PartIntermailMailExtension的簡(jiǎn)稱。它是從PEM(PrivacyEnhancedMail)和MIME(Internet的附件標(biāo)準(zhǔn))發(fā)展而來(lái)的。同PGP一樣,S/MIME也利用單向散列算法和公鑰與私鑰的加密體系。與PGP不同的主要有兩點(diǎn):首先,它的認(rèn)證機(jī)制依賴于層次結(jié)構(gòu)的證書認(rèn)證機(jī)構(gòu),所有下一級(jí)的組織和個(gè)人的證書由上一級(jí)的組織負(fù)責(zé)認(rèn)證,而最上一級(jí)的組織(根證書)之間相互認(rèn)證,整個(gè)信任關(guān)系基本是樹狀的,這就是所謂的TreeofTrust。其次,S/MIME將信件內(nèi)容加密簽名后作為特殊的附件傳送。S/MIME的證書格式也采用X.509,但與一般瀏覽器網(wǎng)上購(gòu)物使用的SSL證書還有一定差異,支持的廠商相對(duì)少一些。在國(guó)外,Verisign免費(fèi)向個(gè)人提供S/MIME電子證書;在國(guó)內(nèi)也有公司提供支持該標(biāo)準(zhǔn)的產(chǎn)品。而在客戶端,NetscapeMessenger和MicrosoftOutlook都支持S/MIME。1.3.2傳輸層的安全電子技術(shù)傳統(tǒng)的包括信封和信本身;電子則包括信頭和信體。現(xiàn)存的端到端安全電子技術(shù)一般只對(duì)信體進(jìn)行加密和簽名,而信頭則由于傳輸中尋址和路由的需要,必須保證原封不動(dòng)。然而,一些應(yīng)用環(huán)境下,可能會(huì)要求信頭在傳輸過(guò)程中也能XX,這就需要傳輸層的技術(shù)作為后盾。目前主要有兩種方式實(shí)現(xiàn)電子在傳輸過(guò)程中的安全,一種是利用SSLSMTP和SSLPOP,另一種是利用VPN或者其他的IP通道技術(shù),將所有的TCP/IP傳輸封裝起來(lái),當(dāng)然也就包括了電子。SMTP,即SimleMailTransferProtocol,簡(jiǎn)單傳輸協(xié)議,是發(fā)信的協(xié)議標(biāo)準(zhǔn);POP,即PostOfficeProtocol,協(xié)議,是收信的協(xié)議。SSLSMTP和SSLPOP即在SSL所建立的安全傳輸通道上運(yùn)行SMTP和POP協(xié)議,同時(shí)又對(duì)這兩種協(xié)議作了一定的擴(kuò)展,以更好地支持加密的認(rèn)證和傳輸。這種模式要求客戶端的EMAIL軟件和服務(wù)器端的EMAIL服務(wù)器都支持,而且都必須安裝SSL證書?;赩PN和其他IP通道技術(shù),封裝所有的TCP/IP服務(wù),也是實(shí)現(xiàn)安全電子傳輸?shù)囊环N方法。這種模式往往是整體網(wǎng)絡(luò)安全機(jī)制的一部分。1.4開發(fā)環(huán)境及運(yùn)行環(huán)境1.4.1開發(fā)環(huán)境MicrosoftWindowsXPProfessionalVisualC++6.0、MicrosoftAccess20071.4.2運(yùn)行環(huán)境IntelPentium2及以上處理器,32M以上內(nèi)存,4G以上硬盤MicrosoftWindows9X/NT操作系統(tǒng)800*600或以上的屏幕分辨率2應(yīng)用系統(tǒng)開發(fā)理論基礎(chǔ)本章介紹了這次設(shè)計(jì)所需要用到的各種軟件,包括Tomcat、JDK、JavaMailAPI等工具,也介紹了客戶端需要的SMTP和POP3協(xié)議等。2.1SMTP介紹SMTP(SimpleMailTransferProtocol)即簡(jiǎn)單傳輸協(xié)議,是一種提供可靠且有效電子傳輸?shù)膮f(xié)議。SMTP是建立在FTP文件傳輸服務(wù)上的一種服務(wù),主要用于傳輸系統(tǒng)之間的信息并提供與來(lái)信有關(guān)的通知。SMTP目前已是事實(shí)上的在Internet傳輸?shù)臉?biāo)準(zhǔn),是一個(gè)相對(duì)簡(jiǎn)單的基于文本的協(xié)議。在其之上指定了一條消息的一個(gè)或多個(gè)接收者(在大多數(shù)情況下被確定是存在的),然后消息文本就傳輸了。可以很簡(jiǎn)單地通過(guò)Telnet程序來(lái)測(cè)試一個(gè)SMTP服務(wù)器,SMTP使用TCP端口25。要為一個(gè)給定的域名決定一個(gè)SMTP服務(wù)器,需要使用MX(MaileXchange)DNS。在20世紀(jì)80年代早期SMTP開始被廣泛地使用。當(dāng)時(shí)它只是作為UUCP的補(bǔ)充,UUCP更適合于處理在間歇連接的機(jī)器間傳送。相反SMTP在發(fā)送和接收的機(jī)器始終都聯(lián)網(wǎng)的情況下工作得最好。SMTP獨(dú)立于特定的傳輸子系統(tǒng),且只需要可靠有序的數(shù)據(jù)流信道支持。SMTP重要特性之一是其能跨越網(wǎng)絡(luò)傳輸,即“SMTP中繼”。通常,一個(gè)網(wǎng)絡(luò)可以由公用因特網(wǎng)上TCP可相互間訪問(wèn)的主機(jī)、防火墻分隔的TCP/IP網(wǎng)絡(luò)上TCP可相互訪問(wèn)的主機(jī),以及其他LAN/WAN中的主機(jī)利用非TCP傳輸層協(xié)議組成。使用SMTP,可實(shí)現(xiàn)相同網(wǎng)絡(luò)上處理機(jī)之間的傳輸,也可通過(guò)中繼器或網(wǎng)關(guān)是實(shí)現(xiàn)某處理機(jī)與其他網(wǎng)絡(luò)之間的傳輸。在這種方式下,的發(fā)送可能經(jīng)過(guò)從發(fā)送端到接收端路徑上的大量中間中繼器或網(wǎng)關(guān)主機(jī)。域名服務(wù)系統(tǒng)(DNS)的交換服務(wù)器可以用來(lái)識(shí)別出傳輸?shù)南乱惶鳬P地址。Sendmail是最早實(shí)現(xiàn)SMTP的傳輸代理之一。到2001年至少有50個(gè)程序?qū)MTP實(shí)現(xiàn)為一個(gè)客戶端(消息的發(fā)送者)或一個(gè)服務(wù)器(消息的接受者)。一些其他的流行的SMTP服務(wù)器包括PhilipHazel的exim,IBM的Postfix,D.J.Bernstein的Qmail,以及MicrosoftExchangeServer.由于這個(gè)協(xié)議開始是基于純ASCⅡ文本的,在二進(jìn)制文件上處理得并不好。后來(lái)開發(fā)了用來(lái)編碼二進(jìn)制文件的標(biāo)準(zhǔn),如MIME,以使其通過(guò)SMTP來(lái)傳輸。今天,大多數(shù)SMTP服務(wù)器都支持8位MIME擴(kuò)展,它使二進(jìn)制文件的傳輸變得幾乎和純文本一樣簡(jiǎn)單。(注意:SMTP是一個(gè)"推"的協(xié)議,它不允許根據(jù)需要從遠(yuǎn)程服務(wù)器上“拉”來(lái)消息。要做到這點(diǎn),客戶端必須使用POP3或IMAP上。另一個(gè),SMTP服務(wù)器可以使用ETRN(ExtendedTurn,擴(kuò)展回車)命令在SMTP上觸發(fā)一個(gè)發(fā)送。)垃圾仍然是個(gè)重要的問(wèn)題。原始的SMTP協(xié)議的局限之一在于它沒有為發(fā)送方進(jìn)行認(rèn)證的功能。因此定義了SMTP-AUTH擴(kuò)展。由于SMTP巨大安裝基礎(chǔ)的網(wǎng)絡(luò)效應(yīng),廣闊地修改SMTP或者完全替代它被認(rèn)為是不現(xiàn)實(shí)的。InternetMail2000就是這樣一個(gè)為替換而做的建議。IRTF的反垃圾研究小組正在研究一些提供簡(jiǎn)單、靈活、輕量級(jí)的、可升級(jí)的源端認(rèn)證的建議。最有可能被接受的建議是SenderPolicyFramework協(xié)議。2.1.1SMTP的工作原理及其模型1、SMTP的工作原理SMTP是工作在兩種情況下:一是電子從客戶機(jī)傳輸?shù)椒?wù)器:二是從某一個(gè)服務(wù)器傳輸?shù)搅硪粋€(gè)服務(wù)器。SMTP也是個(gè)請(qǐng)求/響應(yīng)協(xié)議,命令和響應(yīng)都是基于ASCⅡ文本,并以CR和LF符結(jié)束。響應(yīng)包括一個(gè)表示返回狀態(tài)的三位數(shù)字代碼。SMTP在TCP協(xié)議25號(hào)端口監(jiān)聽連續(xù)請(qǐng)求。連接和發(fā)送過(guò)程如下:1)建立TCP連接。2)客戶端發(fā)送HELO命令以標(biāo)識(shí)發(fā)件人自己的身份,然后客戶端發(fā)送MAIL命令;服務(wù)器端正希望以O(shè)K作為響應(yīng),表明準(zhǔn)備接收。3)客戶端發(fā)送RCPT命令,以標(biāo)識(shí)該電子的計(jì)劃接收人,可以有多個(gè)RCPT行;服務(wù)器端則表示是否愿意為收件人接收。4)協(xié)商結(jié)束,發(fā)送,用命令DATA發(fā)送。5)以“.”號(hào)表示結(jié)束輸入內(nèi)容一起發(fā)送出去,結(jié)束此次發(fā)送,用QUIT命令退出。2、SMTP模型SMTP設(shè)計(jì)基于以下通信模型:針對(duì)用戶的請(qǐng)求,發(fā)送SMTP建立與接收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ì)接收到特別的序列,如果接收者成功處理了,則返回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ù)制品的問(wèn)題,命令和應(yīng)答有一個(gè)比較奇怪的語(yǔ)法,應(yīng)答也有一個(gè)數(shù)字代碼。在下面,例子中可以看到哪些使用實(shí)際的命令和應(yīng)答。命令與應(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),如"<string>"或"<reverse-path>",這里尖括號(hào)表示這是一種類似于語(yǔ)言的變量。2.1.2SMTP協(xié)議的命令和應(yīng)答1、SMTP協(xié)議的命令SMTP命令定義了傳輸或由用戶定義的系統(tǒng)功能。它的命令是由<CRLF>結(jié)束的字符串。而在帶有參數(shù)的情況下,命令本身由<SP>和參數(shù)分開,如果未帶參數(shù)可以直接和<CRLF>連接。的語(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ū),一個(gè)內(nèi)容緩沖區(qū)。特定的命令產(chǎn)生自己的緩沖區(qū),或使一個(gè)或多個(gè)緩沖的內(nèi)容被清除。SMTP協(xié)議包括以下命令:1)HELLO(HELO)此命令用于向接收SMTP確認(rèn)發(fā)送SMTP。2)MAIL(MAIL)此命令用于開始將發(fā)送到一個(gè)多個(gè)中。3)RECIPIENT(RCPT)此命令用于確定內(nèi)容的唯一接收者;多個(gè)接收者將由多個(gè)此命令指定。4)DATA(DATA)接收者將跟在命令后的行作為內(nèi)容。5)SENDORMAIL(SOML)此命令用于開始一個(gè)操作將內(nèi)容傳送到一個(gè)或多個(gè)終端上,或者傳送到中。對(duì)于每個(gè)接收者,如果接收者終端打開,內(nèi)容將被傳送到接收者的終端上,否則就送到接收者的中。6)SENDANDMAIL(SAML)此命令用于開始一個(gè)操作將內(nèi)容傳送到一個(gè)或多個(gè)終端上,并傳送到中。如果接收者終端打開,內(nèi)容將被傳送到接收者的終端上和接收者的中。7)RESET(RSET)此命令指示當(dāng)送操作將被放棄。任何保存的發(fā)送者,接收者和內(nèi)容應(yīng)該被拋棄,所有緩沖區(qū)和狀態(tài)表應(yīng)該被清除,接收方必須返回OK應(yīng)答。8)VERIFY(VRFY)此命令要求接收者確認(rèn)參數(shù)是一個(gè)用戶。如果這是(已經(jīng)知道的)用戶名,返回用戶的全名和指定的。此命令對(duì)回復(fù)路徑緩沖區(qū),轉(zhuǎn)發(fā)路徑緩沖區(qū)和內(nèi)容緩沖區(qū)沒有影響。9)EXPAND(EXPN)此命令要求接收者確認(rèn)參數(shù)指定了一個(gè)發(fā)送列表,如果是一個(gè)發(fā)送列表,就返回表中的成員。如果這是(已經(jīng)知道的)用戶名,返回用戶的全名和指定的。10)HELP(HELP)此命令導(dǎo)致接收者向HELP命令的發(fā)送者發(fā)出幫助信息。11)NOOP(NOOP)此命令不影響任何參數(shù)和已經(jīng)發(fā)出的命令。12)QUIT(QUIT)此命令指示接收方必須發(fā)送OK應(yīng)答然后關(guān)閉傳送信道。接收方在接到QUIT命令并做出響應(yīng)之前不應(yīng)該關(guān)閉通信信道。發(fā)送方在發(fā)送QUIT命令和接收到響應(yīng)之前也不應(yīng)該關(guān)閉信道。13)TURN(TURN)此命令指定接收方要么發(fā)送OK應(yīng)答并改變角色為發(fā)送SMTP,要么發(fā)送拒絕信息并保持自己的角色。2、SMTP的應(yīng)答碼SMTP協(xié)議的每一個(gè)命令都會(huì)返回一個(gè)應(yīng)答碼,應(yīng)答碼的每一個(gè)數(shù)字都是有特定含義的,如第一位數(shù)字為2時(shí)表示命令成功;為5表失?。?表沒有完成。一些較復(fù)雜的程序利用該特點(diǎn),首先檢查應(yīng)答碼的首數(shù)字,并根據(jù)其值來(lái)決定下一步的動(dòng)作。下面將SMTP的應(yīng)答碼如下:501參數(shù)格式錯(cuò)誤502命令不可實(shí)現(xiàn)503錯(cuò)誤的命令序列504命令參數(shù)不可實(shí)現(xiàn)211系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)214幫助信息220<domain>服務(wù)就緒221<domain>服務(wù)關(guān)閉421<domain>服務(wù)未就緒,關(guān)閉傳輸信道250要求的操作完成251用戶非本地,將轉(zhuǎn)發(fā)向<forward-path>450要求的操作未完成,不可用550要求的操作未完成,不可用451放棄要求的操作;處理過(guò)程中出錯(cuò)551用戶非本地,請(qǐng)嘗試<forward-path>452系統(tǒng)存儲(chǔ)不足,要求的操作未執(zhí)行552過(guò)量的存儲(chǔ)分配,要求的操作未執(zhí)行553名不可用,要求的操作未執(zhí)行354開始輸入,以"."結(jié)束554操作失敗2.2POP3協(xié)議
2.2.1POP3協(xié)議簡(jiǎn)介POP3(PostOfficeProtocol3)即郵局協(xié)議的第3個(gè)版本,它規(guī)定怎樣將個(gè)人計(jì)算機(jī)連接到Internet的服務(wù)器和下載電子的電子協(xié)議。它是因特網(wǎng)電子的第一個(gè)離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把存儲(chǔ)到本地主機(jī)(即自己的計(jì)算機(jī))上,同時(shí)刪除保存在服務(wù)器上的,而POP3服務(wù)器則是遵循POP3協(xié)議的接收服務(wù)器,用來(lái)接收電子的。2.2.2POP3協(xié)議簡(jiǎn)介POP3(PostOfficeProtocol3)POP適用于C/S結(jié)構(gòu)的脫機(jī)模型的電子協(xié)議,目前已發(fā)展到第三版,稱POP3。它規(guī)定怎樣將個(gè)人計(jì)算機(jī)連接到Internet的服務(wù)器和下載電子的電子協(xié)議。它是因特網(wǎng)電子的第一個(gè)離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把存儲(chǔ)到本地主機(jī)(即自己的計(jì)算機(jī))上,同時(shí)刪除保存在服務(wù)器上的,而POP3服務(wù)器則是遵循POP3協(xié)議的接收服務(wù)器,用來(lái)接收電子的。POP適用于C/S結(jié)構(gòu)的脫機(jī)模型。脫機(jī)模型即不能在線操作,不像IMAP4(netscape支持IMAP4)當(dāng)客戶機(jī)與服務(wù)器連接并查詢新電子時(shí),被該客戶機(jī)指定的所有將被下載的都將被程序下載到客戶機(jī),下載后,電子客戶機(jī)就可以刪除或修改任意,而無(wú)需與電子服務(wù)器進(jìn)一步交互。POP3客戶向POP3服務(wù)器發(fā)送命令并等待響應(yīng),POP3命令采用命令行形式,用ASCII碼表示。服務(wù)器響應(yīng)是由一個(gè)單獨(dú)的命令行組成,或多個(gè)命令行組成,響應(yīng)第一行以ASCII文本+OK或-ERR指出相應(yīng)的操作狀態(tài)是成功還是失敗在POP3協(xié)議中有三種狀態(tài),認(rèn)可狀態(tài),處理狀態(tài),和更新狀態(tài)。2.3jmail組建簡(jiǎn)介及其特點(diǎn)2.3.1jmail組建簡(jiǎn)介jmail是一種服務(wù)器端的發(fā)送組件,和個(gè)人用的客戶端軟件不一樣的。jmail是在服務(wù)器上給程序用來(lái)發(fā)用的,除了軟件編程人員,其他人一般平常用不上。jmail是一個(gè)第三方操作組件,通常位于web服務(wù)器端,和站點(diǎn)程序緊密配合來(lái)接收及提交到服務(wù)器的控件,讓擁有發(fā)送及接收的功能。2.3.2Jmail的特點(diǎn)(1)可以發(fā)送附件;(2)詳細(xì)日志能力,便于你查看問(wèn)題所在;(3)設(shè)置發(fā)送的優(yōu)先級(jí);(4)支持多種格式的發(fā)送,比如說(shuō)以HTML或者TXT的方式發(fā)送。這是個(gè)免費(fèi)的組件。(5)密件發(fā)送/(CC)抄送/緊急信件發(fā)送能力;(6)最關(guān)鍵的就是--免費(fèi)的組件,不必花錢,所以非常值得使用。2.4MFC簡(jiǎn)介2.4.1MFC概述MFC是微軟基礎(chǔ)類庫(kù)的簡(jiǎn)稱,是微軟公司實(shí)現(xiàn)的一個(gè)c++類庫(kù),主要封裝了大部分的windowsAPI函數(shù),vc++是微軟公司開發(fā)的c/c++的集成開發(fā)環(huán)境,所謂集成開發(fā)環(huán)境,就是說(shuō)利用它你可以編輯,編譯,調(diào)試,而不是使用多種工具輪換操作,靈活性較大。有時(shí)人們說(shuō)vc呢也指它的內(nèi)部編譯器,集成開發(fā)環(huán)境必須有一個(gè)編譯器內(nèi)核,要不有什么用,例如DevC++其中一個(gè)編譯器內(nèi)核就是gcc。MFC除了是一個(gè)類庫(kù)以外,還是一個(gè)框架,你應(yīng)該試過(guò),在vc++里新建一個(gè)MFC的工程,開發(fā)環(huán)境會(huì)自動(dòng)幫你產(chǎn)生許多文件,同時(shí)它使用了mfcxx.dll。xx是版本,它封裝了mfc內(nèi)核,所以你在你的代碼看不到原本的SDK編程中的消息循環(huán)等等東西,因?yàn)镸FC框架幫你封裝好了,這樣你就可以專心的考慮你程序的邏輯,而不是這些每次編程都要重復(fù)的東西,但是由于是通用框架,沒有最好的針對(duì)性,當(dāng)然也就喪失了一些靈活性和效率但是MFC的封裝很淺,所以效率上損失不大,靈活性還可以,雖然也有很多缺陷,但還是一個(gè)比較好的東西,個(gè)人以為,不遜色于KFC。模態(tài)對(duì)話框,又叫做模式對(duì)話框,是指在用戶想要對(duì)對(duì)話框以外的應(yīng)用程序進(jìn)行操作時(shí),必須首先對(duì)該對(duì)話框進(jìn)行響應(yīng)。如單擊【確定】或【取消】按鈕等將該對(duì)話框關(guān)閉。一般來(lái)說(shuō),Windows應(yīng)用程序中,對(duì)話框分為模態(tài)對(duì)話框和非模態(tài)對(duì)話框兩種。二者的區(qū)別在于當(dāng)對(duì)話框打開時(shí),是否允許用戶進(jìn)行其他對(duì)象的操作。模態(tài)對(duì)話框壟斷了用戶的輸入。當(dāng)一個(gè)模態(tài)對(duì)話框打開時(shí),用戶只能與該對(duì)話框進(jìn)行交互,而其他用戶界面對(duì)象收不到輸入信息。模態(tài)對(duì)話框下,用戶需要操作目標(biāo)對(duì)話框就必須先操作模態(tài)對(duì)話框。用戶對(duì)模態(tài)對(duì)話框的處理如圖所示。模態(tài)對(duì)話框的處理過(guò)程2.4.2MFC中對(duì)話框類型非模態(tài)對(duì)話框(又叫做無(wú)模式對(duì)話框),與模態(tài)對(duì)話框不同,當(dāng)用戶打開非模態(tài)對(duì)話框時(shí),依然可以操作其他窗口。本程序使用的是非模態(tài)對(duì)話框和模態(tài)對(duì)話框兩種類型的對(duì)話框。3客戶端總體設(shè)計(jì)
本章主要包括本次設(shè)計(jì)的系統(tǒng)框架圖和系統(tǒng)模塊圖,能夠方便讀者理解系統(tǒng)的結(jié)構(gòu)。3.1系統(tǒng)總框架軟件的總體框架如圖3.1:主要功能選擇主界主要功能選擇主界面箱類發(fā)送類用戶聯(lián)系人管理類圖3.1總體框架圖3.2程序功能圖軟件的功能圖,如圖3.2主界面主界面聯(lián)系人用戶發(fā)件箱草稿箱已發(fā)送收件箱寫聯(lián)系人用戶發(fā)件箱草稿箱已發(fā)送收件箱寫管理添加選擇賬戶刪除閱讀選擇聯(lián)系人發(fā)送存草稿管理添加選擇賬戶刪除閱讀選擇聯(lián)系人發(fā)送存草稿圖3。2程序功能圖4客戶端詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)4.1數(shù)據(jù)庫(kù)模塊的的設(shè)計(jì)與實(shí)現(xiàn)本系統(tǒng)將所有發(fā)送、接受、保存的都保存在access數(shù)據(jù)庫(kù)中。使用ADO技術(shù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,在StdAfx.h頭文件中需要導(dǎo)入AOD動(dòng)態(tài)庫(kù)相關(guān)文件(#import"C:\ProgramFiles\monFiles\System\ado\msado15.dll"no_namespace\rename("EOF","adoEOF")rename("BOF","adoBOF")4.1.1數(shù)據(jù)庫(kù)表的設(shè)計(jì)本系統(tǒng)數(shù)據(jù)庫(kù)名為zhangpeng,分別創(chuàng)建了聯(lián)系人,草稿箱,發(fā)件箱,已發(fā)送,聯(lián)系人,用戶6X表。表的結(jié)構(gòu)大致如下:收件箱表。如圖4.1圖4.1收件箱表草稿箱表。如圖4.2圖4.2草稿箱表發(fā)件箱表,如圖4.3圖4.3發(fā)件箱表已發(fā)送表如圖4.4圖4.4已發(fā)送表用戶表,如圖4.5圖4.5用戶表聯(lián)系人表,如圖4.6圖4.6聯(lián)系人表4.1.2關(guān)鍵數(shù)據(jù)庫(kù)操作功能代碼在每個(gè)需要連接數(shù)據(jù)的對(duì)話框的初始化函數(shù)OnInitDialog()中對(duì)連接數(shù)據(jù)庫(kù)做初始化代碼如下:HRESULThr; try {hr=m_pConnection.CreateInstance("ADODB.Connection");//創(chuàng)建Connection對(duì)象 if(SUCCEEDED(hr)) { hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=zhangpeng.mdb","","",adModeUnknown);///連接數(shù)據(jù)庫(kù) } } catch(__errore)///捕捉異常 {CStringerrormessage; errormessage.Format("連接數(shù)據(jù)庫(kù)失敗!\r\n錯(cuò)誤信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///顯示錯(cuò)誤信息 }在需要從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)的對(duì)話框的對(duì)應(yīng)函數(shù)中通過(guò)如下代碼實(shí)現(xiàn):1.向CListControl控件添加信息_variant_tRecordsAffected; CStringstrSQL; Sender=m_Grid.GetItemText(nItem,0); Time=m_Grid.GetItemText(nItem,2); strSQL.Format("select*from收件箱where接收時(shí)間='%s'and發(fā)件人='%s'",Time,Sender); m_pRecordset=m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText); Sender=(char*)(_bstr_t)m_pRecordset->GetCollect("發(fā)件人"); Receiver=(char*)(_bstr_t)m_pRecordset->GetCollect("收件人"); Content=(char*)(_bstr_t)m_pRecordset->GetCollect("內(nèi)容"); Subject=(char*)(_bstr_t)m_pRecordset->GetCollect("主題"); Annex=(char*)(_bstr_t)m_pRecordset->GetCollect("附件"); UIDMail=(char*)(_bstr_t)m_pRecordset->GetCollect("UID");2.向數(shù)據(jù)庫(kù)對(duì)應(yīng)表中存入數(shù)據(jù):CStringstrSQL,file; CTimetime=CTime::GetCurrentTime(); strSQL.Format("INSERTINTO草稿箱(收件人,主題,內(nèi)容,發(fā)件人,附件,保存時(shí)間,用戶)VALUES('%s','%s','%s','%s','%s','%s','%s')",strSendto,strSubject,strContent,strSendfrom,file,time.Format("%Y-%m-%d%H:%M:%S"),currentuser); m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText); UpdateData(false); 4.2發(fā)送模塊的的設(shè)計(jì)與實(shí)現(xiàn)
4.2.1類和界面的設(shè)計(jì)首先創(chuàng)建一個(gè)對(duì)話框資源,添加所需的控件之后將對(duì)話框關(guān)聯(lián)到發(fā)送類CWrite主界面如圖4.8圖4.8主界面4.2.2關(guān)鍵代碼1.連接SMTP服務(wù)器
可通過(guò)以下代碼實(shí)現(xiàn):2.設(shè)置的相關(guān)信息
可設(shè)置的收件人主題、內(nèi)容、附件等信息,主要代碼參考如下:GetDlgItemText(IDC_BO_SMTP,strSmtpAddr); GetDlgItemText(IDC_EDIT_ACCOUNT,strAccount); GetDlgItemText(IDC_EDIT_PASSWORD,strPassword); GetDlgItemText(IDC_EDIT_SENDTO,strSendto); GetDlgItemText(IDC_EDIT_SUBJECT,strSubject); GetDlgItemText(IDC_EDIT_CONTENT,strContent); strSendfrom=strAccount;3.單擊發(fā)送鍵發(fā)送
注:若發(fā)送失敗將存至發(fā)件箱,若發(fā)送成功將存至已發(fā)送。if(!smtp.SendData((LPSTR)(LPCTSTR)strSendfrom, strMails, (LPSTR)(LPCTSTR)strSenderName, (LPSTR)(LPCTSTR)strReceiverName, (LPSTR)(LPCTSTR)strSubject, (LPSTR)(LPCTSTR)strContent, m_dqFiles, m_IsHtml)) { _variant_tRecordsAffected; CStringstrSQL,file=""; CTimetime=CTime::GetCurrentTime(); strSQL.Format("INSERTINTO發(fā)件箱(收件人,主題,內(nèi)容,發(fā)件人,附件,保存時(shí)間,用戶)VALUES('%s','%s','%s','%s','%s','%s','%s')",strSendto,strSubject,strContent,strSendfrom,file,time.Format("%Y-%m-%d%H:%M:%S"),currentuser); m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText); AfxMessageBox("發(fā)送失敗,存至發(fā)件箱!");return; } _variant_tRecordsAffected; CStringstrSQL,file=""; CTimetime=CTime::GetCurrentTime(); strSQL.Format("INSERTINTO已發(fā)送(收件人,主題,內(nèi)容,發(fā)件人,附件,發(fā)送時(shí)間,用戶)VALUES('%s','%s','%s','%s','%s','%s','%s')",strSendto,strSubject,strContent,strSendfrom,file,time.Format("%Y-%m-%d%H:%M:%S"),currentuser); m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText); UpdateData(false); AfxMessageBox("發(fā)送成功,已保存至'已發(fā)送'!")4.3收件箱的設(shè)計(jì)與實(shí)現(xiàn)
4.3.1類的設(shè)計(jì)以及組建導(dǎo)入收取需要使用jmail組件,在StdAfx.h頭文件中導(dǎo)入jmail組件,語(yǔ)句為:#import"jmail.dll"usingnamespacejmail;收件箱定義的類名為CReceiveDlg界面如圖4.9圖4.9收件箱單擊收取就可以收到界面如圖4.10圖4.10單擊查看就可閱讀。,如圖4.11圖4.11讀單擊保存附件即可將附件保存至其他位置4.3.2關(guān)鍵代碼1.收jmail::IPOP3Ptrjpop; jpop.CreateInstance(__uuidof(jmail::POP3)); try { jpop->Timeout=120; jpop->Connect((_bstr_t)strusr,(_bstr_t)strpwd,(_bstr_t)strpop,110);longmailcount=jpop->Messages->Count; for(inti=1;i<mailcount;i++) { CStringfrom=(char*)jpop->Messages->Item[i]->From; CStringrecipients=(char*)jpop->Messages->Item[i]->GetRecipientsString(); CStringbssubject=(char*)jpop->Messages->Item[i]->Subject; CStringsort; CStringmailuid=(char*)jpop->GetMessageUID(i); intindex=bssubject.Find("TO:"); if(index!=-1) sort=bssubject.Right(bssubject.GetLength()-index-3); else sort="其他";CStringbsbody=(char*)jpop->Messages->Item[i]->Body;COleDateTimetime=jpop->Messages->Item[i]->Date;Longcount=jpop->Messages->Item[i]->GetAttachments()->GetCount(); CStringAttachments=""; for(intj=0;j<count;j++) {Attachments=(char*)jpop->Messages->Item[i]->GetAttachments()->GetItem(j)->GetName();sql.Format("select*from收件箱whereUID='%s'\and用戶='%s'",mailuid,User);if(IsReceiveMail(sql)) { CStringfilepath; filepath=path; filepath+="\\附件\\"; filepath+=mailuid; filepath+=Attachments; jpop->Messages->Item[i]->GetAttachments()->GetItem(j)-> SaveToFile((_bstr_t)filepath); } } if(Attachments.IsEmpty()) Attachments="Null"; sql.Format("select*from收件箱whereUID='%s'\ and用戶='%s'" ,mailuid,User); if(IsReceiveMail(sql)) {sql.Format("insertinto收件箱(發(fā)件人,收件人,主題,內(nèi)容,\附件個(gè)數(shù),附件,接收時(shí)間,UID,\ 用戶)values('%s','%s','%s','%s',%d,'%s','%s',\'%s','%s')",from,recipients,bssubject,bsbody,count,Attachments,time.Format("%Y-%m-%d%H:%M:%S"),mailuid,User);m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText); } }閱讀://TODO:Addyourcontrolnotificationhandlercodehere POSITIONpos=m_Grid.GetFirstSelectedItemPosition();//得到當(dāng)前選中的行 if(pos)//如果選中一行 {intnItem=m_Grid.GetNextSelectedItem(pos); //從數(shù)據(jù)庫(kù)中將選中的行_variant_tRecordsAffected; CStringstrSQL; Sender=m_Grid.GetItemText(nItem,0); Time=m_Grid.GetItemText(nItem,2); strSQL.Format("select*from收件箱where接收時(shí)間='%s'and發(fā)件人='%s'",Time,Sender); m_pRecordset=m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText);Sender=(char*)(_bstr_t)m_pRecordset->GetCollect("發(fā)件人");Receiver=(char*)(_bstr_t)m_pRecordset->GetCollect("收件人");Content=(char*)(_bstr_t)m_pRecordset->GetCollect("內(nèi)容");Subject=(char*)(_bstr_t)m_pRecordset->GetCollect("主題");Annex=(char*)(_bstr_t)m_pRecordset->GetCollect("附件");UIDMail=(char*)(_bstr_t)m_pRecordset->GetCollect("UID"); //AnnexNum=m_pRecordset->GetCollect("附件個(gè)數(shù)"); }this->GetParent()->SendMessage(ID_SHOWREADMAIL);ShowWindow(SW_HIDE);保存附件的代碼:CStringname;intpos=m_annex.GetCurSel();if(pos==-1) { MessageBox("請(qǐng)選擇要保存的附件!"); return; } m_annex.GetText(pos,name);CFileDialogfile(FALSE,NULL,name,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"所有文件(*.*)|*.*||",AfxGetMainWnd()); if(file.DoModal()==IDOK) { CStringstrText=file.GetPathName(); CStringfilepath; filepath=path; filepath+="\\附件\\"; filepath+=UIDMail; filepath+=name; CopyFile(filepath,strText,FALSE); }4.4發(fā)件箱、草稿箱、已發(fā)送信箱的設(shè)計(jì)與實(shí)現(xiàn)4.4.1類和界面的設(shè)計(jì)此三種信箱使用技術(shù)基本相同。設(shè)計(jì)一個(gè)對(duì)話框,添加一個(gè)CListControl控件,通過(guò)此控件顯示基本信息。通過(guò)添加此控件的鼠標(biāo)雙擊消息處理函數(shù)voidOnDblclkListSend(NMHDR*pNMHDR,LRESULT*pResult),實(shí)現(xiàn)對(duì)選中的閱讀功能,通過(guò)單擊刪除按鈕對(duì)進(jìn)行刪除。運(yùn)行圖如圖4.12、4.13:圖4.12圖關(guān)鍵代碼1.刪除功能:POSITIONpos=m_Grid.GetFirstSelectedItemPosition();//得到當(dāng)前選中的行 if(pos)//如果選中一行 {intnItem=m_Grid.GetNextSelectedItem(pos); //從數(shù)據(jù)庫(kù)中將選中的行取出 _variant_tRecordsAffected; CStringstrSQL; Receiver=m_Grid.GetItemText(nItem,0); Time=m_Grid.GetItemText(nItem,2); strSQL.Format("delete*from草稿箱where保存時(shí)間='%s'and收件人='%s'",Time,Receiver); m_pRecordset=m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText); }2.查看功能:POSITIONpos=m_Grid.GetFirstSelectedItemPosition();//得到當(dāng)前選中的行 if(pos)//如果選中一行 { intnItem=m_Grid.GetNextSelectedItem(pos); //從數(shù)據(jù)庫(kù)中將選中的行取出 _variant_tRecordsAffected; CStringstrSQL; Receiver=m_Grid.GetItemText(nItem,0); Time=m_Grid.GetItemText(nItem,2); strSQL.Format("select*from草稿箱where保存時(shí)間='%s'and收件人='%s'",Time,Receiver); m_pRecordset=m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText);Sender=(char*)(_bstr_t)m_pRecordset->GetCollect("發(fā)件人");Content=(char*)(_bstr_t)m_pRecordset->GetCollect("內(nèi)容");Subject=(char*)(_bstr_t)m_pRecordset->GetCollect("主題");Annex=(char*)(_bstr_t)m_pRecordset->GetCollect("附件"); }this->GetParent()->SendMessage(ID_SHOWREADMAIL);ShowWindow(SW_HIDE);自定義一個(gè)消息ID_SHOWREADMAIL,讀時(shí)通過(guò)系統(tǒng)發(fā)送消息ID_SHOWREADMAIL,系統(tǒng)會(huì)調(diào)用在消息映射中指定的函數(shù)進(jìn)行創(chuàng)建閱讀窗口,添加的映射語(yǔ)句為:ON_MESSAGE(ID_SHOWREADMAIL,OnShowreadmail),這樣就會(huì)使用OnShowreadmail來(lái)讀。4.5聯(lián)系人模塊的設(shè)計(jì)與實(shí)現(xiàn)4.5.1類和界面的設(shè)計(jì)創(chuàng)建添加聯(lián)系人對(duì)話框并關(guān)聯(lián)到類AddLinkman,創(chuàng)建聯(lián)系人管理對(duì)話框并關(guān)聯(lián)到類CLinkman。添加界面,如圖4.14圖4.14添加聯(lián)系人管理聯(lián)系人界面如圖4.15圖4.15管理聯(lián)系人4.5.2關(guān)鍵代碼添加和刪除均功能使用的是4.1部分講到的數(shù)據(jù)庫(kù)操作代碼,在此不再贅述。4.6用戶模塊的設(shè)計(jì)與實(shí)現(xiàn)4.6.1類和界面的設(shè)計(jì)用戶指的是本軟件的使用者,并不代表是的發(fā)送。創(chuàng)建添加用戶對(duì)話框并關(guān)聯(lián)類CAddUser創(chuàng)建選擇用戶對(duì)話框并關(guān)聯(lián)類CUserManage.界面如圖4.16,4.17圖4.16用戶管理圖4.17添加用戶4.6.2關(guān)鍵代碼1、在添加用戶窗口中,通過(guò)改變類型的bobox的內(nèi)容將會(huì)自動(dòng)改變POPSMTP的對(duì)應(yīng)內(nèi)容代碼如下:voidCAddUser::OnSelchangeKind(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(true); intkind;kind=m_kind.GetCurSel();switch(kind){case0: m_pop="pop.163."; m_smtp="smtp.163."; break;case1: m_pop="pop.qq."; m_smtp="smtp.qq."; break;case2: m_pop="pop.126."; m_smtp="smtp.126."; break;case3: m_pop="pop.sina."; m_smtp="smtp.sina."; break;case4: m_pop="pop.gmail."; m_smtp="smtp.gmail.";break; default:;}UpdateData(false);2、添加,刪除功能使用4.1中數(shù)據(jù)庫(kù)操作代碼。3、在選擇用戶界面中的選擇按鈕,實(shí)現(xiàn)切換當(dāng)前正在使用本軟件的使用者賬號(hào)。更改之后,系統(tǒng)中的收件箱、發(fā)件箱、草稿箱、寫窗口將和此賬戶相關(guān)聯(lián),只會(huì)顯示與本賬戶有關(guān)的信息。本程序通過(guò)在app類中創(chuàng)建一個(gè)變量currentuser來(lái)識(shí)別當(dāng)前用戶。單擊選擇按鈕的代碼如下: POSITIONpos=m_Grid.GetFirstSelectedItemPosition();//得到當(dāng)前選中的行if(pos)//如果選中一行{ intnItem=m_Grid.GetNextSelectedItem(pos); currentuser=m_Grid.GetItemText(nItem,0); currentpop=m_Grid.GetItemText(nItem,1); currentsmtp=m_Grid.GetItemText(nItem,2); CStringbox="設(shè)置賬戶成功,當(dāng)前賬戶為:"+currentuser; AfxMessageBox(box);4.7其它關(guān)鍵代碼4.7.1窗口創(chuàng)建函數(shù)本程序使用一個(gè)主對(duì)話框類中的創(chuàng)建窗口函數(shù)來(lái)創(chuàng)建不同種類的窗口,通過(guò)一個(gè)int型變量的switch語(yǔ)句來(lái)實(shí)現(xiàn)。其中代碼結(jié)尾處的dlgnum來(lái)記錄所創(chuàng)建的窗口類型,以備用于銷毀窗口函數(shù)使用。代碼如下:voidCZhangpengDlg::CreateDialogBox(intnum){ CRectfRect; m_Frame.GetClientRect(&fRect); m_Frame.MapWindowPoints(this,fRect); s
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中百好物獎(jiǎng)金制度
- 2026江西九江市田家炳實(shí)驗(yàn)中學(xué)臨聘教師招聘2人備考題庫(kù)及參考答案詳解一套
- 2026廣東廣州市荔灣區(qū)東沙街環(huán)衛(wèi)站招聘辦公室管理員1人備考題庫(kù)及答案詳解1套
- 2025云南昆華醫(yī)院投資管理有限公司(云南新昆華醫(yī)院)招聘3人備考題庫(kù)(含答案詳解)
- 2026年1月廣東廣州市幼兒師范學(xué)校附屬幼兒園招聘編外聘用制專任教師2人備考題庫(kù)有答案詳解
- 2026廣東佛山榮山中學(xué)面向社會(huì)招聘臨聘教師3人備考題庫(kù)及答案詳解(易錯(cuò)題)
- 2026中國(guó)中煤黨校公開招聘8人備考題庫(kù)及答案詳解參考
- 2026江蘇省疾病預(yù)防控制中(江蘇省預(yù)防醫(yī)學(xué)科學(xué)院)博士專項(xiàng)招聘3人備考題庫(kù)含答案詳解
- 2026山東第一醫(yī)科大學(xué)附屬眼科醫(yī)院(山東省眼科醫(yī)院)招聘博士研究生人員5人備考題庫(kù)及答案詳解(易錯(cuò)題)
- 2026廣東中交華東投資公司招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 道路建設(shè)工程設(shè)計(jì)合同協(xié)議書范本
- 2025年安徽阜陽(yáng)市人民醫(yī)院校園招聘42人筆試模擬試題參考答案詳解
- 2024~2025學(xué)年江蘇省揚(yáng)州市樹人集團(tuán)九年級(jí)上學(xué)期期末語(yǔ)文試卷
- 2026屆江蘇省南京溧水區(qū)四校聯(lián)考中考一模物理試題含解析
- 民用建筑熱工設(shè)計(jì)規(guī)范
- 學(xué)堂在線 雨課堂 學(xué)堂云 唐宋詞鑒賞 期末考試答案
- 2025至2030中國(guó)輻射監(jiān)測(cè)儀表市場(chǎng)投資效益與企業(yè)經(jīng)營(yíng)發(fā)展分析報(bào)告
- 產(chǎn)品認(rèn)證標(biāo)志管理制度
- 廣州西關(guān)大屋介紹
- 基于機(jī)器視覺的SLM金屬3D打印設(shè)備視覺標(biāo)定技術(shù)研究
- CJ/T 192-2017內(nèi)襯不銹鋼復(fù)合鋼管
評(píng)論
0/150
提交評(píng)論