1、背景
為了方便獲取和發送郵件,需要有一個定時服務來對人員列表的郵件內容進行收取,以及發送存儲在數據庫列表里面的郵件信息,並提供相應的界面管理功能,為企業員工提供相應的郵件服務。
本軟件具有下面幾個特點:
1)通過Windows服務駐留在服務器系統中,提供更及時、更高效的響應服務。
2)通過SMTP協議發送郵件和POP3協議獲取郵件,支持大多數郵箱的郵件收發操作。
3)郵件收取和發送采用多線程進行處理,更好利用服務器資源。
4)郵件的附件通過接口獲取並存儲到服務器上,方便查看和管理。
5)提供對郵件內容、郵件配置和發送操作等方面,進行可視化的管理操作。
6)用戶可以對自己的郵件進行刪除,系統在服務進程進行后台處理,並執行刪除操作。
本軟件基於微軟.NET 4.0框架技術,以C# 4.0為開發語言進行系統開發,數據庫存儲采用SqlServer/Sqlite/Oracle等關系型數據庫進行存儲。
2、軟件配置安裝說明
2.1數據庫恢復操作
默認程序包里面有一個EmailPorter.bak文件,這個是SqlServer2005的備份文件,使用前需要把該數據庫進行恢復才能使用本程序。
恢復數據庫操作步驟,可以遵循下面幾個步驟進行。
1)在數據庫節點上右鍵執行還原數據庫操作。
2)數據庫還原操作。輸入還原的數據庫名稱,在源設備中選擇相應的備份文件,並勾選備件文件列表,然后執行還原數據庫操作。
3)查看還原數據庫表。數據庫還原提示成功后,可以在新建的數據庫里面,看到下面一些數據庫表信息。
2.2 軟件參數配置
軟件目錄下有兩個.config文件,這兩個文件是安裝運行服務需要的配置信息,使用前,需要進行一定的配置,兩個文件內容完全一致,需要統一修改。
其中的配置文件如下所示,注意其中紅色標注的部分,修改相應的數據庫訪問地址(connectionString),以及發送的郵件附件基礎路徑(SendAttachPath)的配置值。
2.3 軟件服務安裝管理
該郵件代收代發系統,通過寄宿在Windows服務上,可以更好利用Windows的資源,軟件提供一個基於Winform的程序主界面進行服務的安裝、卸載、系統配置信息管理等相關的管理工作。運行定時服務控制台程序WinServiceTool.exe,程序圖標如下所示。
定時服務控制台界面如下所示:
單擊【安裝服務】功能按鈕,程序彈出DOS窗口進行服務安裝。
安裝后,系統的Windows服務列表中就會增加一個【定時服務】的服務模塊了,這樣就證明我們順利安裝了通用定時服務了。
服務程序安裝后,定時服務控制台的界面狀態有所變化,更新了定時服務的現有狀態,如下所示。
2.4 性能優化配置
系統通過多線程技術,充分利用服務器資源,來提升服務器執行效率和縮短處理時間。
由於系統在發送和收取過程中,都需要占用系統相關的資源,因此將發送和收取兩個模塊分開,每個模塊都以多線程方式進行數據處理。
為避免對發送列表頻繁的輪訓操作,設定最小的一個時間間隔數值,輪訓頻率不能小於這個時間間隔(最小為5秒)。
定時服務程序通過插件化管理各個模塊,包括郵件發送、郵件接收、郵件刪除操作,這幾個服務插件的相關配置參考PlugInSetting.xml進行調整即可。
默認發送服務輪訓為5秒間隔,郵件接收服務輪訓為30秒間隔,郵件刪除服務輪訓為60秒間隔,可根據需要進行調整。
PlugInSetting.xml文件如下所示。
2.5 關於系統操作日志
與服務有關的一些操作記錄,建議寫回日志文件中,包括郵件的收取與發送日志,服務程序異常日志,以便於日后維護。
日志建議按yyyymmdd.txt 命名方式。
3、系統界面操作
為了實現以上的郵件收發和刪除的服務操作,我們需要涉及下面幾個業務場景,內容如下:
1) 郵件賬號的配置
2)待發送的郵件存儲,發送后郵件存儲到發送歷史里面。
3)指定接收賬號的配置信息
4)接收的郵件存儲
5)發送和接收的郵件的附件存儲
由於郵件代收代發模塊的【定時發送服務】,一般情況下是運行在服務器上,因此也要求軟件的相關信息也存儲在服務器上。基於這個原因,軟件管理的數據應該存儲在服務器上,Winform程序可以通過WCF的分布式數據訪問獲取服務器的數據(可以利用我的《WCF開發框架》、《混合式Winform開發框》架構造應用)。
本文的軟件操作,是基於《混合式Winform開發框架》的界面操作方式,對郵件的賬號進行配置,創建郵件內容,以及創建郵件發送列表等操作。
下面分別對這幾個模塊的界面進行一個大致的介紹。
3.1 郵件賬號的配置
要發送和接收用戶的郵件內容,首先需要配置相關的用戶賬號,用戶賬號的配置信息,以列表方式進行展示,如果需要添加新的賬號,在界面上單擊【新建】即可創建新的賬號,如下界面所示。
在軟件界面上填入相關的賬號信息,然后單擊【測試登陸】,系統會根據SMTP接口對賬號進行測試,在使用賬號的時候,只有【測試登陸】通過的賬號,才能正常獲取郵件和發送郵件。
如果對配置的郵箱不太清楚,系統提供了一個賬號信息的對照表,方便查閱,在新建賬號界面的下方有一個【常見配置信息】的功能,單擊后彈出一個界面,介紹相關的郵箱賬號配置信息,如下所示。
3.2 待發送的郵件存儲
待發送的郵件存儲在一個表里面,后台【定時服務】會根據這個表的數據進行循環發送,隨着【定時服務】對列表的郵件進行不斷的處理,待發送的郵件列表可能越來越少,最后可能剩下空白的列表記錄。郵件發送列表界面如下所示。
待發送的郵件,一般來說每封郵件內容可以不同,也可以設計為批量發送,郵件引用不同的內容即可,看具體的需要。
如果用於營銷推廣方面,郵件的內容可能很多相同,如果每次發送都存儲一樣的郵件正文,則需要很大的存儲空間,我們可以設計為只存儲郵件明細的ID,把郵件標題和內容抽離進行獨立維護。
單擊【新建】功能,彈出一個界面用來新建一個發送的郵件。
上圖紅色區域為郵件的內容編寫區域,里面可以通過圖文的方式創建一個豐富多彩的郵件內容,郵件的圖片采用網絡地址方式進行插入,這樣使郵件的接收人能夠順利打開相關的圖片進行閱讀。
准備好郵件內容后,我們接着在【郵件發送列表】界面中,通過【新建】操作,創建一個待發送的郵件,彈出下面的操作界面。
開始的時候,軟件標題,軟件接收者名單,都是空白的,需要我們根據需要填入相關的信息,這里的郵件正文,是通過按鈕
進行引用剛才創建的郵件正文,以達到重用的目的。軟件彈出選擇郵件的界面如下所示,選擇合適的郵件,然后在下方【選擇】確認即可返回。
返回的界面上輸入相關的接受者名單,如下所示。
發送方式有兩種,一種是采用默認賬號的方式發送,且郵件的多個接收者會出現在郵件的發送人中;一種是使用配置的所有賬號輪流發送,這種方式,充分利用郵件賬號的資源,把接收者分拆成多封郵件進行發送。
最后郵件待發送列表里面出現兩封郵件(輪流發送方式,對郵件接收者進行拆分發送)。
如果【定時服務】在后台運行,那么很快就可以看到郵件的發送操作了,同時我本地的QQ已經有收到郵件的提示窗口了。
打開QQ郵箱,我們可以看到剛才發送的郵件內容。
打開接收者的163郵箱,可以看到另外一封郵件也順利收到了,界面如下所示。
這個時候刷新待發送的郵件列表,我們可以看到,郵件列表已經清空了。另外發送成功的郵件已經移到歷史列表里面去了。
3.3 指定接收賬號的配置信息
如果用戶已經配置了接收的賬號,那么郵件會通過【定時服務】進行定時的獲取,並把數據存儲在郵件接收表里面。
開始的時候,這個列表是空的,界面左邊是列出相關的郵件賬號。如果我們需要進行郵件的收取,我們需要通過【配置收取賬號】的界面進行處理,單擊【配置收取賬號】按鈕,彈出以下界面,選擇需要收取郵件,並確定保存即可。
3.4 接收的郵件存儲
上面小節介紹了郵件收取賬號的配置,當配置好賬號后,返回主界面,等待一會功夫,刷新收取的郵件列表,即可看到已經很多郵件被收取下來存儲到服務器上來,我們通過界面查看即可。
收取到的郵件,通過雙擊列表可以打開進行查看,我們打開其中一封郵件,看到的界面如下所示。
3.5 郵件的附件存儲
郵件的附件是存放在服務器上的,如果需要獲取,需要程序通過WCF服務的方式對附件進行遠程獲取查看。
對於一些郵件帶有附件的,軟件提供了相關的界面進行查看,操作界面如下所示。
軟件如果是圖片,可以雙擊進行查看,如果是其他文件,下載到本地進行打開。