專利名稱:基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及互聯(lián)網(wǎng)領(lǐng)域的電子郵件的存儲(chǔ)和收發(fā)方法。
背景技術(shù):
在目前高速發(fā)展的信息化社會(huì)中,電子郵件方式已經(jīng)取代傳統(tǒng)郵件方式在人與人之間進(jìn)行信息傳遞的統(tǒng)治地位。郵件系統(tǒng)分為客戶端與服務(wù)端,訪問方式有使用郵件收發(fā)軟件如OutLook Express、FoxMail等進(jìn)行郵件收發(fā)的C-S方式和使用Web頁面進(jìn)行郵件收發(fā)的B-S方式。發(fā)送郵件原理一般是客戶端通過Socket連結(jié)服務(wù)器的25端口,通過簡(jiǎn)單郵件傳輸協(xié)議SMTP(Simple Message Transfer Protocol)與服務(wù)器溝通并且發(fā)送郵件。接收郵件原理一般是客戶端通過Socket連結(jié)服務(wù)器的110端口,通過郵局協(xié)議POP3(Post Office Protocol)與服務(wù)器溝通,向服務(wù)器通報(bào)身份后從服務(wù)器接收相應(yīng)的郵件。
現(xiàn)有的使用較多的郵件服務(wù)器有美國(guó)微軟公司生產(chǎn)的ExchangeServer、美國(guó)Lotus公司生產(chǎn)的Lotus Notes。該類服務(wù)器都是通過C-S方式訪問,有穩(wěn)定、高效、安全、功能強(qiáng)大等特點(diǎn);在服務(wù)器端郵件的存儲(chǔ)方式都是采用文件方式,盡管在讀些郵件時(shí)效率較高,但是為查找和檢索都帶來不便。然而在實(shí)施校園網(wǎng)等企業(yè)應(yīng)用上也需要郵件服務(wù)器系統(tǒng),如果采用Exchange Server服務(wù)系統(tǒng)或Lotus Notes服務(wù)系統(tǒng)采用文件形式存儲(chǔ)郵件,將有許多的不利因素,也無很大的必要。首先是價(jià)格因素;再者是訪問方式,因?yàn)樾@網(wǎng)中一般是用Web頁面收發(fā)郵件,并不需要直接用Socket連結(jié)服務(wù)器;還有就是系統(tǒng)的兼容性問題,郵件服務(wù)器要與管理平臺(tái)共享數(shù)據(jù);最后就是數(shù)據(jù)的透明度問題,很多郵件服務(wù)器的郵件存儲(chǔ)格式是不公開的,這會(huì)對(duì)一些操作帶來很多麻煩。以上都決定了需要開發(fā)一種獨(dú)特的郵件服務(wù)器來滿足以上需求。
發(fā)明內(nèi)容
本發(fā)明針對(duì)在實(shí)施校園網(wǎng)等企業(yè)應(yīng)用上利用現(xiàn)有的電子郵件收發(fā)系統(tǒng)存在的不利因素而提出在服務(wù)器端使用不同的表來存儲(chǔ)不同狀態(tài)的郵件,服務(wù)器端既提供標(biāo)準(zhǔn)的郵件收發(fā)服務(wù)(接收郵件采用POP3,發(fā)送郵件采用SMTP),也提供直接操作數(shù)據(jù)庫的方式來收發(fā)郵件。
一種基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,服務(wù)器采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ);客戶端與服務(wù)器之間進(jìn)行郵件收發(fā)時(shí),郵件信息要經(jīng)過郵件收發(fā)服務(wù)處理和模式轉(zhuǎn)換,模式轉(zhuǎn)換方法步驟如下利用各種服務(wù)組件對(duì)外提供啟動(dòng)和停止兩個(gè)方法,啟動(dòng)方法內(nèi)讀取系統(tǒng)配置信息并啟動(dòng)各種對(duì)應(yīng)服務(wù)實(shí)現(xiàn)類;各種服務(wù)實(shí)現(xiàn)類按照配置信息初始化后,進(jìn)行各自對(duì)應(yīng)的后續(xù)處理操作;利用NT服務(wù)程序,調(diào)用各種服務(wù)組件的啟動(dòng)或停止服務(wù)。
上述數(shù)據(jù)庫中存儲(chǔ)有如下數(shù)據(jù)存儲(chǔ)表數(shù)據(jù)表CC_MAIL_USER,用于保存用戶的用戶名、密碼和郵箱尺寸信息;數(shù)據(jù)表CC_MAIL_DROPMAIL,用于存放沒有經(jīng)過分類處理的郵件;數(shù)據(jù)表CC_MAIL_MAILINFO,用于存放郵件添加上用戶信息后對(duì)應(yīng)各個(gè)用戶的郵件;數(shù)據(jù)表CC_MAIL_ROUTEMAIL,用于存放等待轉(zhuǎn)發(fā)服務(wù)進(jìn)行向外轉(zhuǎn)發(fā)的郵件;數(shù)據(jù)表CC_MAIL_BADMAIL,用于存放垃圾郵件,對(duì)收件人與用戶名無法匹配或者向外轉(zhuǎn)發(fā)失敗的郵件將轉(zhuǎn)存入此表,等待管理員來檢索或者自動(dòng)刪除;數(shù)據(jù)表CC_MAIL_MAILLOG,用于存放服務(wù)器的操作日志。
上述所述的服務(wù)組件包括簡(jiǎn)單郵件傳輸協(xié)議SMTP服務(wù)組件、郵局協(xié)議POP3服務(wù)組件、MailRoute服務(wù)組件、MailCheck服務(wù)組件、MailsDispatch服務(wù)組件和MailsClean服務(wù)組件,其中簡(jiǎn)單郵件傳輸協(xié)議SMTP服務(wù)組件、郵局協(xié)議POP3服務(wù)組件所對(duì)應(yīng)的服務(wù)實(shí)現(xiàn)類在按照配置信息初始化后進(jìn)行的后續(xù)處理操作是根據(jù)客戶的連接情況生成多個(gè)任務(wù)處理類實(shí)例,每個(gè)任務(wù)處理類在各自的線程內(nèi)完成與客戶的交易;MailRoute服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)連接路由服務(wù)器轉(zhuǎn)發(fā)外部的郵件;MailCheck服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)連接路由服務(wù)器接收由外部發(fā)來的郵件;MailsDispatch服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)處理郵件的轉(zhuǎn)發(fā)和分發(fā)業(yè)務(wù);MailsClean服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)處理垃圾郵件和日志。
其中發(fā)送郵件的簡(jiǎn)單郵件傳輸協(xié)議SMTP的與客戶交易過程是客戶端首先進(jìn)行登陸;系統(tǒng)判斷是否允許客戶端匿名登陸,如果允許則客戶可以直接成功登陸;如果不允許則客戶要進(jìn)行注冊(cè)、輸入有效用戶名和密碼后才可以成功登陸;進(jìn)行交易處理過程,主要是服務(wù)器和客戶端之間進(jìn)行分析指令和回復(fù)指令的交互式操作。
其中接收郵件的郵局協(xié)議POP3的與客戶交易過程是客戶端首先進(jìn)行登陸;有兩種登陸方式可供選擇基本身份驗(yàn)證方式和NTLM身份認(rèn)證方式;進(jìn)行交易處理過程,主要是服務(wù)器和客戶端之間進(jìn)行分析指令和回復(fù)指令的交互式操作。
其中MailRoute向外部轉(zhuǎn)發(fā)郵件的過程是系統(tǒng)生成待轉(zhuǎn)發(fā)的郵件列表后連接郵件路由服務(wù)器;系統(tǒng)判斷是否允許客戶端匿名登陸,如果允許則客戶可以直接成功登陸;如果不允許則客戶要進(jìn)行注冊(cè)、輸入有效用戶名和密碼后才可以成功登陸;系統(tǒng)發(fā)送郵件至路由服務(wù)器;
系統(tǒng)判斷郵件是否發(fā)送成功,如果成功則在數(shù)據(jù)庫存放待轉(zhuǎn)發(fā)郵件的數(shù)據(jù)表中刪除待轉(zhuǎn)發(fā)的郵件;如果失敗則將郵件轉(zhuǎn)移到數(shù)據(jù)庫中存放垃圾郵件的數(shù)據(jù)表中。
其中MailCheck接收外部發(fā)來郵件的過程是系統(tǒng)查詢并獲得接收郵件人的信息后,系統(tǒng)連接郵件接收服務(wù)器;服務(wù)器進(jìn)行登陸;服務(wù)器接收郵件并放入存放對(duì)應(yīng)于各個(gè)用戶的郵件數(shù)據(jù)表中。
上述的客戶端通過TCP/IP層訪問郵件收發(fā)服務(wù)。
一種基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,服務(wù)器采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ);客戶端直接操作服務(wù)器中存儲(chǔ)郵件信息的數(shù)據(jù)庫進(jìn)行郵件收發(fā),需要進(jìn)行郵件的合成與解析操作,合成郵件的方法為初始化郵件輸入的各部分信息;綜合郵件的各部分輸入信息,生成郵件總文本并以成員變量的形式保存在內(nèi)存中;發(fā)送郵件總文本;解析郵件的方法為首先對(duì)接收的郵件文本進(jìn)行初始化操作;解析郵件文本,并把解析后的結(jié)果以成員變量的形式保存在內(nèi)存中;取出需要的部分郵件解析信息。
其中數(shù)據(jù)庫中存儲(chǔ)有如下數(shù)據(jù)存儲(chǔ)表
數(shù)據(jù)表CC_MAIL_USER,用于保存用戶的用戶名、密碼和郵箱尺寸信息;數(shù)據(jù)表CC_MAIL_DROPMAIL,用于存放沒有經(jīng)過分類處理的郵件;數(shù)據(jù)表CC_MAIL_MAILINFO,用于存放郵件添加上用戶信息后對(duì)應(yīng)各個(gè)用戶的郵件;數(shù)據(jù)表CC_MAIL_ROUTEMAIL,用于存放等待轉(zhuǎn)發(fā)服務(wù)進(jìn)行向外轉(zhuǎn)發(fā)的郵件;數(shù)據(jù)表CC_MAIL_BADMAIL,用于存放垃圾郵件,對(duì)收件人與用戶名無法匹配或者向外轉(zhuǎn)發(fā)失敗的郵件將轉(zhuǎn)存入此表,等待管理員來檢索或者自動(dòng)刪除;數(shù)據(jù)表CC_MAIL_MAILLOG,用于存放服務(wù)器的操作日志。
上述合成郵件的初始化過程分為兩種根據(jù)發(fā)件人、收件人、主題、發(fā)件時(shí)間、郵件主體,來創(chuàng)建郵件文本BuildMail;根據(jù)發(fā)件人、收件人、主題、發(fā)件時(shí)間、郵件主體和附件所在目錄路徑,來創(chuàng)建郵件文本BuildMailWithAttach。
上述解析郵件的初始化過程分為五種解析所有的郵件信息InitMailContent;解析郵件中除郵件附件和郵件主體中的圖片以外的信息InitMailGeneralContent;解析郵件中的發(fā)件人、收件人、標(biāo)題、發(fā)件時(shí)間InitMailHeader;解析郵件中具體哪一個(gè)郵件附件文件InitAttachFile;
解析郵件主體中的具體哪一個(gè)圖片文件InitRelatedFile。
其中在合成郵件方法中,綜合郵件的各部分輸入信息,生成郵件總文本并以成員變量的形式保存在內(nèi)存中時(shí),能夠根據(jù)需要添加其它部分的郵件信息;在解析郵件方法中對(duì)接收的郵件文本進(jìn)行初始化操作的過程中不保存郵件文本到內(nèi)存中。
上述客戶端發(fā)送郵件的過程為使用合成郵件的方法把用戶輸入的郵件接收人信息、郵件標(biāo)題、正文、郵件附件編碼為一個(gè)整體的文本;使用數(shù)據(jù)庫的訪問方式打開數(shù)據(jù)表CC_MAIL_DROPMAIL,將編碼好的整體文本寫入該表,形成一條記錄;等待MailDispatch服務(wù)組件對(duì)形成的記錄進(jìn)行分檢操作,需要轉(zhuǎn)發(fā)的記錄存入數(shù)據(jù)表CC_MAIL_ROUTEMAIL,需要發(fā)送的記錄存入數(shù)據(jù)表CC_MAIL_MAILINFO。
客戶端接收郵件的過程為根據(jù)接收用戶的用戶名,在數(shù)據(jù)表CC_MAIL_USER中查找到在服務(wù)器中對(duì)應(yīng)該用戶名的編號(hào);打開數(shù)據(jù)表CC_MAIL_MAILINFO,使用數(shù)據(jù)庫查詢語句檢索出用戶信件記錄集;鎖定用戶信件記錄集中的某條記錄,讀出編過碼的文本,使用郵件解析方法解析郵件文本,獲得郵件的標(biāo)題、正文和附件內(nèi)容信息。
其中所述的客戶端通過數(shù)據(jù)庫應(yīng)用層訪問服務(wù)器中的數(shù)據(jù)庫進(jìn)行郵件的收發(fā)。
采用上述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法后,更有利于系統(tǒng)的查找和檢索,同時(shí)使用戶在收發(fā)郵件時(shí)操作更加簡(jiǎn)便。采用本方法后也使得郵件服務(wù)系統(tǒng)結(jié)構(gòu)更加簡(jiǎn)單、運(yùn)行穩(wěn)定、可維護(hù)性強(qiáng)。
圖1是本發(fā)明所述方法實(shí)現(xiàn)的整體框圖;圖2是用數(shù)據(jù)庫方式收發(fā)郵件的客戶端解析郵件的流程圖;圖3是用數(shù)據(jù)庫方式收發(fā)郵件的客戶端合成郵件的流程圖;圖4是用數(shù)據(jù)庫方式收發(fā)郵件的客戶端發(fā)送郵件的流程圖;圖5是用數(shù)據(jù)庫方式收發(fā)郵件的客戶端接收郵件的流程圖;圖6是模式轉(zhuǎn)換時(shí)SMTP服務(wù)調(diào)用的邏輯層次;圖7是模式轉(zhuǎn)換時(shí)完成SMTP的交易過程;圖8是模式轉(zhuǎn)換時(shí)POP3服務(wù)調(diào)用的邏輯層次;圖9是模式轉(zhuǎn)換時(shí)完成POP3的交易過程;圖10是模式轉(zhuǎn)換時(shí)MailRoute服務(wù)調(diào)用的邏輯層次;圖11是模式轉(zhuǎn)換時(shí)完成MailRoute的交易過程;圖12是模式轉(zhuǎn)換時(shí)MailCheck服務(wù)調(diào)用的邏輯層次;圖13是模式轉(zhuǎn)換時(shí)完成MailCheck的交易過程。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式
做進(jìn)一步的詳細(xì)說明。
圖1中,是實(shí)現(xiàn)本發(fā)明所述方法的郵件收發(fā)系統(tǒng)框圖,其中客戶端包括用傳統(tǒng)模式收發(fā)郵件的客戶端2和用數(shù)據(jù)庫方式收發(fā)郵件的客戶端1,系統(tǒng)的服務(wù)器為采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3。用數(shù)據(jù)庫方式收發(fā)郵件的客戶端1通過數(shù)據(jù)庫應(yīng)用層直接訪問采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3進(jìn)行郵件的收發(fā)操作,使用這種方式進(jìn)行郵件的收發(fā)要單獨(dú)進(jìn)行郵件的解析與合成操作;用傳統(tǒng)模式收發(fā)郵件的客戶端2可以兼容現(xiàn)有的郵件收發(fā)方法,如可以使用Outlook、Foxmail軟件進(jìn)行郵件的收發(fā),此時(shí)用傳統(tǒng)模式收發(fā)郵件的客戶端2通過TCP/IP層協(xié)議經(jīng)過郵件收發(fā)服務(wù)4作用后,問接訪問采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3進(jìn)行郵件的收發(fā)操作,在采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3和郵件收發(fā)服務(wù)4之間要進(jìn)行模式轉(zhuǎn)換操作,從而用傳統(tǒng)模式收發(fā)郵件的客戶端2能夠訪問采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3進(jìn)行郵件的收發(fā)工作。
其中服務(wù)器端的郵件信息以數(shù)據(jù)庫的方式存儲(chǔ),在數(shù)據(jù)庫中要建立不同的表來存儲(chǔ)不同狀態(tài)時(shí)的郵件,所建立的數(shù)據(jù)表包括1、數(shù)據(jù)表CC_MAIL_USER用來控制用戶,保存有用戶的用戶名、密碼和郵箱尺寸等信息。
2、數(shù)據(jù)表CC_MAIL_DROPMAIL用來存放未經(jīng)分類處理的郵件,郵件經(jīng)過客戶發(fā)送后直接進(jìn)入此表。此表中的郵件未對(duì)接收者作匹配,也沒有進(jìn)行外部郵件的轉(zhuǎn)發(fā),等待分發(fā)服務(wù)來進(jìn)行分類操作。
3、數(shù)據(jù)表CC_MAIL_MAILINFO用來存放已經(jīng)對(duì)應(yīng)各個(gè)用戶的郵件,郵件經(jīng)過分發(fā)服務(wù)后,進(jìn)行匹配郵件服務(wù)器域名和用戶名,將CC_MAIL_DROPMAIL中的郵件添加上用戶信息后放入此表。
4、數(shù)據(jù)表CC_MAIL_ROUTEMAIL用來存放等待向外轉(zhuǎn)發(fā)的郵件,郵件經(jīng)過分發(fā)服務(wù)后,如果郵件服務(wù)器域名和用戶名不能匹配,則放入此表等待轉(zhuǎn)發(fā)服務(wù)來向外轉(zhuǎn)發(fā)。
5、數(shù)據(jù)表CC_MAIL_BADMAIL用來存放垃圾郵件,收信人與用戶名無法匹配或轉(zhuǎn)發(fā)失敗的郵件將轉(zhuǎn)入此表,等待管理員來檢索或者自動(dòng)刪除。
6、數(shù)據(jù)表CC_MAIL_MAILLOG用來存放服務(wù)器的操作日志,所有的客戶操作、客戶地址、服務(wù)器自身的操作將全部記錄于此表。
上述數(shù)據(jù)存儲(chǔ)表的格式可以完全自行設(shè)計(jì),這樣有利于與其它軟件產(chǎn)品的兼容和后續(xù)的擴(kuò)展開發(fā)。
用數(shù)據(jù)庫方式收發(fā)郵件的客戶端1在直接訪問采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3進(jìn)行郵件的收發(fā)操作時(shí)要進(jìn)行郵件的解析與合成操作,其解析郵件過程的流程圖為圖2,在步驟10中,系統(tǒng)首先對(duì)接收的郵件文本進(jìn)行初始化,根據(jù)具體需要的解析信息的選擇,初始化過程可以分為五種1)InitMailContent解析所有郵件信息;2)InitMailGeneralContent解析郵件中除郵件附件以及郵件主體中的圖片等以外的信息;3)InitMailHeader解析郵件中發(fā)件人、收件人、標(biāo)題、發(fā)件時(shí)間;4)InitAttachFile解析郵件中的具體哪一個(gè)郵件附件文件;5)InitRelatedFile解析郵件主體中的具體哪一個(gè)圖片或PPT(PowerPoint幻燈)、SWF(不可編輯Flash)等文件;
初始化過程中并不保存郵件文本到內(nèi)存,以節(jié)省大量的內(nèi)存空間。
在步驟11中,系統(tǒng)解析郵件的文本,并把解析后的結(jié)果以成員變量的形式保存到內(nèi)存中;步驟12中,用戶根據(jù)具體需要取出部分郵件的解析信息則完成郵件的解析工作。
圖3是合成郵件的流程圖,步驟20中系統(tǒng)初始化郵件輸入的各部分信息,如發(fā)件人、標(biāo)題等,其初始化分為兩種情況1)BuildMail根據(jù)發(fā)件人、收件人、主題、發(fā)件時(shí)間、郵件主體,來創(chuàng)建郵件文本,若要添加附件,則還需調(diào)用插入附件AddAttach方法;2)BuildMailWithAttach根據(jù)發(fā)件人、收件人、主題、發(fā)件時(shí)間、郵件主體和附件所在目錄路徑(此目錄下的文件都將被作為郵件的附件),來創(chuàng)建郵件文本。
步驟21中系統(tǒng)綜合郵件的各部分信息,生成郵件總文本并以成員變量的形式保存在內(nèi)存中,此時(shí)可根據(jù)需要再添加其它部分的郵件信息,如一些附加的附件信息等。步驟22中可以對(duì)合成的郵件總文本進(jìn)行發(fā)送。
其中用數(shù)據(jù)庫方式收發(fā)郵件的客戶端1發(fā)送郵件的過程如圖4所示,步驟23中用戶輸入接收郵件人信息、郵件的主題、郵件的正文以及附件的路徑信息等,步驟24使用上述所述的郵件合成方法把輸入的接收郵件人信息、郵件的主題、郵件的正文以及附件的路徑信息等編碼合成一個(gè)整體的文檔形式;在步驟25中用具體的數(shù)據(jù)庫訪問方式打開數(shù)據(jù)表CC_MAIL_DROPMAIL,把編碼合成的整體文檔寫入此表,形成一條記錄;步驟26中形成的記錄等待MailsDispatch服務(wù)進(jìn)行分檢操作,需要向外轉(zhuǎn)發(fā)的記錄存入數(shù)據(jù)表CC_MAIL_ROUTEMAIL,需要發(fā)送的記錄存入數(shù)據(jù)表CC_MAIL_MAILINFO。
用數(shù)據(jù)庫方式收發(fā)郵件的客戶端1接收郵件的過程如圖5所示,步驟27中根據(jù)接收用戶的用戶名,在數(shù)據(jù)表CC_MAIL_USER中查找到在郵件服務(wù)器中對(duì)應(yīng)該用戶的編號(hào),然后在步驟28中打開數(shù)據(jù)表CC_MAIL_MAILINFO,使用數(shù)據(jù)庫查詢語句查找出用戶信件的記錄集,每個(gè)用戶的信件都有一個(gè)記錄集,步驟29中根據(jù)具體情況對(duì)信件記錄集中的某條記錄進(jìn)行鎖定,讀出整個(gè)郵件的編碼文檔;在步驟30中使用上述所述的郵件解析方法對(duì)讀出的整個(gè)郵件的編碼文檔進(jìn)行解析,得到郵件的發(fā)件人信息、主題、正文以及附件等信息。
用傳統(tǒng)模式收發(fā)郵件的客戶端2間接訪問采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3時(shí),在采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ)的服務(wù)器3和郵件收發(fā)服務(wù)4之間必須經(jīng)過相應(yīng)的模式轉(zhuǎn)換,其轉(zhuǎn)換的方法步驟如下發(fā)送郵件采用的模式轉(zhuǎn)換方法如圖6所示,步驟31中,利用NT服務(wù)程序調(diào)用SMTP服務(wù)組件啟動(dòng)SMTP服務(wù)CCSMTPService.exe,在步驟32中SMTP服務(wù)組件CCMailServer.SMTPService在啟動(dòng)方法內(nèi)讀取系統(tǒng)配置信息并啟動(dòng)SMTP服務(wù)實(shí)現(xiàn)類;步驟33中SMTP服務(wù)實(shí)現(xiàn)類CHQSMTPService按照配置信息初始化后,根據(jù)客戶的連接情況生成多個(gè)任務(wù)處理類CHQSMTPServiceTask實(shí)例;步驟34中每個(gè)任務(wù)處理類CHQSMTPServiceTask在各自的線程內(nèi)完成與客戶的交易,其中任務(wù)處理類可以根據(jù)客戶數(shù)創(chuàng)建。
任務(wù)處理類CHQSMTPServiceTask在各自的線程內(nèi)與客戶的交易過程如圖7所示,首先執(zhí)行步驟40通過任務(wù)入口進(jìn)行登陸,步驟41系統(tǒng)判斷用戶可否匿名登陸,如果可以則轉(zhuǎn)至步驟44執(zhí)行HELO指令,直接進(jìn)入SMTP系統(tǒng)到步驟45中開始進(jìn)行交易;如果在步驟41中用戶不可以匿名登陸,則要在步驟42中輸入合法用戶名,在步驟43中輸入正確密碼后才可以成功登陸,再到步驟45中進(jìn)行交易,交易的主要過程是客戶端和服務(wù)器端之間進(jìn)行指令的分析和回復(fù)交互式操作,其中操作的指令包括MAIL(郵件收發(fā)指令)、RCPT(獲得用戶的列表,用S表示向服務(wù)器發(fā)送的命令,用R表示服務(wù)器返回的信息)、VRFY(驗(yàn)證是否有用戶存在于服務(wù)器上)、EXPN(驗(yàn)證是否有郵件列表存在)、HELP、RSET(取消指令,重新開始)、NOOP(空操作指令)、QUIT(退出指令)。
接收郵件采用的轉(zhuǎn)換方法如圖8所示,步驟50中,利用NT服務(wù)程序調(diào)用POP3服務(wù)組件啟動(dòng)POP3服務(wù)CCPOP3Service.exe,在步驟51中POP3服務(wù)組件CCMailServer.POP3Service在啟動(dòng)方法內(nèi)讀取系統(tǒng)配置信息并啟動(dòng)POP3服務(wù)實(shí)現(xiàn)類;步驟52中POP3服務(wù)實(shí)現(xiàn)類CHQPOP3Service按照配置信息初始化后,根據(jù)客戶的連接情況生成多個(gè)任務(wù)處理類CHQPOP3ServiceTask實(shí)例;步驟53中每個(gè)任務(wù)處理類CHQPOP3ServiceTask在各自的線程內(nèi)完成與客戶的交易,其中任務(wù)處理類可以根據(jù)客戶數(shù)創(chuàng)建。
任務(wù)處理類CHQPOP3ServiceTask在各自的線程內(nèi)與客戶的交易過程如圖9所示,在步驟60中用戶首先通過任務(wù)入口進(jìn)行系統(tǒng)的登陸;其中登陸的方式有兩種,一種是基本身份驗(yàn)證方式,用戶需在步驟61中輸入賬戶,在步驟62中輸入自己的口令才能成功登陸,另一種認(rèn)證方式是NTLM身份認(rèn)證,需要進(jìn)行步驟63的鑒權(quán)和步驟64的傳送用戶名和密碼給NTLM的過程才能成功登陸到POP3系統(tǒng),開始在步驟65中進(jìn)行交易,其交易的主要過程是客戶端和服務(wù)器端之間的指令分析和回復(fù)的交互式操作過程,其中包括指令QUIT(刪除標(biāo)志郵件并退出)、NOOP(控操作指令)、STAT(標(biāo)識(shí)郵件狀態(tài))、LIST(郵件列表序號(hào)選擇)、RETR(收取郵件指令)、UIDL(返回郵件標(biāo)識(shí)符)、DELE(刪除郵件指令)、REST(取消指令,重新開始指令)的分析。
郵件向外轉(zhuǎn)發(fā)采用的轉(zhuǎn)換方法如圖10所示,步驟70中,利用NT服務(wù)程序調(diào)用MailRout服務(wù)組件啟動(dòng)MailRoute服務(wù)CCMailManageService.exe,在步驟71中MailRoute服務(wù)組件CCMailServer.MailRouteService在啟動(dòng)方法內(nèi)讀取系統(tǒng)配置信息并啟動(dòng)MailRoute服務(wù)實(shí)現(xiàn)類;步驟72中MailRoute服務(wù)實(shí)現(xiàn)類CHQMailRouteService按照配置信息初始化后,開始定時(shí)連接路由服務(wù)器向外轉(zhuǎn)發(fā)郵件。
其中向外轉(zhuǎn)發(fā)郵件的流程圖如圖11所示,首先在步驟80中,服務(wù)器將準(zhǔn)備向外轉(zhuǎn)發(fā)的郵件進(jìn)行列表,然后在步驟81中系統(tǒng)連接至郵件路由服務(wù)器上,步驟82系統(tǒng)判斷用戶是否可以匿名登陸,如果可以則直接登陸成功進(jìn)入系統(tǒng),進(jìn)行下面的操作;如果不可以則用戶要進(jìn)行在步驟83中輸入正確的用戶名,步驟84中鍵入正確的口令才可以成功登陸,然后在步驟85中系統(tǒng)把需要向外轉(zhuǎn)發(fā)的郵件發(fā)送至路由服務(wù)器上,步驟86中系統(tǒng)會(huì)判斷郵件的發(fā)送是否成功,如果成功則轉(zhuǎn)至步驟87,系統(tǒng)自動(dòng)在存放等待向外轉(zhuǎn)發(fā)郵件的數(shù)據(jù)表中刪除已經(jīng)轉(zhuǎn)發(fā)完成的郵件,至此郵件的轉(zhuǎn)發(fā)過程完成,如果步驟86中系統(tǒng)判斷出郵件轉(zhuǎn)發(fā)失敗。則到步驟88中把向外轉(zhuǎn)發(fā)的郵件轉(zhuǎn)移至存放垃圾郵件的數(shù)據(jù)表中等待管理員來檢索或系統(tǒng)自動(dòng)刪除。
接收由外部轉(zhuǎn)發(fā)來的郵件采用方法如圖12所示,步驟90中,利用NT服務(wù)程序調(diào)用MailCheck服務(wù)組件啟動(dòng)MailCheck服務(wù)CCMailCheckService.exe,在步驟91中MailCheck服務(wù)組件CCMailServer.MailCheckService在啟動(dòng)方法內(nèi)讀取系統(tǒng)配置信息并啟動(dòng)MailCheck服務(wù)實(shí)現(xiàn)類;步驟92中MailCheck服務(wù)實(shí)現(xiàn)類CHQMailCheckService按照配置信息初始化后,開始定時(shí)連接路由服務(wù)器接收服務(wù)器上的由外部發(fā)來的郵件。
其中服務(wù)器接收由外部轉(zhuǎn)發(fā)來的郵件的流程圖如圖13所示,步驟100中系統(tǒng)查詢待接收郵件人的信息后轉(zhuǎn)到步驟101中,將此郵件服務(wù)器連接到郵件接收服務(wù)器上,到步驟102中進(jìn)行登陸后,在步驟103從郵件接收服務(wù)器接收郵件后放入存放對(duì)應(yīng)各個(gè)用戶的郵件數(shù)據(jù)表中等待后續(xù)郵件的發(fā)送過程,至此服務(wù)器接收從外部服務(wù)器轉(zhuǎn)發(fā)來的郵件的交易過程結(jié)束。
權(quán)利要求
1.一種基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,服務(wù)器采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ);客戶端與服務(wù)器之間進(jìn)行郵件收發(fā)時(shí),郵件信息要經(jīng)過郵件收發(fā)服務(wù)處理和模式轉(zhuǎn)換,模式轉(zhuǎn)換方法步驟如下利用各種服務(wù)組件對(duì)外提供啟動(dòng)和停止兩個(gè)方法,啟動(dòng)方法內(nèi)讀取系統(tǒng)配置信息并啟動(dòng)各種對(duì)應(yīng)服務(wù)實(shí)現(xiàn)類;各種服務(wù)實(shí)現(xiàn)類按照配置信息初始化后,進(jìn)行各自對(duì)應(yīng)的后續(xù)處理操作;利用NT服務(wù)程序,調(diào)用各種服務(wù)組件的啟動(dòng)或停止服務(wù)。
2.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,數(shù)據(jù)庫中存儲(chǔ)有如下數(shù)據(jù)存儲(chǔ)表數(shù)據(jù)表CC_MAIL_USER,用于保存用戶的用戶名、密碼和郵箱尺寸信息;數(shù)據(jù)表CC_MAIL_DROPMAIL,用于存放沒有經(jīng)過分類處理的郵件;數(shù)據(jù)表CC_MAIL_MAILINFO,用于存放郵件添加上用戶信息后對(duì)應(yīng)各個(gè)用戶的郵件;數(shù)據(jù)表CC_MAIL_ROUTEMAIL,用于存放等待轉(zhuǎn)發(fā)服務(wù)進(jìn)行向外轉(zhuǎn)發(fā)的郵件;數(shù)據(jù)表CC_MAIL_BADMAIL,用于存放垃圾郵件,對(duì)收件人與用戶名無法匹配或者向外轉(zhuǎn)發(fā)失敗的郵件將轉(zhuǎn)存入此表,等待管理員來檢索或者自動(dòng)刪除;數(shù)據(jù)表CC_MAIL_MAILLOG,用于存放服務(wù)器的操作日志。
3.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,所述的服務(wù)組件包括簡(jiǎn)單郵件傳輸協(xié)議SMTP服務(wù)組件、郵局協(xié)議POP3服務(wù)組件、MailRoute服務(wù)組件、MailCheck服務(wù)組件、MailsDispatch服務(wù)組件和MailsClean服務(wù)組件,其中簡(jiǎn)單郵件傳輸協(xié)議SMTP服務(wù)組件、郵局協(xié)議POP3服務(wù)組件所對(duì)應(yīng)的服務(wù)實(shí)現(xiàn)類在按照配置信息初始化后進(jìn)行的后續(xù)處理操作是根據(jù)客戶的連接情況生成多個(gè)任務(wù)處理類實(shí)例,每個(gè)任務(wù)處理類在各自的線程內(nèi)完成與客戶的交易;MailRoute服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)連接路由服務(wù)器轉(zhuǎn)發(fā)外部的郵件;MailCheck服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)連接路由服務(wù)器接收由外部發(fā)來的郵件;MailsDispatch服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)處理郵件的轉(zhuǎn)發(fā)和分發(fā)業(yè)務(wù);MailsClean服務(wù)組件按照配置信息初始化后進(jìn)行的后續(xù)處理操作是開始定時(shí)處理垃圾郵件和日志。
4.根據(jù)權(quán)利要求3所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,發(fā)送郵件的簡(jiǎn)單郵件傳輸協(xié)議SMTP的與客戶交易過程是客戶端首先進(jìn)行登陸;系統(tǒng)判斷是否允許客戶端匿名登陸,如果允許則客戶可以直接成功登陸;如果不允許則客戶要進(jìn)行注冊(cè)、輸入有效用戶名和密碼后才可以成功登陸;進(jìn)行交易處理過程,主要是服務(wù)器和客戶端之間進(jìn)行分析指令和回復(fù)指令的交互式操作。
5.根據(jù)權(quán)利要求3所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,接收郵件的郵局協(xié)議POP3的與客戶交易過程是客戶端首先進(jìn)行登陸;有兩種登陸方式可供選擇基本身份驗(yàn)證方式和NTLM身份認(rèn)證方式;進(jìn)行交易處理過程,主要是服務(wù)器和客戶端之間進(jìn)行分析指令和回復(fù)指令的交互式操作。
6.根據(jù)權(quán)利要求3所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,MailRoute向外部轉(zhuǎn)發(fā)郵件的過程是系統(tǒng)生成待轉(zhuǎn)發(fā)的郵件列表后連接郵件路由服務(wù)器;系統(tǒng)判斷是否允許客戶端匿名登陸,如果允許則客戶可以直接成功登陸;如果不允許則客戶要進(jìn)行注冊(cè)、輸入有效用戶名和密碼后才可以成功登陸;系統(tǒng)發(fā)送郵件至路由服務(wù)器;系統(tǒng)判斷郵件是否發(fā)送成功,如果成功則在數(shù)據(jù)庫存放待轉(zhuǎn)發(fā)郵件的數(shù)據(jù)表中刪除待轉(zhuǎn)發(fā)的郵件;如果失敗則將郵件轉(zhuǎn)移到數(shù)據(jù)庫中存放垃圾郵件的數(shù)據(jù)表中。
7.根據(jù)權(quán)利要求3所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,MailCheck接收外部發(fā)來郵件的過程是系統(tǒng)查詢并獲得接收郵件人的信息后,系統(tǒng)連接郵件接收服務(wù)器;服務(wù)器進(jìn)行登陸;服務(wù)器接收郵件并放入存放對(duì)應(yīng)于各個(gè)用戶的郵件數(shù)據(jù)表中。
8.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,客戶端通過TCP/IP層訪問郵件收發(fā)服務(wù)。
9.一種基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,服務(wù)器采用數(shù)據(jù)庫方式對(duì)郵件信息進(jìn)行存儲(chǔ);客戶端直接操作服務(wù)器中存儲(chǔ)郵件信息的數(shù)據(jù)庫進(jìn)行郵件收發(fā),需要進(jìn)行郵件的合成與解析操作,合成郵件的方法為初始化郵件輸入的各部分信息;綜合郵件的各部分輸入信息,生成郵件總文本并以成員變量的形式保存在內(nèi)存中;發(fā)送郵件總文本;解析郵件的方法為首先對(duì)接收的郵件文本進(jìn)行初始化操作;解析郵件文本,并把解析后的結(jié)果以成員變量的形式保存在內(nèi)存中;取出需要的部分郵件解析信息。
10.根據(jù)權(quán)利要求9所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,數(shù)據(jù)庫中存儲(chǔ)有如下數(shù)據(jù)存儲(chǔ)表數(shù)據(jù)表CC_MAIL_USER,用于保存用戶的用戶名、密碼和郵箱尺寸信息;數(shù)據(jù)表CC_MAIL_DROPMAIL,用于存放沒有經(jīng)過分類處理的郵件;數(shù)據(jù)表CC_MAIL_MAILINFO,用于存放郵件添加上用戶信息后對(duì)應(yīng)各個(gè)用戶的郵件;數(shù)據(jù)表CC_MAIL_ROUTEMAIL,用于存放等待轉(zhuǎn)發(fā)服務(wù)進(jìn)行向外轉(zhuǎn)發(fā)的郵件;數(shù)據(jù)表CC_MAIL_BADMAIL,用于存放垃圾郵件,對(duì)收件人與用戶名無法匹配或者向外轉(zhuǎn)發(fā)失敗的郵件將轉(zhuǎn)存入此表,等待管理員來檢索或者自動(dòng)刪除;數(shù)據(jù)表CC_MAIL_MAILLOG,用于存放服務(wù)器的操作日志。
11.根據(jù)權(quán)利要求9所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,合成郵件的初始化過程分為兩種根據(jù)發(fā)件人、收件人、主題、發(fā)件時(shí)間、郵件主體,來創(chuàng)建郵件文本BuildMail;根據(jù)發(fā)件人、收件人、主題、發(fā)件時(shí)間、郵件主體和附件所在目錄路徑,來創(chuàng)建郵件文本BuildMailWithAttach。
12.根據(jù)權(quán)利要求9所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,解析郵件的初始化過程分為五種解析所有的郵件信息InitMailContent;解析郵件中除郵件附件和郵件主體中的圖片以外的信息InitMailGeneralContent;解析郵件中的發(fā)件人、收件人、標(biāo)題、發(fā)件時(shí)間InitMailHeader;解析郵件中具體哪一個(gè)郵件附件文件InitAttachFile;解析郵件主體中的具體哪一個(gè)圖片文件InitRelatedFile。
13.根據(jù)權(quán)利要求9所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,在合成郵件方法中,綜合郵件的各部分輸入信息,生成郵件總文本并以成員變量的形式保存在內(nèi)存中時(shí),能夠根據(jù)需要添加其它部分的郵件信息;在解析郵件方法中對(duì)接收的郵件文本進(jìn)行初始化操作的過程中不保存郵件文本到內(nèi)存中。
14.根據(jù)權(quán)利要求9所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,客戶端發(fā)送郵件的過程為使用合成郵件的方法把用戶輸入的郵件接收人信息、郵件標(biāo)題、正文、郵件附件編碼為一個(gè)整體的文本;使用數(shù)據(jù)庫的訪問方式打開數(shù)據(jù)表CC_MAIL_DROPMAIL,將編碼好的整體文本寫入該表,形成一條記錄;等待MailDispatch服務(wù)組件對(duì)形成的記錄進(jìn)行分檢操作,需要轉(zhuǎn)發(fā)的記錄存入數(shù)據(jù)表CC_MAIL_ROUTEMAIL,需要發(fā)送的記錄存入數(shù)據(jù)表CC_MAIL_MAILINFO。
15.根據(jù)權(quán)利要求9所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,客戶端接收郵件的過程為根據(jù)接收用戶的用戶名,在數(shù)據(jù)表CC_MAIL_USER中查找到在服務(wù)器中對(duì)應(yīng)該用戶名的編號(hào);打開數(shù)據(jù)表CC_MAIL_MAILINFO,使用數(shù)據(jù)庫查詢語句檢索出用戶信件記錄集;鎖定用戶信件記錄集中的某條記錄,讀出編過碼的文本,使用郵件解析方法解析郵件文本,獲得郵件的標(biāo)題、正文和附件內(nèi)容信息。
16.根據(jù)權(quán)利要求9所述的基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其特征在于,客戶端通過數(shù)據(jù)庫應(yīng)用層訪問服務(wù)器中的數(shù)據(jù)庫進(jìn)行郵件的收發(fā)。
全文摘要
本發(fā)明公開了一種基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法,其服務(wù)器采用數(shù)據(jù)庫的形式對(duì)郵件信息進(jìn)行存儲(chǔ),客戶端可以直接操作存儲(chǔ)郵件信息的數(shù)據(jù)庫進(jìn)行郵件的收發(fā),在此過程需要單獨(dú)進(jìn)行郵件的解析與合成操作;客戶端也可以兼容傳統(tǒng)模式通過郵件收發(fā)服務(wù)間接操作存儲(chǔ)郵件信息的數(shù)據(jù)庫進(jìn)行郵件的收發(fā),此過程要進(jìn)行模式轉(zhuǎn)換操作。通過采用基于數(shù)據(jù)庫存儲(chǔ)的郵件收發(fā)方法后,有利于系統(tǒng)的查找和檢索,同時(shí)使用戶在收發(fā)郵件時(shí)操作更加簡(jiǎn)便,同時(shí)也可以使郵件服務(wù)系統(tǒng)結(jié)構(gòu)更加簡(jiǎn)單、運(yùn)行穩(wěn)定、可維護(hù)性強(qiáng)。
文檔編號(hào)G06F17/30GK1517924SQ0310048
公開日2004年8月4日 申請(qǐng)日期2003年1月15日 優(yōu)先權(quán)日2003年1月15日
發(fā)明者霍起, 陳澍, 王海青, 霍 起 申請(qǐng)人:聯(lián)想(北京)有限公司