1、背景
為了方便獲取和發(fā)送郵件,需要有一個定時服務(wù)來對人員列表的郵件內(nèi)容進(jìn)行收取,以及發(fā)送存儲在數(shù)據(jù)庫列表里面的郵件信息,并提供相應(yīng)的界面管理功能,為企業(yè)員工提供相應(yīng)的郵件服務(wù)。
本軟件具有下面幾個特點:
1)通過Windows服務(wù)駐留在服務(wù)器系統(tǒng)中,提供更及時、更高效的響應(yīng)服務(wù)。
2)通過SMTP協(xié)議發(fā)送郵件和POP3協(xié)議獲取郵件,支持大多數(shù)郵箱的郵件收發(fā)操作。
3)郵件收取和發(fā)送采用多線程進(jìn)行處理,更好利用服務(wù)器資源。
4)郵件的附件通過接口獲取并存儲到服務(wù)器上,方便查看和管理。
5)提供對郵件內(nèi)容、郵件配置和發(fā)送操作等方面,進(jìn)行可視化的管理操作。
6)用戶可以對自己的郵件進(jìn)行刪除,系統(tǒng)在服務(wù)進(jìn)程進(jìn)行后臺處理,并執(zhí)行刪除操作。
本軟件基于微軟.NET 4.0框架技術(shù),以C# 4.0為開發(fā)語言進(jìn)行系統(tǒng)開發(fā),數(shù)據(jù)庫存儲采用SqlServer/Sqlite/Oracle等關(guān)系型數(shù)據(jù)庫進(jìn)行存儲。

2、軟件配置安裝說明
2.1數(shù)據(jù)庫恢復(fù)操作
默認(rèn)程序包里面有一個EmailPorter.bak文件,這個是SqlServer2005的備份文件,使用前需要把該數(shù)據(jù)庫進(jìn)行恢復(fù)才能使用本程序。
恢復(fù)數(shù)據(jù)庫操作步驟,可以遵循下面幾個步驟進(jìn)行。
1)在數(shù)據(jù)庫節(jié)點上右鍵執(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ù)配置
軟件目錄下有兩個.config文件,這兩個文件是安裝運(yùn)行服務(wù)需要的配置信息,使用前,需要進(jìn)行一定的配置,兩個文件內(nèi)容完全一致,需要統(tǒng)一修改。

其中的配置文件如下所示,注意其中紅色標(biāo)注的部分,修改相應(yīng)的數(shù)據(jù)庫訪問地址(connectionString),以及發(fā)送的郵件附件基礎(chǔ)路徑(SendAttachPath)的配置值。

2.3 軟件服務(wù)安裝管理
該郵件代收代發(fā)系統(tǒng),通過寄宿在Windows服務(wù)上,可以更好利用Windows的資源,軟件提供一個基于Winform的程序主界面進(jìn)行服務(wù)的安裝、卸載、系統(tǒng)配置信息管理等相關(guān)的管理工作。運(yùn)行定時服務(wù)控制臺程序WinServiceTool.exe,程序圖標(biāo)如下所示。

定時服務(wù)控制臺界面如下所示:

單擊【安裝服務(wù)】功能按鈕,程序彈出DOS窗口進(jìn)行服務(wù)安裝。

安裝后,系統(tǒng)的Windows服務(wù)列表中就會增加一個【定時服務(wù)】的服務(wù)模塊了,這樣就證明我們順利安裝了通用定時服務(wù)了。

服務(wù)程序安裝后,定時服務(wù)控制臺的界面狀態(tài)有所變化,更新了定時服務(wù)的現(xiàn)有狀態(tài),如下所示。

2.4 性能優(yōu)化配置
系統(tǒng)通過多線程技術(shù),充分利用服務(wù)器資源,來提升服務(wù)器執(zhí)行效率和縮短處理時間。
由于系統(tǒng)在發(fā)送和收取過程中,都需要占用系統(tǒng)相關(guān)的資源,因此將發(fā)送和收取兩個模塊分開,每個模塊都以多線程方式進(jìn)行數(shù)據(jù)處理。
為避免對發(fā)送列表頻繁的輪訓(xùn)操作,設(shè)定最小的一個時間間隔數(shù)值,輪訓(xùn)頻率不能小于這個時間間隔(最小為5秒)。
定時服務(wù)程序通過插件化管理各個模塊,包括郵件發(fā)送、郵件接收、郵件刪除操作,這幾個服務(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)界面操作
為了實現(xiàn)以上的郵件收發(fā)和刪除的服務(wù)操作,我們需要涉及下面幾個業(yè)務(wù)場景,內(nèi)容如下:1) 郵件賬號的配置2)待發(fā)送的郵件存儲,發(fā)送后郵件存儲到發(fā)送歷史里面。3)指定接收賬號的配置信息4)接收的郵件存儲5)發(fā)送和接收的郵件的附件存儲
由于郵件代收代發(fā)模塊的【定時發(fā)送服務(wù)】,一般情況下是運(yùn)行在服務(wù)器上,因此也要求軟件的相關(guān)信息也存儲在服務(wù)器上?;谶@個原因,軟件管理的數(shù)據(jù)應(yīng)該存儲在服務(wù)器上,Winform程序可以通過WCF的分布式數(shù)據(jù)訪問獲取服務(wù)器的數(shù)據(jù)(可以利用我的《WCF開發(fā)框架》、《混合式Winform開發(fā)框》架構(gòu)造應(yīng)用)。本文的軟件操作,是基于《混合式Winform開發(fā)框架》的界面操作方式,對郵件的賬號進(jìn)行配置,創(chuàng)建郵件內(nèi)容,以及創(chuàng)建郵件發(fā)送列表等操作。下面分別對這幾個模塊的界面進(jìn)行一個大致的介紹。
3.1 郵件賬號的配置
要發(fā)送和接收用戶的郵件內(nèi)容,首先需要配置相關(guān)的用戶賬號,用戶賬號的配置信息,以列表方式進(jìn)行展示,如果需要添加新的賬號,在界面上單擊【新建】即可創(chuàng)建新的賬號,如下界面所示。

在軟件界面上填入相關(guān)的賬號信息,然后單擊【測試登陸】,系統(tǒng)會根據(jù)SMTP接口對賬號進(jìn)行測試,在使用賬號的時候,只有【測試登陸】通過的賬號,才能正常獲取郵件和發(fā)送郵件。

如果對配置的郵箱不太清楚,系統(tǒng)提供了一個賬號信息的對照表,方便查閱,在新建賬號界面的下方有一個【常見配置信息】的功能,單擊后彈出一個界面,介紹相關(guān)的郵箱賬號配置信息,如下所示。

3.2 待發(fā)送的郵件存儲
待發(fā)送的郵件存儲在一個表里面,后臺【定時服務(wù)】會根據(jù)這個表的數(shù)據(jù)進(jìn)行循環(huán)發(fā)送,隨著【定時服務(wù)】對列表的郵件進(jìn)行不斷的處理,待發(fā)送的郵件列表可能越來越少,最后可能剩下空白的列表記錄。郵件發(fā)送列表界面如下所示。

待發(fā)送的郵件,一般來說每封郵件內(nèi)容可以不同,也可以設(shè)計為批量發(fā)送,郵件引用不同的內(nèi)容即可,看具體的需要。
如果用于營銷推廣方面,郵件的內(nèi)容可能很多相同,如果每次發(fā)送都存儲一樣的郵件正文,則需要很大的存儲空間,我們可以設(shè)計為只存儲郵件明細(xì)的ID,把郵件標(biāo)題和內(nèi)容抽離進(jìn)行獨立維護(hù)。

單擊【新建】功能,彈出一個界面用來新建一個發(fā)送的郵件。

上圖紅色區(qū)域為郵件的內(nèi)容編寫區(qū)域,里面可以通過圖文的方式創(chuàng)建一個豐富多彩的郵件內(nèi)容,郵件的圖片采用網(wǎng)絡(luò)地址方式進(jìn)行插入,這樣使郵件的接收人能夠順利打開相關(guān)的圖片進(jìn)行閱讀。
準(zhǔn)備好郵件內(nèi)容后,我們接著在【郵件發(fā)送列表】界面中,通過【新建】操作,創(chuàng)建一個待發(fā)送的郵件,彈出下面的操作界面。
開始的時候,軟件標(biāo)題,軟件接收者名單,都是空白的,需要我們根據(jù)需要填入相關(guān)的信息,這里的郵件正文,是通過按鈕

進(jìn)行引用剛才創(chuàng)建的郵件正文,以達(dá)到重用的目的。軟件彈出選擇郵件的界面如下所示,選擇合適的郵件,然后在下方【選擇】確認(rèn)即可返回。

返回的界面上輸入相關(guān)的接受者名單,如下所示。

發(fā)送方式有兩種,一種是采用默認(rèn)賬號的方式發(fā)送,且郵件的多個接收者會出現(xiàn)在郵件的發(fā)送人中;一種是使用配置的所有賬號輪流發(fā)送,這種方式,充分利用郵件賬號的資源,把接收者分拆成多封郵件進(jìn)行發(fā)送。
最后郵件待發(fā)送列表里面出現(xiàn)兩封郵件(輪流發(fā)送方式,對郵件接收者進(jìn)行拆分發(fā)送)。
如果【定時服務(wù)】在后臺運(yùn)行,那么很快就可以看到郵件的發(fā)送操作了,同時我本地的QQ已經(jīng)有收到郵件的提示窗口了。

打開QQ郵箱,我們可以看到剛才發(fā)送的郵件內(nèi)容。

打開接收者的163郵箱,可以看到另外一封郵件也順利收到了,界面如下所示。

這個時候刷新待發(fā)送的郵件列表,我們可以看到,郵件列表已經(jīng)清空了。另外發(fā)送成功的郵件已經(jīng)移到歷史列表里面去了。

3.3 指定接收賬號的配置信息
如果用戶已經(jīng)配置了接收的賬號,那么郵件會通過【定時服務(wù)】進(jìn)行定時的獲取,并把數(shù)據(jù)存儲在郵件接收表里面。
開始的時候,這個列表是空的,界面左邊是列出相關(guān)的郵件賬號。如果我們需要進(jìn)行郵件的收取,我們需要通過【配置收取賬號】的界面進(jìn)行處理,單擊【配置收取賬號】按鈕,彈出以下界面,選擇需要收取郵件,并確定保存即可。

3.4 接收的郵件存儲
上面小節(jié)介紹了郵件收取賬號的配置,當(dāng)配置好賬號后,返回主界面,等待一會功夫,刷新收取的郵件列表,即可看到已經(jīng)很多郵件被收取下來存儲到服務(wù)器上來,我們通過界面查看即可。

收取到的郵件,通過雙擊列表可以打開進(jìn)行查看,我們打開其中一封郵件,看到的界面如下所示。

3.5 郵件的附件存儲
郵件的附件是存放在服務(wù)器上的,如果需要獲取,需要程序通過WCF服務(wù)的方式對附件進(jìn)行遠(yuǎn)程獲取查看。
對于一些郵件帶有附件的,軟件提供了相關(guān)的界面進(jìn)行查看,操作界面如下所示。

軟件如果是圖片,可以雙擊進(jìn)行查看,如果是其他文件,下載到本地進(jìn)行打開。
