處理郵件的方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別地涉及一種處理郵件的方法和系統(tǒng)。
【背景技術(shù)】
[0002]在互聯(lián)網(wǎng)相關(guān)的軟件或系統(tǒng)中,經(jīng)常需要在特定的場合進行郵件的推送,郵件管理系統(tǒng)儼然成為大多數(shù)互聯(lián)網(wǎng)應(yīng)用的基礎(chǔ)。在一些應(yīng)用中,郵件管理系統(tǒng)作為一個子模塊為系統(tǒng)提供郵件發(fā)送和管理的支持,而另一些應(yīng)用中,甚至不存在獨立的郵件管理模塊,只是在業(yè)務(wù)需要時,調(diào)用相關(guān)的郵件API進行郵件的推送。
[0003]由于互聯(lián)網(wǎng)生態(tài)本身的復雜性,其相應(yīng)的郵件業(yè)務(wù)也豐富多樣。目前,大多數(shù)應(yīng)用各自維護一套郵件系統(tǒng),只為自身業(yè)務(wù)進行定制的郵件推送及管理,郵件發(fā)送過程與業(yè)務(wù)本身具有非常高的耦合性,其通用性差,難以實現(xiàn)郵件管理模塊在各不同應(yīng)用中的共享和重用。各業(yè)務(wù)系統(tǒng)中的郵件雖然具有很強的定制性,但同時也具有高度的相似性。重復的開發(fā)功能相似的郵件業(yè)務(wù)造成大量的人力、物力的浪費,極大的增加了軟件成本。
[0004]同時,郵件推送邏輯大量分散在各業(yè)務(wù)系統(tǒng)中,給系統(tǒng)的維護造成很大的難度。在許多系統(tǒng)中,郵件并不是業(yè)務(wù)的核心,郵件推送邏輯的高度的耦合性往往造成核心業(yè)務(wù)由于郵件錯誤而失敗。而且郵件的發(fā)送本身耗時長,同步的發(fā)送往往容易導致主業(yè)務(wù)流程的阻塞,異步的發(fā)送又難以確認郵件是否成功送達。隨著網(wǎng)絡(luò)應(yīng)用生態(tài)的日益豐富多樣,郵件本身也愈發(fā)呈現(xiàn)出其業(yè)務(wù)定制特性。
[0005]現(xiàn)有的一種技術(shù)方案中,郵件的發(fā)送主要借助JavaMail提供的API或者以此為基礎(chǔ)進行簡化封裝的第三方API (如Commons Email)等。其具體過程如下:
[0006]1、配置郵件發(fā)送的相關(guān)屬性,包括:是否需要身份認證(mail.smtp.auth)、郵件發(fā)送使用的協(xié)議(mail, transport, protocol-smtp);
[0007]2、設(shè)置遠端的郵件服務(wù)器信息,包括IP及端口信息;
[0008]3、創(chuàng)建郵件會話sess1n ;
[0009]4、根據(jù) sess1n 創(chuàng)建郵件消息 MineMessage ;
[0010]5、設(shè)置主題和郵件正文,郵件正文必須根據(jù)要發(fā)送的內(nèi)容進行不同設(shè)置;如果郵件中包含附件,則要創(chuàng)建多個MimeMultipart對象,承載待發(fā)送的附件;
[0011]6、設(shè)置用以發(fā)送郵件的賬號信息;
[0012]7、創(chuàng)建發(fā)送郵件的Transport實例,建立連接(指定郵件服務(wù)器、端口、發(fā)送賬號、密碼);
[0013]8、發(fā)送郵件(指定消息體,及地址列表);
[0014]9、關(guān)閉會話連接。
[0015]目前多數(shù)業(yè)務(wù)系統(tǒng)中在需要發(fā)送郵件時重復地執(zhí)行以上步驟,或是對以上步驟的簡單封裝,不同的業(yè)務(wù)系統(tǒng)各自重復著相似的處理流程,其郵件發(fā)送過程繁瑣、功能薄弱,而且難以進行統(tǒng)一的管理。
【發(fā)明內(nèi)容】
[0016]有鑒于此,本發(fā)明提供一種處理郵件的方法和系統(tǒng),能夠?qū)Χ鄠€業(yè)務(wù)系統(tǒng)提供統(tǒng)一的郵件服務(wù)。本發(fā)明技術(shù)方案的其他有益效果將結(jié)合【具體實施方式】加以說明。
[0017]為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種處理郵件的方法。
[0018]本發(fā)明的處理郵件的方法包括:接收郵件發(fā)送請求信息,該郵件發(fā)送請求信息中指定了郵件模板、收件地址、以及期望發(fā)送郵件的時間;根據(jù)所述期望發(fā)送郵件的時間生成郵件請求頭信息并且放入郵件發(fā)送隊列,并保存所述郵件發(fā)送請求信息的內(nèi)容;輪詢所述郵件發(fā)送隊列并且在當前時間到達所述期望發(fā)送郵件的時間的情況下,根據(jù)所述郵件模板和所述郵件發(fā)送請求信息以及獲取的業(yè)務(wù)數(shù)據(jù)生成郵件;將所述郵件發(fā)送給電子郵件服務(wù)器,以供該電子郵件服務(wù)器向所述收件地址發(fā)送所述郵件。
[0019]可選地,將所述郵件發(fā)送給電子郵件服務(wù)器的步驟之后,還包括:在接收到表示郵件發(fā)送失敗的提示信息的情況下,設(shè)定郵件的再次發(fā)送時間,并根據(jù)該再次發(fā)送時間生成新的郵件請求頭并且放入所述郵件發(fā)送隊列。
[0020]根據(jù)本發(fā)明的另一方面,提供了一種處理郵件的系統(tǒng)。
[0021]本發(fā)明的處理郵件的系統(tǒng)包括:請求接收單元,用于接收郵件發(fā)送請求信息,該郵件發(fā)送請求信息中指定了郵件模板、收件地址、以及期望發(fā)送郵件的時間;隊列處理單元,用于根據(jù)所述期望發(fā)送郵件的時間生成郵件請求頭信息并且放入郵件發(fā)送隊列;持久化單元,用于將所述郵件發(fā)送請求信息的內(nèi)容保存到持久化存儲裝置;任務(wù)管理單元,用于輪詢所述郵件發(fā)送隊列并且在當前時間到達所述期望發(fā)送郵件的時間的情況下,調(diào)用模板解析單元;模板解析單元,用于根據(jù)所述郵件模板和所述郵件發(fā)送請求信息以及獲取的業(yè)務(wù)數(shù)據(jù)生成郵件;郵件發(fā)送單元,用于將所述郵件發(fā)送給電子郵件服務(wù)器,以供該電子郵件服務(wù)器向所述收件地址發(fā)送所述郵件。
[0022]可選地,所述隊列處理單元為多個;所述請求接收單元還用于以負載均衡的方式選擇一個隊列處理單元,然后將所述郵件發(fā)送請求信息轉(zhuǎn)發(fā)給該隊列處理單元。
[0023]可選地,所述郵件發(fā)送單元還用于將所述電子郵件服務(wù)器返回的發(fā)送結(jié)果信息轉(zhuǎn)發(fā)給所述任務(wù)管理單元;所述任務(wù)管理單元還用于在所述發(fā)送結(jié)果信息表示郵件發(fā)送失敗的情況下,設(shè)定郵件的再次發(fā)送時間,并根據(jù)該再次發(fā)送時間生成新的郵件請求頭并且放入所述郵件發(fā)送隊列。
[0024]根據(jù)本發(fā)明的技術(shù)方案,根據(jù)來自業(yè)務(wù)系統(tǒng)的郵件發(fā)送請求信息,對郵件按發(fā)送隊列發(fā)送到電子郵件服務(wù)器,實現(xiàn)了對多個業(yè)務(wù)系統(tǒng)提供統(tǒng)一的郵件服務(wù)。在網(wǎng)絡(luò)可用的前提下,該實現(xiàn)方式能夠為各分散的業(yè)務(wù)提供集中的郵件請求處理服務(wù),動態(tài)渲染郵件模板,異步進行郵件發(fā)送,保證高效、可靠的郵件發(fā)送,簡化郵件發(fā)送業(yè)務(wù)的開發(fā)及管理。并可根據(jù)業(yè)務(wù)規(guī)模,進行橫向擴展,保證系統(tǒng)能夠高效可靠的提供郵件處理服務(wù)。
【附圖說明】
[0025]附圖用于更好地理解本發(fā)明,不構(gòu)成對本發(fā)明的不當限定。其中:
[0026]圖1是根據(jù)本發(fā)明實施例的處理郵件的系統(tǒng)的基本結(jié)構(gòu)的示意圖;
[0027]圖2是根據(jù)本發(fā)明實施例的處理郵件的方法的主要步驟的示意圖。
【具體實施方式】
[0028]以下結(jié)合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā)明實施例的各種細節(jié)以助于理解,應(yīng)當將它們認為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當認識到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結(jié)構(gòu)的描述。
[0029]在本實施例的技術(shù)方案中,提供一個郵件處理服務(wù),該服務(wù)接受客戶端的郵件處理請求,并生成郵件然后交由郵件服務(wù)器處理,以此來實現(xiàn)對多個業(yè)務(wù)系統(tǒng)提供統(tǒng)一的郵件服務(wù)。圖1是根據(jù)本發(fā)明實施例的處理郵件的系統(tǒng)的基本結(jié)構(gòu)的示意圖。如圖1所示,處理郵件的系統(tǒng)10作為服務(wù)而部署,主要包括請求接收單元11、隊列處理單元12、持久化單元13、任務(wù)管理單元14、模板解析單元15、以及郵件發(fā)送單元16。圖中還示出了客戶端20及其中的客戶端API (應(yīng)用程序編程接口)單元21和查詢單元22、郵件發(fā)送隊列的緩存單元23、持久化存儲單元24、附件文件系統(tǒng)25以及郵件服務(wù)器26。以下結(jié)合圖1和圖2說明本發(fā)明實施例的處理郵件的方法的主要步驟。圖2是根據(jù)本發(fā)明實施例的處理郵件的方法的主要步驟的示意圖。
[0030]步驟S201:應(yīng)用系統(tǒng)(圖中未示出)調(diào)用客戶端API單元。在調(diào)用時傳入一個MailRequest郵件請求對象,向客戶端指明郵件模板、收件地址、以及期望發(fā)送郵件的時間等信息。
[0031]步驟S202:客戶端API單元校驗郵件請求數(shù)據(jù),若數(shù)據(jù)缺失或不合法,則進入步驟S203,返回一個提示信息;若數(shù)據(jù)正確則進入步驟S204??蛻舳薃PI單元對基礎(chǔ)的基于SMTP協(xié)議的郵件API進行封裝,簡化了客戶端(即用戶程序)的編碼復雜度。
[0032]步驟S204:客戶端API單元調(diào)用web服務(wù),將郵件發(fā)送請求信息發(fā)送給請求接收單元11。然后等待服務(wù)響應(yīng)。該郵件發(fā)送請求信息中指定了郵件模板、收件地址、以及期望發(fā)送郵件的時間。作為服務(wù)而部署的方式使處理