1厚者、背景
為了方便獲取和發(fā)送郵件,需要有一個(gè)定時(shí)服務(wù)來對(duì)人員列表的郵件內(nèi)容進(jìn)行收取,以及發(fā)送存儲(chǔ)在數(shù)據(jù)庫列表里面的郵件信息俱萍,并提供相應(yīng)的界面管理功能,為企業(yè)員工提供相應(yīng)的郵件服務(wù)告丢。
本軟件具有下面幾個(gè)特點(diǎn):
1)通過Windows服務(wù)駐留在服務(wù)器系統(tǒng)中枪蘑,提供更及時(shí)、更高效的響應(yīng)服務(wù)岖免。
2)通過SMTP協(xié)議發(fā)送郵件和POP3協(xié)議獲取郵件岳颇,支持大多數(shù)郵箱的郵件收發(fā)操作。
3)郵件收取和發(fā)送采用多線程進(jìn)行處理颅湘,更好利用服務(wù)器資源话侧。
4)郵件的附件通過接口獲取并存儲(chǔ)到服務(wù)器上,方便查看和管理闯参。
5)提供對(duì)郵件內(nèi)容瞻鹏、郵件配置和發(fā)送操作等方面术羔,進(jìn)行可視化的管理操作。
6)用戶可以對(duì)自己的郵件進(jìn)行刪除乙漓,系統(tǒng)在服務(wù)進(jìn)程進(jìn)行后臺(tái)處理级历,并執(zhí)行刪除操作。
本軟件基于微軟.NET 4.0框架技術(shù)叭披,以C# 4.0為開發(fā)語言進(jìn)行系統(tǒng)開發(fā),數(shù)據(jù)庫存儲(chǔ)采用SqlServer/Sqlite/Oracle等關(guān)系型數(shù)據(jù)庫進(jìn)行存儲(chǔ)寥殖。
2、軟件配置安裝說明
2.1數(shù)據(jù)庫恢復(fù)操作
默認(rèn)程序包里面有一個(gè)EmailPorter.bak文件涩蜘,這個(gè)是SqlServer2005的備份文件嚼贡,使用前需要把該數(shù)據(jù)庫進(jìn)行恢復(fù)才能使用本程序。
恢復(fù)數(shù)據(jù)庫操作步驟同诫,可以遵循下面幾個(gè)步驟進(jìn)行粤策。
1)在數(shù)據(jù)庫節(jié)點(diǎn)上右鍵執(zhí)行還原數(shù)據(jù)庫操作。
2)數(shù)據(jù)庫還原操作误窖。輸入還原的數(shù)據(jù)庫名稱叮盘,在源設(shè)備中選擇相應(yīng)的備份文件,并勾選備件文件列表霹俺,然后執(zhí)行還原數(shù)據(jù)庫操作柔吼。
3)查看還原數(shù)據(jù)庫表。數(shù)據(jù)庫還原提示成功后丙唧,可以在新建的數(shù)據(jù)庫里面愈魏,看到下面一些數(shù)據(jù)庫表信息。
2.2 軟件參數(shù)配置
軟件目錄下有兩個(gè).config文件想际,這兩個(gè)文件是安裝運(yùn)行服務(wù)需要的配置信息培漏,使用前,需要進(jìn)行一定的配置胡本,兩個(gè)文件內(nèi)容完全一致牌柄,需要統(tǒng)一修改。
其中的配置文件如下所示打瘪,注意其中紅色標(biāo)注的部分友鼻,修改相應(yīng)的數(shù)據(jù)庫訪問地址(connectionString)傻昙,以及發(fā)送的郵件附件基礎(chǔ)路徑(SendAttachPath)的配置值闺骚。
2.3 軟件服務(wù)安裝管理
該郵件代收代發(fā)系統(tǒng),通過寄宿在Windows服務(wù)上妆档,可以更好利用Windows的資源僻爽,軟件提供一個(gè)基于Winform的程序主界面進(jìn)行服務(wù)的安裝、卸載贾惦、系統(tǒng)配置信息管理等相關(guān)的管理工作胸梆。運(yùn)行定時(shí)服務(wù)控制臺(tái)程序WinServiceTool.exe敦捧,程序圖標(biāo)如下所示。
定時(shí)服務(wù)控制臺(tái)界面如下所示:
單擊【安裝服務(wù)】功能按鈕碰镜,程序彈出DOS窗口進(jìn)行服務(wù)安裝兢卵。
安裝后,系統(tǒng)的Windows服務(wù)列表中就會(huì)增加一個(gè)【定時(shí)服務(wù)】的服務(wù)模塊了绪颖,這樣就證明我們順利安裝了通用定時(shí)服務(wù)了秽荤。
服務(wù)程序安裝后,定時(shí)服務(wù)控制臺(tái)的界面狀態(tài)有所變化柠横,更新了定時(shí)服務(wù)的現(xiàn)有狀態(tài)窃款,如下所示。
2.4 性能優(yōu)化配置
系統(tǒng)通過多線程技術(shù)牍氛,充分利用服務(wù)器資源晨继,來提升服務(wù)器執(zhí)行效率和縮短處理時(shí)間。
由于系統(tǒng)在發(fā)送和收取過程中搬俊,都需要占用系統(tǒng)相關(guān)的資源紊扬,因此將發(fā)送和收取兩個(gè)模塊分開,每個(gè)模塊都以多線程方式進(jìn)行數(shù)據(jù)處理唉擂。
為避免對(duì)發(fā)送列表頻繁的輪訓(xùn)操作珠月,設(shè)定最小的一個(gè)時(shí)間間隔數(shù)值,輪訓(xùn)頻率不能小于這個(gè)時(shí)間間隔(最小為5秒)楔敌。
定時(shí)服務(wù)程序通過插件化管理各個(gè)模塊啤挎,包括郵件發(fā)送、郵件接收卵凑、郵件刪除操作庆聘,這幾個(gè)服務(wù)插件的相關(guān)配置參考PlugInSetting.xml進(jìn)行調(diào)整即可。
默認(rèn)發(fā)送服務(wù)輪訓(xùn)為5秒間隔勺卢,郵件接收服務(wù)輪訓(xùn)為30秒間隔伙判,郵件刪除服務(wù)輪訓(xùn)為60秒間隔,可根據(jù)需要進(jìn)行調(diào)整黑忱。
PlugInSetting.xml文件如下所示赶盔。
2.5 關(guān)于系統(tǒng)操作日志
與服務(wù)有關(guān)的一些操作記錄,建議寫回日志文件中哮笆,包括郵件的收取與發(fā)送日志沉馆,服務(wù)程序異常日志,以便于日后維護(hù)抚吠。
日志建議按yyyymmdd.txt 命名方式常潮。
3、系統(tǒng)界面操作
為了實(shí)現(xiàn)以上的郵件收發(fā)和刪除的服務(wù)操作楷力,我們需要涉及下面幾個(gè)業(yè)務(wù)場景喊式,內(nèi)容如下:1) 郵件賬號(hào)的配置2)待發(fā)送的郵件存儲(chǔ)孵户,發(fā)送后郵件存儲(chǔ)到發(fā)送歷史里面。3)指定接收賬號(hào)的配置信息4)接收的郵件存儲(chǔ)5)發(fā)送和接收的郵件的附件存儲(chǔ)
由于郵件代收代發(fā)模塊的【定時(shí)發(fā)送服務(wù)】岔留,一般情況下是運(yùn)行在服務(wù)器上夏哭,因此也要求軟件的相關(guān)信息也存儲(chǔ)在服務(wù)器上∠琢基于這個(gè)原因方庭,軟件管理的數(shù)據(jù)應(yīng)該存儲(chǔ)在服務(wù)器上,Winform程序可以通過WCF的分布式數(shù)據(jù)訪問獲取服務(wù)器的數(shù)據(jù)(可以利用我的《WCF開發(fā)框架》酱固、《混合式Winform開發(fā)框》架構(gòu)造應(yīng)用)械念。本文的軟件操作,是基于《混合式Winform開發(fā)框架》的界面操作方式运悲,對(duì)郵件的賬號(hào)進(jìn)行配置龄减,創(chuàng)建郵件內(nèi)容,以及創(chuàng)建郵件發(fā)送列表等操作班眯。下面分別對(duì)這幾個(gè)模塊的界面進(jìn)行一個(gè)大致的介紹希停。
3.1 郵件賬號(hào)的配置
要發(fā)送和接收用戶的郵件內(nèi)容,首先需要配置相關(guān)的用戶賬號(hào)署隘,用戶賬號(hào)的配置信息宠能,以列表方式進(jìn)行展示,如果需要添加新的賬號(hào)磁餐,在界面上單擊【新建】即可創(chuàng)建新的賬號(hào)违崇,如下界面所示。
在軟件界面上填入相關(guān)的賬號(hào)信息诊霹,然后單擊【測試登陸】羞延,系統(tǒng)會(huì)根據(jù)SMTP接口對(duì)賬號(hào)進(jìn)行測試,在使用賬號(hào)的時(shí)候脾还,只有【測試登陸】通過的賬號(hào)伴箩,才能正常獲取郵件和發(fā)送郵件。
如果對(duì)配置的郵箱不太清楚鄙漏,系統(tǒng)提供了一個(gè)賬號(hào)信息的對(duì)照表嗤谚,方便查閱,在新建賬號(hào)界面的下方有一個(gè)【常見配置信息】的功能怔蚌,單擊后彈出一個(gè)界面巩步,介紹相關(guān)的郵箱賬號(hào)配置信息,如下所示媚创。
3.2 待發(fā)送的郵件存儲(chǔ)
待發(fā)送的郵件存儲(chǔ)在一個(gè)表里面渗钉,后臺(tái)【定時(shí)服務(wù)】會(huì)根據(jù)這個(gè)表的數(shù)據(jù)進(jìn)行循環(huán)發(fā)送,隨著【定時(shí)服務(wù)】對(duì)列表的郵件進(jìn)行不斷的處理钞钙,待發(fā)送的郵件列表可能越來越少鳄橘,最后可能剩下空白的列表記錄。郵件發(fā)送列表界面如下所示芒炼。
待發(fā)送的郵件瘫怜,一般來說每封郵件內(nèi)容可以不同,也可以設(shè)計(jì)為批量發(fā)送本刽,郵件引用不同的內(nèi)容即可鲸湃,看具體的需要。
如果用于營銷推廣方面子寓,郵件的內(nèi)容可能很多相同暗挑,如果每次發(fā)送都存儲(chǔ)一樣的郵件正文,則需要很大的存儲(chǔ)空間斜友,我們可以設(shè)計(jì)為只存儲(chǔ)郵件明細(xì)的ID炸裆,把郵件標(biāo)題和內(nèi)容抽離進(jìn)行獨(dú)立維護(hù)。
單擊【新建】功能鲜屏,彈出一個(gè)界面用來新建一個(gè)發(fā)送的郵件烹看。
上圖紅色區(qū)域?yàn)猷]件的內(nèi)容編寫區(qū)域,里面可以通過圖文的方式創(chuàng)建一個(gè)豐富多彩的郵件內(nèi)容洛史,郵件的圖片采用網(wǎng)絡(luò)地址方式進(jìn)行插入惯殊,這樣使郵件的接收人能夠順利打開相關(guān)的圖片進(jìn)行閱讀。
準(zhǔn)備好郵件內(nèi)容后也殖,我們接著在【郵件發(fā)送列表】界面中土思,通過【新建】操作,創(chuàng)建一個(gè)待發(fā)送的郵件忆嗜,彈出下面的操作界面浪漠。
開始的時(shí)候,軟件標(biāo)題霎褐,軟件接收者名單址愿,都是空白的,需要我們根據(jù)需要填入相關(guān)的信息冻璃,這里的郵件正文响谓,是通過按鈕
進(jìn)行引用剛才創(chuàng)建的郵件正文,以達(dá)到重用的目的省艳。軟件彈出選擇郵件的界面如下所示娘纷,選擇合適的郵件,然后在下方【選擇】確認(rèn)即可返回跋炕。
返回的界面上輸入相關(guān)的接受者名單赖晶,如下所示。
發(fā)送方式有兩種,一種是采用默認(rèn)賬號(hào)的方式發(fā)送遏插,且郵件的多個(gè)接收者會(huì)出現(xiàn)在郵件的發(fā)送人中捂贿;一種是使用配置的所有賬號(hào)輪流發(fā)送,這種方式胳嘲,充分利用郵件賬號(hào)的資源厂僧,把接收者分拆成多封郵件進(jìn)行發(fā)送。
最后郵件待發(fā)送列表里面出現(xiàn)兩封郵件(輪流發(fā)送方式了牛,對(duì)郵件接收者進(jìn)行拆分發(fā)送)颜屠。
如果【定時(shí)服務(wù)】在后臺(tái)運(yùn)行,那么很快就可以看到郵件的發(fā)送操作了鹰祸,同時(shí)我本地的QQ已經(jīng)有收到郵件的提示窗口了甫窟。
打開QQ郵箱,我們可以看到剛才發(fā)送的郵件內(nèi)容蛙婴。
打開接收者的163郵箱粗井,可以看到另外一封郵件也順利收到了,界面如下所示敬锐。
這個(gè)時(shí)候刷新待發(fā)送的郵件列表背传,我們可以看到,郵件列表已經(jīng)清空了台夺。另外發(fā)送成功的郵件已經(jīng)移到歷史列表里面去了径玖。
3.3 指定接收賬號(hào)的配置信息
如果用戶已經(jīng)配置了接收的賬號(hào),那么郵件會(huì)通過【定時(shí)服務(wù)】進(jìn)行定時(shí)的獲取颤介,并把數(shù)據(jù)存儲(chǔ)在郵件接收表里面梳星。
開始的時(shí)候,這個(gè)列表是空的滚朵,界面左邊是列出相關(guān)的郵件賬號(hào)冤灾。如果我們需要進(jìn)行郵件的收取,我們需要通過【配置收取賬號(hào)】的界面進(jìn)行處理辕近,單擊【配置收取賬號(hào)】按鈕韵吨,彈出以下界面,選擇需要收取郵件移宅,并確定保存即可归粉。
3.4 接收的郵件存儲(chǔ)
上面小節(jié)介紹了郵件收取賬號(hào)的配置,當(dāng)配置好賬號(hào)后漏峰,返回主界面糠悼,等待一會(huì)功夫,刷新收取的郵件列表浅乔,即可看到已經(jīng)很多郵件被收取下來存儲(chǔ)到服務(wù)器上來倔喂,我們通過界面查看即可。
收取到的郵件,通過雙擊列表可以打開進(jìn)行查看席噩,我們打開其中一封郵件班缰,看到的界面如下所示。
3.5 郵件的附件存儲(chǔ)
郵件的附件是存放在服務(wù)器上的班挖,如果需要獲取鲁捏,需要程序通過WCF服務(wù)的方式對(duì)附件進(jìn)行遠(yuǎn)程獲取查看芯砸。
對(duì)于一些郵件帶有附件的萧芙,軟件提供了相關(guān)的界面進(jìn)行查看,操作界面如下所示假丧。
軟件如果是圖片双揪,可以雙擊進(jìn)行查看,如果是其他文件包帚,下載到本地進(jìn)行打開渔期。