EMAIL分析技術(shù)的研究與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文_第1頁(yè)
EMAIL分析技術(shù)的研究與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文_第2頁(yè)
EMAIL分析技術(shù)的研究與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文_第3頁(yè)
EMAIL分析技術(shù)的研究與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文_第4頁(yè)
EMAIL分析技術(shù)的研究與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、本科畢業(yè)論文題 目email分析技術(shù)的研究與實(shí)現(xiàn)學(xué) 院計(jì)算機(jī)學(xué)院專(zhuān) 業(yè)班 級(jí)學(xué) 號(hào)學(xué)生姓名指導(dǎo)教師完成日期摘 要隨著互聯(lián)網(wǎng)的迅猛發(fā)展,email日益成為我們?nèi)粘I钪行畔⒔涣鞯闹饕绞剑怯捎谶@一特點(diǎn)使得大量惡意email與垃圾email的存在,如何有效管理email成為目前的主要問(wèn)題之一。本文介紹了一個(gè)基于jmail的email分析管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。主要完成的功能有對(duì)于惡意郵件的屏蔽與刪除、自定義惡意郵件;根據(jù)郵件的屬性對(duì)服務(wù)器中的郵件進(jìn)行了自動(dòng)分組管理方便用戶查看。惡意郵件處理的核心是根據(jù)關(guān)鍵字技術(shù)的,郵件分析系統(tǒng)在接收到郵件服務(wù)器(如smtp)上的客戶郵件之后并不馬上提交給用戶,而

2、是先根據(jù)惡意email的根據(jù)關(guān)鍵字進(jìn)行查找,列出一個(gè)初步判定為惡意email的列表由用戶來(lái)進(jìn)行管理,用戶可以對(duì)惡意郵件進(jìn)行刪除、忽略等操作以提高系統(tǒng)的可靠性??紤]到郵件本身固有的屬性與常用郵件軟件如outlook、foxmail等在郵件分組中的表現(xiàn)形式,本系統(tǒng)在處理郵件自動(dòng)分組時(shí)根據(jù)郵件服務(wù)器中郵件的基本屬性,采用代碼動(dòng)態(tài)生成郵件的兩種郵件分組:按時(shí)間分組及按好友分組。通過(guò)這兩種方式,用戶可以方便地查閱和管理這些email。 關(guān)鍵詞:email;惡意郵件;關(guān)鍵詞查找;自動(dòng)分組abstractwith the rapid development of internet,the email bec

3、omes the main way of information exchanges in our daily life day by day, formal because this characteristics make a great deal of malice email and the existence of the garbage email, how effectively manage email to become one of the current key problems.carries on checking to seek according to the k

4、ey word while handle malice email of and list the credibility that the row form that first step judges to do evil idea email is carried on a management by customer to raise system.adopted two kinds of cents set method while handle the mail automatic grouped: on time cent set and press the friend gro

5、uped. pass these two kinds of method, the customer can expediently check with manage these emails.key words: email; malice email; keywords searching; auto grouping目 錄1 緒論11.1 課題背景11.2 email分析技術(shù)的研究現(xiàn)狀11.3 本文主要研究?jī)?nèi)容32.開(kāi)發(fā)平臺(tái)及工具簡(jiǎn)介42.1 visual c+簡(jiǎn)介:42.2 ado技術(shù)52.3 sql語(yǔ)句簡(jiǎn)介53 需求分析與總體設(shè)計(jì)73.1系統(tǒng)需求分析73.2 系統(tǒng)功能模塊圖73.3

6、 系統(tǒng)目標(biāo)84. 具體實(shí)現(xiàn)94.1 數(shù)據(jù)庫(kù)的創(chuàng)建94.2 mfc連接數(shù)據(jù)庫(kù)94.3 email收取并解析124.4 惡意email處理184.4.1惡意email分析184.4.2惡意email的刪除224.4.3惡意email的忽略244.4.4惡意關(guān)鍵字的添加254.5 email自動(dòng)分組264.5.1按時(shí)間進(jìn)行分組274.5.2 按好友進(jìn)行分組324.5.2 添加好友信息355. 程序調(diào)試376. 結(jié)論與展望38參考文獻(xiàn)39致 謝40i1 緒論1.1 課題背景自從互聯(lián)網(wǎng)開(kāi)始發(fā)展到現(xiàn)在,互聯(lián)網(wǎng)已經(jīng)成為經(jīng)濟(jì)、社會(huì)、文化、教育以及娛樂(lè)等不可缺少的一部分,其中email與我們的日常工作生活和學(xué)習(xí)

7、中越來(lái)越重要。 email的出現(xiàn)使得收發(fā)信的速度得到看空前的提高,用傳統(tǒng)的方式收發(fā)信件通常需要數(shù)天,而通過(guò)email收發(fā)信件往往只需要數(shù)秒,email已經(jīng)成為人們聯(lián)系溝通的重要手段,給人們帶來(lái)了便利。但是email使用者在使用email時(shí)隨著時(shí)間的推移,收件箱中的郵件會(huì)越來(lái)越多,當(dāng)使用者需要查閱某個(gè)email時(shí),需要在查找上浪費(fèi)很多時(shí)間。這造成了郵件管理上的困難。除了使用email在郵件管理上存在的問(wèn)題外還存在很多問(wèn)題:如,目前大部分的email是免費(fèi)的,通過(guò)email收發(fā)信件不僅有速度快的優(yōu)點(diǎn),還有發(fā)信方不需支付額外費(fèi)用的特點(diǎn)。正式因?yàn)閑mail具有的這些特點(diǎn)給我們帶來(lái)了很多煩惱:垃圾郵件成

8、為郵件中的主流,垃圾郵件像瘟疫一樣蔓延,污染網(wǎng)絡(luò)環(huán)境,占用大量傳輸、存儲(chǔ)和運(yùn)算資源,影響了網(wǎng)絡(luò)的正常運(yùn)行。業(yè)內(nèi)人士分析:一旦垃圾郵件占到互聯(lián)網(wǎng)總數(shù)據(jù)流量的三分之一以上,將會(huì)造成巨大的存儲(chǔ)需求,甚至對(duì)信息安全系統(tǒng)的有效性構(gòu)成威脅。除了垃圾郵件以外還有惡意郵件和廣告郵件。通過(guò)郵件攻擊現(xiàn)象越來(lái)越多,破壞力也越來(lái)越強(qiáng),超過(guò)80%的網(wǎng)絡(luò)入侵者均以破壞電子郵件系統(tǒng)為主要目標(biāo),對(duì)網(wǎng)絡(luò)的信息安全造成了嚴(yán)重的威脅。如病毒侵犯、郵件爆炸、郵件被監(jiān)聽(tīng)等安全隱患越來(lái)越嚴(yán)重,因此電子郵件安全問(wèn)題也越來(lái)越得到使用者的重視。在email具有上述能夠給我們帶來(lái)便利但也有煩惱的特點(diǎn),如何有效利用email來(lái)提高我們的工作效率,

9、為我們的日常生活提供極大的便利等逐漸成為人們關(guān)注的焦點(diǎn),這就迫切需要一個(gè)好的email管理系統(tǒng)來(lái)管理我們的郵件。而email管理系統(tǒng)是建立在email的分析之上的。本文正是研究email分析技術(shù)的研究與實(shí)現(xiàn)。1.2 email分析技術(shù)的研究現(xiàn)狀電子郵件系統(tǒng)經(jīng)過(guò)幾十年的發(fā)展,已經(jīng)形成了完善的技術(shù)體系。郵件服務(wù)器系統(tǒng)在保留了電子郵件系統(tǒng)最初的收發(fā)郵件、郵件存儲(chǔ)等基本功能的同時(shí),融入了最新的計(jì)算機(jī)與網(wǎng)絡(luò)技術(shù),使電子郵件系統(tǒng)有了全新的改觀。郵件技術(shù)的發(fā)展趨勢(shì)如下:(1) web郵件技術(shù)。隨著中國(guó)internet應(yīng)用的日益普及和逐步深入,這些數(shù)字仍在不斷增長(zhǎng)。但是對(duì)于電子郵件系統(tǒng)來(lái)說(shuō),單純使用郵件客戶端

10、程序進(jìn)行郵件的收發(fā)已經(jīng)不能滿足用戶移動(dòng)辦公的需要。web郵件技術(shù)的出現(xiàn),徹底解決了用戶辦公的需要,使得郵件用戶可以在任何地方使用瀏覽器登錄郵件服務(wù)器收發(fā)郵件,而不用配置郵件客戶端程序。(2) 多域郵件服務(wù)。所謂多域郵件服務(wù),即是一臺(tái)物理服務(wù)器為多個(gè)獨(dú)立注冊(cè)internet域名的企業(yè)或單位提供電子郵件的服務(wù),在邏輯上,這些企業(yè)和單位擁有自己獨(dú)立的郵件服務(wù)器,也可以稱為虛擬郵件服務(wù)器技術(shù)。對(duì)于isp提供商和企業(yè)集團(tuán)公司來(lái)說(shuō),多域郵件服務(wù)器的支持能力是選擇郵件服務(wù)器的一個(gè)重要考慮因素。它可以方便地?cái)U(kuò)展其橫向郵件服務(wù)能力。(3) 安全防護(hù)?,F(xiàn)在的郵件服務(wù)器在安全防護(hù)技術(shù)上有了較大的提高,包括數(shù)據(jù)身份認(rèn)

11、證、傳輸加密、垃圾郵件過(guò)濾、郵件病毒過(guò)濾、安全審計(jì)等的多項(xiàng)安全技術(shù)在郵件服務(wù)器中都得到了很好的應(yīng)用。(4) 多語(yǔ)言(5) 遠(yuǎn)程監(jiān)控和性能調(diào)整(6) 無(wú)限的可擴(kuò)展能力反垃圾郵件技術(shù)主要包括:垃圾郵件過(guò)濾技術(shù)、郵件服務(wù)器的安全管理和培植技術(shù)以及對(duì)簡(jiǎn)單郵件通信協(xié)議(smtp)的改進(jìn)研究等。對(duì)過(guò)濾技術(shù)的應(yīng)用和研究在推進(jìn)和發(fā)展階段主要集中在三個(gè)方面:(1) 利用熱頂?shù)刂贰p或域名“黑白名單”進(jìn)行的郵件限制或過(guò)濾,典型應(yīng)用諸如:結(jié)合dns的實(shí)時(shí)黑名單(rbl)過(guò)濾,用戶自定義郵件白通道加嚴(yán)整的過(guò)濾方法等。(2) 基于數(shù)據(jù)挖掘技術(shù)進(jìn)行的郵件過(guò)濾研究,利用文本分類(lèi)與統(tǒng)計(jì)算法進(jìn)行垃圾郵件檢測(cè),比較有代表性的是

12、貝葉斯過(guò)濾器。它是以自學(xué)習(xí)、自適應(yīng)和極高的準(zhǔn)確率占據(jù)了過(guò)濾器這個(gè)領(lǐng)域的主導(dǎo)地位。其他研究包括:基于記憶信息、基于事件特征描述信息進(jìn)行數(shù)據(jù)挖掘的垃圾郵件檢測(cè)方法。(3) 基于垃圾郵件的特征分析、規(guī)則提取的規(guī)則匹配過(guò)濾方法,對(duì)這種技術(shù)的應(yīng)用,spamassassin是個(gè)中翹楚。在電子郵件技術(shù)越來(lái)越成熟的今天,國(guó)內(nèi)外還是在不斷的對(duì)其進(jìn)行著分析研究與實(shí)現(xiàn),力使其做到最完美,使惡意郵件無(wú)所遁形,功能更強(qiáng)大,便捷,更大眾化。在國(guó)內(nèi),如網(wǎng)易,新浪,搜狐等大型網(wǎng)站都有為我們提供免費(fèi)的郵箱;在國(guó)外,例如hotmail,yahoo等網(wǎng)站都有此功能。從表面看,無(wú)論使用境內(nèi)還是境外的電子郵箱,除了網(wǎng)站品牌的不同,好象

13、并沒(méi)有太大的區(qū)別,國(guó)內(nèi)外各大網(wǎng)站提供的服務(wù)在功能和技術(shù)上也確實(shí)比較類(lèi)似,但是,業(yè)內(nèi)專(zhuān)家指出,網(wǎng)民使用境外電子郵箱,往往要承擔(dān)一定的潛在風(fēng)險(xiǎn)。1.3 本文主要研究?jī)?nèi)容本文主要研究從郵件服務(wù)器(如)上收取郵件,將收取到的郵件列表顯示出來(lái),當(dāng)點(diǎn)擊郵件列表上的某一封郵件時(shí)能夠在相應(yīng)的地方顯示出該郵件的正文,該部分是完成一個(gè)郵件解析接收的過(guò)程。在收取到所有郵件之后,接下來(lái)要做的工作就主要分為兩塊:郵件的自動(dòng)分組及惡意郵件的發(fā)現(xiàn)。472 開(kāi)發(fā)平臺(tái)及工具簡(jiǎn)介2.1 visual c+簡(jiǎn)介:幾乎所有世界級(jí)的軟件,從業(yè)界領(lǐng)先的web瀏覽器到面向任務(wù)的企業(yè)應(yīng)用,都是使用microsoft visual c+開(kāi)發(fā)系

14、統(tǒng)來(lái)開(kāi)發(fā)的。要用c+來(lái)開(kāi)發(fā)windows和web上的高性能應(yīng)用程序,visual c+是效率最高的首選工具。visual c+ 6.0在不犧牲靈活性、性能和控制力度的同時(shí),給c+帶來(lái)更高水平的生產(chǎn)效率。除了intellisense technology(智能感應(yīng)技術(shù))和edit and continue(即編即調(diào))等顯著縮短開(kāi)發(fā)時(shí)間的新特性外,visual c+ 6.0還為web開(kāi)發(fā)和企業(yè)開(kāi)發(fā)提供更良好的支持。microsoft visual c+ 6.0專(zhuān)業(yè)版的健壯的構(gòu)件開(kāi)發(fā)、強(qiáng)大的數(shù)據(jù)庫(kù)工具和完備的internet支持將使您從中受益,創(chuàng)建出策略性的商務(wù)解決方案來(lái)。visual studio

15、 c+6.0采用一種非常巧妙的方法將原本非常復(fù)雜的windows編程步驟封裝起來(lái),使編程人員可以輕松容易地編寫(xiě)windows應(yīng)用程序。visual c+6.0是microsoft visual studio6.0的一個(gè)子集,他對(duì)低版本開(kāi)發(fā)程序兼容。它有如下的特點(diǎn):(1) visual c+6.0提供了用于開(kāi)發(fā)windows環(huán)境下的應(yīng)用程序和簡(jiǎn)捷、快速的開(kāi)發(fā)環(huán)境。利用visual c+6.0開(kāi)發(fā)windows應(yīng)用程序具有很高的效率。(2) visual c+6.0提供了mfc類(lèi),開(kāi)發(fā)者只需要做少量的工作就可以得到功能齊全的windows應(yīng)用程序。與使用c和windows sdk開(kāi)發(fā)windows

16、應(yīng)用程序相比,使用visual c+6.0建立一個(gè)完美的windows應(yīng)用程序所花費(fèi)的時(shí)間要少得多。(3) visual c+6.0還提供了一個(gè)高度集成的工具集,使得在開(kāi)發(fā)應(yīng)用程序的全過(guò)程中都保證了較高的效率。集成化便于程序開(kāi)發(fā),開(kāi)發(fā)者可以同時(shí)在編輯、建立、調(diào)試等不同任務(wù)之間快速切換,甚至可以同時(shí)進(jìn)行。(4) 調(diào)試方便:在程序調(diào)試時(shí),在遇到編譯錯(cuò)誤時(shí),會(huì)在輸出窗口顯示出錯(cuò)誤類(lèi)型、行號(hào)及錯(cuò)誤提示等信息。在輸出窗口中雙擊錯(cuò)誤提示時(shí),光標(biāo)會(huì)自動(dòng)指向出現(xiàn)錯(cuò)誤的代碼所在行應(yīng)方便快速找出錯(cuò)誤。visual c+支持?jǐn)帱c(diǎn)調(diào)試,同時(shí)也可以在調(diào)試窗口觀察有關(guān)變量的值,以方便查找出有關(guān)的邏輯錯(cuò)誤。2.2 ado技

17、術(shù)(1) ado的技術(shù)特點(diǎn) ado的全稱是activex data object,它是微軟公司為數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)的新接口。ado基于com,提供編程語(yǔ)言可利用的對(duì)象,它不僅面向visual c+,同時(shí)還提供面向其他開(kāi)發(fā)工具的應(yīng)用,如visual basic、vj等,甚至還提供面向諸如 vbscript、javascript等腳本語(yǔ)言的應(yīng)用。ado的底層是ole db,不僅能訪問(wèn)關(guān)系數(shù)據(jù)庫(kù),也能訪問(wèn)非關(guān)系型數(shù)據(jù)庫(kù)。ado對(duì)ole db的包裝是相當(dāng)成功的,相對(duì)于ole db中眾多的接口來(lái)說(shuō),ado對(duì)象模型簡(jiǎn)明扼要,沒(méi)有一點(diǎn)多余的東西,并且其功能還要比dao強(qiáng)大的多。并且可以說(shuō)到目前為止,ado是

18、目前最快的數(shù)據(jù)庫(kù)訪問(wèn)的中間層。(2) ado的結(jié)構(gòu)ado模型包含了7個(gè)對(duì)象和4個(gè)集合,ado的結(jié)構(gòu)圖如圖2-1所示。2.3 sql語(yǔ)句簡(jiǎn)介sql是一種面向數(shù)據(jù)庫(kù)的通用數(shù)據(jù)處理語(yǔ)言規(guī)范,能完成以下幾類(lèi)功能:提取查詢數(shù)據(jù),插入修改刪除數(shù)據(jù),生成修改和刪除數(shù)據(jù)庫(kù)對(duì)象,數(shù)據(jù)庫(kù)安全控制,數(shù)據(jù)庫(kù)完整性及數(shù)據(jù)保護(hù)控制。本文用到的sql語(yǔ)句主要為select語(yǔ)句和insert語(yǔ)句。連接對(duì)象(connection)錯(cuò)誤集合(errors)錯(cuò)誤對(duì)象(error)屬性集合(properties)屬性對(duì)象(property)命令對(duì)象(command)參數(shù)集合(parameters)參數(shù)對(duì)象(parameter)屬性集

19、合(properties)屬性對(duì)象(property)記錄集對(duì)象(recordset)域集合(fields)域?qū)ο?field)屬性集合(properties)屬性對(duì)象(property)圖2-1 ado的結(jié)構(gòu)圖3 需求分析與總體設(shè)計(jì)3.1 系統(tǒng)需求分析郵件的自動(dòng)分組主要是為了管理方便,查閱方便,以節(jié)省用戶寶貴的時(shí)間。在實(shí)現(xiàn)郵件自動(dòng)分組時(shí)用戶可以輸入好友信息,以便好友發(fā)過(guò)來(lái)的email可以分到一起,這對(duì)與查找節(jié)省了很多時(shí)間,同時(shí)也提供了極大的方便。在進(jìn)行email來(lái)源分組時(shí),分組信息是根據(jù)用戶輸入的好友姓名及email地址自動(dòng)生成。出來(lái)根據(jù)email來(lái)源進(jìn)行分類(lèi)外,本文還研究通過(guò)時(shí)間作為條件來(lái)

20、進(jìn)行分類(lèi),比如說(shuō)將郵件分為:今天收到的email、昨天收到的email、更早收到的email。惡意郵件的發(fā)現(xiàn)是為了提高安全性的,可過(guò)濾一些用戶認(rèn)為是垃圾郵件的email,用戶可以根據(jù)收到的email,點(diǎn)擊相應(yīng)的菜單來(lái)啟動(dòng)對(duì)email進(jìn)行分析的過(guò)程。通過(guò)查找相應(yīng)的關(guān)鍵字列出垃圾郵件列表,用戶可以根據(jù)所列出的垃圾郵件列表進(jìn)行操作:如刪除該email或忽略對(duì)該email為垃圾郵件的忽略。因?yàn)橛行?duì)于用戶來(lái)說(shuō)是非常重要的郵件而被誤判為垃圾email的情況發(fā)生。就像有些殺毒軟件會(huì)誤把一些系統(tǒng)文件或一些用戶自己有文件誤報(bào)為病毒一樣。這樣做是為了在經(jīng)過(guò)用戶確認(rèn)的前提下從郵件服務(wù)器中刪除郵件,進(jìn)一步提高可靠性

21、和安全性。3.2 系統(tǒng)功能模塊圖系統(tǒng)功能模塊圖如圖3-1所示。由該圖可以看出本系統(tǒng)包含了3個(gè)大的功能模塊:email接收并解析,惡意email的發(fā)現(xiàn),email自動(dòng)分組。其中惡意email的發(fā)現(xiàn)包括了關(guān)鍵字的添加,該惡意email的刪除,該惡意email的忽略三個(gè)小的功能模塊。email自動(dòng)分組中包括了按email來(lái)源分組,按email接收到的時(shí)間分組,好友信息的添加3個(gè)小的功能模塊。圖3-1 系統(tǒng)功能模塊圖3.3 系統(tǒng)目標(biāo)本文所設(shè)計(jì)的email分析系統(tǒng)要能夠?qū)崿F(xiàn)email的接收并解析,惡意email的發(fā)現(xiàn)及發(fā)現(xiàn)后的處理,email 的自動(dòng)分組。并且這些功能要能夠有很好的擴(kuò)展性,為了達(dá)到擴(kuò)展性

22、的要求,本文從以下幾個(gè)方面進(jìn)行設(shè)計(jì):惡意郵件的關(guān)鍵字可以手動(dòng)添加,添加完成之后保存于數(shù)據(jù)庫(kù)中以便用戶在下次實(shí)用時(shí)不需要重復(fù)輸入關(guān)鍵字進(jìn)行掃描。對(duì)于掃描到的惡意email,由用戶來(lái)執(zhí)行相應(yīng)的操作:刪除該email或忽略該email為惡意email的警告,以免系統(tǒng)自動(dòng)進(jìn)行操作時(shí)刪除用戶重要的email。好友信息可由用戶添加,好友信息存入access數(shù)據(jù)庫(kù)中,這樣用戶只需輸入一次好友信息即可并且當(dāng)用戶增加一個(gè)好友信息時(shí)能夠動(dòng)態(tài)生成好友并將該好友發(fā)過(guò)來(lái)的email自動(dòng)放入該分組當(dāng)中,便于用戶的查找與閱讀。email分組還提供另外一種分組:按時(shí)間分組,以方便用戶按時(shí)間段來(lái)查找郵件,這樣也可以節(jié)省用戶查找

23、email的時(shí)間,提高了用戶的效率。本系統(tǒng)用vc開(kāi)發(fā),連接數(shù)據(jù)庫(kù)采用ado方式與access進(jìn)行連接。4 具體實(shí)現(xiàn)4.1 數(shù)據(jù)庫(kù)的創(chuàng)建本系統(tǒng)采用access數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)相關(guān)信息,建立數(shù)據(jù)庫(kù)的過(guò)程如下:在工程所在目錄下點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中將鼠標(biāo)移到“新建”,再在彈出的字菜單中點(diǎn)擊“新建microsoft office access 應(yīng)用程序”。到此數(shù)據(jù)庫(kù)就建立好了,將改access文件改名email.mdb。數(shù)據(jù)庫(kù)表格的建立:本系統(tǒng)中數(shù)據(jù)庫(kù)主要是用于存儲(chǔ)惡意email判斷的關(guān)鍵字信息及好友信息。本系統(tǒng)建立兩張表:keyword表和emailbook表。(1) keyword表只包含一

24、個(gè)字段keyword,設(shè)計(jì)如表4-1所示。表4-1 關(guān)鍵字表keyword字段含義字段名數(shù)據(jù)類(lèi)型說(shuō)明關(guān)鍵字keyword文本(2) emailbook表包含兩個(gè)字段:name和email,其中name是好友的姓名,email為好友的email地址。設(shè)計(jì)如表4-2所示。表4-2 用戶信息表(通信錄表)emailbook字段含義字段名數(shù)據(jù)類(lèi)型說(shuō)明姓名name文本email地址email文本4.2 mfc連接數(shù)據(jù)庫(kù)本系統(tǒng)在進(jìn)行數(shù)據(jù)庫(kù)連接時(shí)采用的是ado方式進(jìn)行連接。ado(activex data object)是microsoft數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)的新接口,是建立在ole db之上的高層數(shù)據(jù)庫(kù)訪問(wèn)

25、技術(shù),即使你對(duì)ole db,com不了解也能輕松對(duì)付ado,因?yàn)樗浅:?jiǎn)單易用,甚至比你以往所接觸的odbc api、dao、rdo都要容易使用,并不失靈活性。ado數(shù)據(jù)庫(kù)開(kāi)發(fā)的基本流程,它的基本步驟如下:(1) 初始化com庫(kù),引入ado庫(kù)定義文件(2) 用connection對(duì)象連接數(shù)據(jù)庫(kù)(3) 利用建立好的連接,通過(guò)connection、command對(duì)象執(zhí)行sql命令,或利用recordset對(duì)象取得結(jié)果記錄集進(jìn)行查詢、處理。(4) 使用完畢后關(guān)閉連接釋放對(duì)象。接下來(lái)詳細(xì)介紹連接過(guò)程:com庫(kù)的初始化我們可以使用afxoleinit()來(lái)初始化com庫(kù),這項(xiàng)工作通常在cwinapp:i

26、nitinstance()的重載函數(shù)中完成,代碼:bool cadotest1app:initinstance()afxoleinit();. (2) 用#import指令引入ado類(lèi)型庫(kù)為了引入ado類(lèi)型庫(kù),需要在項(xiàng)目的stdafx.h文件中加入如下語(yǔ)句:#import c:program filescommon filessystemadomsado15.dll no_namespace rename(eof,adoeof)這一語(yǔ)句的作用同我們已經(jīng)十分熟悉的#include類(lèi)似,編譯的時(shí)候系統(tǒng)會(huì)為我們生成msado15.tlh,ado15.tli兩個(gè)c+頭文件來(lái)定義ado庫(kù)。開(kāi)發(fā)環(huán)境中ms

27、ado15.dll不一定在這個(gè)目錄下,要按實(shí)際情況修改;在編譯的時(shí)候可能會(huì)出現(xiàn)如下警告,對(duì)此微軟在msdn中作了說(shuō)明,并建議我們不要理會(huì)這個(gè)警告:msado15.tlh(405) : warning c4146: unary minus operator applied to unsigned type, result still unsigned。(3) 創(chuàng)建connection對(duì)象并連接數(shù)據(jù)庫(kù)為了首先我們需要添加一個(gè)指向connection對(duì)象的指針_connectionptr m_pconnection,下面的代碼演示了如何創(chuàng)建connection對(duì)象實(shí)例及如何連接數(shù)據(jù)庫(kù)并進(jìn)行異常捕捉:

28、bool cadotest1dlg:oninitdialog()cdialog:oninitdialog();hresult hr;tryhr = m_pconnection.createinstance(adodb.connection);/創(chuàng)建connection對(duì)象if(succeeded(hr)hr = m_pconnection-open(provider=microsoft.jet.oledb.4.0;data source=test.mdb,admodeunknown);/連接數(shù)據(jù)庫(kù)/上面一句中連接字串中的provider是針對(duì)access2000環(huán)境的,對(duì)于access97,/

29、需要改為:provider=microsoft.jet.oledb.3.51;catch(_com_error e)/捕捉異常cstring errormessage;errormessage.format(連接數(shù)據(jù)庫(kù)失敗!rn錯(cuò)誤信息:%s,e.errormessage();afxmessagebox(errormessage);/顯示錯(cuò)誤信息在這段代碼中我們是通過(guò)connection對(duì)象的open方法來(lái)進(jìn)行連接數(shù)據(jù)庫(kù)的。 (4) 執(zhí)行sql命令并取得結(jié)果記錄集為了取得結(jié)果記錄集,我們定義一個(gè)指向recordset對(duì)象的指針:_recordsetptr m_precordset;并為其創(chuàng)建r

30、ecordset對(duì)象的實(shí)例: m_precordset.createinstance(adodb.recordset),sql命令的執(zhí)行可以采用多種形式,本文采用了recordset對(duì)象進(jìn)行查詢?nèi)〉糜涗浖?。m_precordset-open(sql語(yǔ)句,_variant_t(idispatch *)m_pconnection,true),adopenstatic,adlockoptimistic,adcmdtext);插入操作采用的是connection對(duì)象的execute方法執(zhí)行sql命令。execute()方法的原型如下所示:recordsetptr connection15:execut

31、e ( _bstr_t commandtext, variant * recordsaffected, long options ) 其中commandtext是命令字串,通常是sql命令。參數(shù)recordsaffected是操作完成后所影響的行數(shù), 參數(shù)options表示commandtext中內(nèi)容的類(lèi)型,options可以取如下值之一:adcmdtext表明commandtext是文本命令;adcmdtable表明commandtext是一個(gè)表名;adcmdproc表明commandtext是一個(gè)存儲(chǔ)過(guò)程;adcmdunknown表明commandtext內(nèi)容未知。execute()函數(shù)執(zhí)

32、行完后返回一個(gè)指向記錄集的指針。(5) 關(guān)閉記錄集與連接 記錄集或連接都可以用close()方法來(lái)關(guān)閉:m_precordset-close();/關(guān)閉記錄集m_pconnection-close();/關(guān)閉連接本系統(tǒng)在設(shè)計(jì)對(duì)access進(jìn)行操作時(shí)為了方便將上述操作寫(xiě)成了一個(gè)類(lèi)。4.3 email收取并解析本文所研究的email分析技術(shù)的研究與實(shí)現(xiàn),在實(shí)現(xiàn)收取郵件時(shí),用到了一個(gè)動(dòng)態(tài)鏈接庫(kù):jmail.dll。該動(dòng)態(tài)鏈接庫(kù)封裝了對(duì)郵件相關(guān)的操作。jmail常用的一些方法及屬性如下:body : string :信件體,正文,可使用appendtext追加內(nèi)容 。如:jmail.body = he

33、llo world errorcode : integer :如果jmail.silent設(shè)置為true,errorcode包含的是錯(cuò)誤代碼 。如:response.write( jmail.errorcode ); errormessage : string :如果jmail.silent設(shè)置為true,包含的是錯(cuò)誤信息 。如:response.write( jmail.errormessage )。 priority : integer :優(yōu)先級(jí). 范圍在1-5之間 ,1 高優(yōu)先級(jí). 有些郵件程序稱之為緊急 ;2 也是高優(yōu)先級(jí) ;3 普通優(yōu)先級(jí) ;4 低優(yōu)先級(jí) ;5 最低的優(yōu)先級(jí) 。如:j

34、mail.priority = 3 serveraddress : string :指定郵件服務(wù)器的地址。可以指定多個(gè)服務(wù)器,用分號(hào)點(diǎn)開(kāi)??梢灾付ǘ丝谔?hào)。如果serveraddress保持空白,jmail會(huì)嘗試解決遠(yuǎn)程郵件服務(wù)器,然后直接發(fā)送到服務(wù)器上去。如:jmail.serveraddress = ; :2500 close() :強(qiáng)制jmail關(guān)閉緩沖的與郵件服務(wù)器的連接 ,如:jmail.close(); 要接收某個(gè)郵箱的email,我們首先要連接至該服務(wù)器,這需要我們輸入用戶名和密碼及郵件服務(wù)器地址。系統(tǒng)運(yùn)行時(shí)主界面如圖4-1所示圖4-1 email分析系統(tǒng)主界面連接郵件服務(wù)器時(shí)用到

35、的方法為:connect(),該方法有幾個(gè)參數(shù):用戶名(用戶id),用戶密碼,服務(wù)器地址,服務(wù)器端口號(hào),接收郵件的服務(wù)器端口號(hào)一般為110號(hào)端口。在連接服務(wù)器并收取email時(shí),用戶在輸入有關(guān)信息時(shí)有可能會(huì)在前面或后面帶上空格,我們必須過(guò)濾這些空格,否則的話會(huì)出現(xiàn)服務(wù)器地址輸入錯(cuò)誤或者用戶名或密碼輸入錯(cuò)誤。這樣用戶會(huì)覺(jué)得自己沒(méi)有輸錯(cuò)而懷疑我們的系統(tǒng)有問(wèn)題,為了避免這種錯(cuò)誤我們應(yīng)該在獲得用戶輸入的上述信息之后進(jìn)行過(guò)濾操作。在用戶使用過(guò)程當(dāng)中也有可能會(huì)出現(xiàn)這種情況:用戶沒(méi)有輸入用戶名就點(diǎn)擊了接收郵件按鈕,這樣的操作是不允許的,因?yàn)樵跊](méi)有輸入用戶名的情況下,系統(tǒng)根本不知道從哪里接收email。我們必

36、須加一個(gè)判斷條件看用戶是否輸入了用戶名,在用戶沒(méi)有輸入用戶名的條件下不允許用戶收取email。同樣的道理用戶很有可能會(huì)忘記輸入服務(wù)器地址,沒(méi)有輸入該信息系統(tǒng)根本不知道從哪個(gè)郵件服務(wù)器中接收郵件,這時(shí)我們也必須加一個(gè)判斷條件,以減少系統(tǒng)出錯(cuò)的概率,讓我們的系統(tǒng)更加健壯。在用戶接收email時(shí),用戶可能會(huì)連續(xù)兩次點(diǎn)擊接收郵件,我們應(yīng)該只在郵件列表空控件中顯示最新的郵件信息,而不應(yīng)該有重復(fù)的信息出現(xiàn),所以我們必須在點(diǎn)擊接收郵件按鈕的一開(kāi)始要清空郵件信息控件中所有的信息。此外,在接收完郵件時(shí)也必須釋放郵件信息指針,但此時(shí)不能關(guān)閉連接,因?yàn)樵诤竺娴膼阂鈋mail的刪除中是要用到該連接指針的,但是如果不關(guān)

37、閉連接的話,再次點(diǎn)擊接收郵件按鈕時(shí)會(huì)出現(xiàn)錯(cuò)誤(非法操作),因?yàn)榇藭r(shí)連接是打開(kāi)的,再次打開(kāi)是不允許的。解決方法如下:在進(jìn)行打開(kāi)前先判斷連接是否是打開(kāi)的,若是打開(kāi)了的,則先關(guān)閉該連接,若沒(méi)有打開(kāi)則直接創(chuàng)建連接就可以了。在接收郵件時(shí)的連接在其他的類(lèi)中要用到,此時(shí)必須定義一個(gè)類(lèi)的共有成員來(lái)指向該指針,只有這樣在刪除時(shí)才能夠用該連接指針。本系統(tǒng)中出來(lái)要?jiǎng)h除惡意郵件以外,其他的操作基本上都是對(duì)email的只讀操作,在進(jìn)行只讀操作時(shí),用集合類(lèi)來(lái)操作更為方便快捷,該集合類(lèi)的每一項(xiàng)存儲(chǔ)的是一個(gè)類(lèi)的一個(gè)指針。該類(lèi)是一個(gè)郵件信息類(lèi),主要包括email的來(lái)處,email的主題,email接收到的時(shí)間,email的正文

38、,該email的索引號(hào)(用于刪除時(shí)的一個(gè)參數(shù))這五個(gè)成員變量,這五個(gè)成員變量出來(lái)了email的索引號(hào)之外都是字符串類(lèi)型的變量,索引號(hào)是一個(gè)長(zhǎng)整型的數(shù)。在遍歷每封email的同時(shí)把這些email都存儲(chǔ)到集合類(lèi)當(dāng)中。在收取了所有的email的時(shí)候,同時(shí)在集合類(lèi)當(dāng)中存儲(chǔ)了所有的郵件信息。同時(shí)也要讓郵件的一些信息顯示出來(lái)如:主題,來(lái)源,時(shí)間等,以便用戶查閱。連接并收取郵件的代碼如下:updatedata();m_strmailserver.trimleft();m_strmailserver.trimright();m_struserid.trimleft();m_struserid.trimrigh

39、t();m_strpassword.trimleft();m_strpassword.trimright();if(m_strmailserver.getlength() = 0)afxmessagebox(郵件服務(wù)器不能為空);return;if(m_struserid.getlength() disconnect();/ 超時(shí) 30秒ppop3-timeout = 30;/ 連接郵件服務(wù)器ppop3-connect(lpctstr)m_struserid,(lpctstr)m_strpassword, (lpctstr)m_strmailserver, 110);p=ppop3;/給類(lèi)的成

40、員指針賦值,以便其他類(lèi)能夠調(diào)用該連接指針pmessages = ppop3-messages;/ 已下載的郵件的實(shí)際個(gè)數(shù)(因?yàn)榈?個(gè)item是未用的,所以減1)long lcount = pmessages-count - 1;cmessages * email_messages;if(lcount = 0)afxmessagebox(信箱為空);elsejmail:imessageptr pmessage;/ 遍歷每封信for(long i = 1; i itemi;_bstr_t bstrfrom = pmessage-from;_bstr_t bstrsubject = pmessage

41、-subject;_bstr_t bstrbody = pmessage-body;coledatetime oledate = pmessage-date;/-將接收到的郵件存儲(chǔ)到全局的集合類(lèi)變量中,以便日后使用email_messages = new cmessages (const char *)bstrfrom, (const char*)bstrsubject,(const char*)oledate.format(%y-%m-%d),(const char *) bstrbody,i);theapp.messagearray.add(email_messages);/-將郵件信息添

42、加到列表框控件中int nlistitem = m_ctlmessageslist.insertitem(i, (const char * )bstrfrom);m_ctlmessageslist.setitem(nlistitem, 1, lvif_text, (const char*)bstrsubject, 0, 0, 0, null);m_ctlmessageslist.setitem(nlistitem, 2, lvif_text, (const char*)oledate.format(%y-%m-%d), 0, 0, 0, null);m_strbodyarray.add(con

43、st char*)bstrbody);pmessage.release();catch(_com_error e)cstring strerr;strerr.format(錯(cuò)誤信息:%srn錯(cuò)誤描述:%s, (lpctstr)e.errormessage(), (lpctstr)e.description();afxmessagebox(strerr);接收部分流程圖如圖4-2所示:圖4-2 接收部分流程圖在接收了所有的郵件之后,用戶在郵件列表當(dāng)中點(diǎn)擊某個(gè)email的時(shí)候,必須要顯示出郵件的正文供用戶閱讀。要實(shí)現(xiàn)此功能就要添加一個(gè)消息處理函數(shù),這個(gè)消息處理函數(shù)是針對(duì)郵件列表框控件的,即當(dāng)選中某

44、項(xiàng)時(shí)就必須發(fā)出一個(gè)相應(yīng)的消息,通過(guò)消息路由在相應(yīng)的消息處理函數(shù)中進(jìn)行處理,該消息處理函數(shù)完成的功能就是在郵件正文文本框當(dāng)中顯示出郵件的正文。該消息處理函數(shù)代碼如下:/-/顯示郵件正文/-void cemailanalysesystemdlg:onshowbody(nmhdr* pnmhdr, lresult* presult) nm_listview* pnmlistview = (nm_listview*)pnmhdr;position pos = m_ctlmessageslist.getfirstselecteditemposition();if(pos)int nitem = m_ct

45、lmessageslist.getnextselecteditem(pos);m_strbody = m_strbodyarray.getat(nitem);updatedata(false);*presult = 0;4.4 惡意email處理惡意郵件已經(jīng)成為威脅用戶安全的主要形式之一,如何能夠做到及時(shí)發(fā)現(xiàn)惡意郵件并由用戶進(jìn)行相應(yīng)的操作已經(jīng)成為email使用者廣泛關(guān)注的問(wèn)題,同樣也是一個(gè)亟待解決的問(wèn)題之一。惡意email的處理包括兩個(gè)部分:惡意email的刪除及忽略。4.4.1 惡意email分析本文在進(jìn)行惡意email分析采用的是關(guān)鍵字分析方法,和現(xiàn)在一些常用的方法一樣,將關(guān)鍵字存儲(chǔ)于文件

46、或數(shù)據(jù)庫(kù)中,當(dāng)要分析email時(shí)就從數(shù)據(jù)庫(kù)或文件當(dāng)中逐個(gè)取出關(guān)鍵字并與待分析文件進(jìn)行比較,看待分析文件當(dāng)中是否含有取出來(lái)的關(guān)鍵字,若含有該關(guān)鍵字則初步判定該文件為惡意文件或惡意email,當(dāng)然,不可能一次性就能夠列出所有的關(guān)鍵字,況且關(guān)鍵字是會(huì)變化的,在此時(shí)大部分的分析系統(tǒng)中包含了此關(guān)鍵字,導(dǎo)致某惡意email發(fā)送者發(fā)送的郵件被接收方認(rèn)定為惡意email。此時(shí)惡意email發(fā)送放就會(huì)想方設(shè)法地變換關(guān)鍵字,設(shè)法將該郵件順利地到達(dá)接收方。為了增強(qiáng)系統(tǒng)在此方面的可擴(kuò)展性,本文提出了一種將關(guān)鍵字存儲(chǔ)與數(shù)據(jù)庫(kù)的方法,用戶可以隨時(shí)增加關(guān)鍵字,當(dāng)然這些關(guān)鍵字不是絕對(duì)的,只是用戶認(rèn)為的含有這些關(guān)鍵字的emai

47、l為惡意email。通過(guò)上述方法來(lái)查找惡意email的話可能會(huì)出現(xiàn)對(duì)于接收方來(lái)說(shuō)發(fā)過(guò)來(lái)的email是很重要的,所以系統(tǒng)不能在判斷出惡意郵件之后就直接刪除之。若是直接刪除,對(duì)于用戶來(lái)說(shuō)可能是很大的損失。所以我們應(yīng)該把刪除權(quán)交給用戶,我們列出的垃圾/惡意email列表只給用戶做一個(gè)參考,由用戶來(lái)看email的來(lái)源、主題等做出正確的判斷,有用戶決定是否刪除該郵件。惡意郵件分析(掃描)過(guò)程如下:當(dāng)點(diǎn)擊“分析”按鈕時(shí),系統(tǒng)從存儲(chǔ)的所有郵件信息的集合類(lèi)當(dāng)中逐條取出每個(gè)成員,即每封email,再對(duì)每封email進(jìn)行分析。對(duì)每封email進(jìn)行分析過(guò)程如下:從數(shù)據(jù)庫(kù)中逐條取出關(guān)鍵字,將每個(gè)關(guān)鍵字和email的主

48、題及正文進(jìn)行匹配,看在email的主題和正文當(dāng)中是否含有這些關(guān)鍵字,若找到其中一個(gè),則初步認(rèn)定該email為惡意email并立即結(jié)束該email的查找,轉(zhuǎn)入下一封email的查找。直到所有的email都分析完成。在分析過(guò)程中沒(méi)查找到一個(gè)惡意email就將該email的來(lái)源、主題、時(shí)間等信息顯示在相應(yīng)的email列表框控件上。在進(jìn)行分析時(shí),為了讓用戶明確知道現(xiàn)在分析的是哪一封email,在對(duì)話框的最下面會(huì)顯示進(jìn)度,效果如圖4-3所示:圖4-3 分析惡意email效果圖分析部分的代碼實(shí)現(xiàn)如下:/-分析郵件是否為垃圾郵件void ctrashmailprocess:onanysis() / todo

49、: add your control notification handler code here/-初始化相關(guān)變量及控件int trashnum=0;cstring strtrash;trasharray.removeall();m_trashmessagelist.deleteallitems();/-信箱中沒(méi)有郵件if(theapp.messagearray.getsize()=0)afxmessagebox(信箱為空);return;cstring strstate;setdlgitemtext(idc_state2,正在掃描:);/顯示正在掃描for(int i=0;istrsubj

50、ect;/正在掃描的郵件主題setdlgitemtext(idc_state,strstate);/顯示正在掃描的郵件的主題/-從數(shù)據(jù)庫(kù)中選出所有的關(guān)鍵字_recordsetptr m_precordset;m_precordset=access.readdatabase(select * from keyword);cstring strkeywords;m_precordset-movefirst();/-依次檢查郵件的主題和正文中是否含有關(guān)鍵字,若有則為垃圾郵件while(!m_precordset-adoeof)strkeywords=(lpctstr)(_bstr_t)m_preco

51、rdset-getcollect(keyword);if(cmessages *)theapp.messagearray.getat(i)-strsubject.find(strkeywords)!=-1| (cmessages *)theapp.messagearray.getat(i)-strmessagebody.find(strkeywords)!=-1)/-將垃圾郵件顯示在垃圾郵件列表中int nlistitem = m_trashmessagelist.insertitem(trashnum,(cmessages *)theapp.messagearray.getat(i)-str

52、from);m_trashmessagelist.setitem(nlistitem, 1, lvif_text, (cmessages *)theapp.messagearray.getat(i)-strsubject, 0, 0, 0, null);m_trashmessagelist.setitem(nlistitem, 2, lvif_text,(cmessages *)theapp.messagearray.getat(i)-strtime, 0, 0, 0, null);trashnum=trashnum+1;/垃圾郵件數(shù)/-將垃圾郵件的索引號(hào)保存以便以后刪除或忽略strtrash.format(%d,(cmessages *)theapp.messagearray.getat(i)-index);trasharray.add(strtrash);break;/找到第一個(gè)關(guān)鍵字就退出該email的查找,直接進(jìn)入下一個(gè)email的查找m_precordset-movenext();sleep(80);/-顯示掃描完成的信息setdlgitemtext(idc_state2,掃描完畢!);cstring info;/掃描信息info.format(共檢測(cè)到%d封惡意郵件,trashnum);setdlgitemtext(idc_state,info);在查找

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論