發表一個自己C#寫的email 初級系統原始碼
來源:互聯網
上載者:User
原始碼 .NET TNT Email Server Tester說明
2004-11-9
一、引言
TNT Email Server Tester是一個支援多網域名稱的email 伺服器的測試版本。他實現了SMTP/POP3介面,基本上實現了一個小型的email伺服器。
本測試器版本包含原始碼,供大家參考。
通過大家測試,提出修改建議和意見,我會修改,並給提出寶貴意見者一套發行版SDK。
二、SDK
TNT Email Server Tester本身是一個小型的email伺服器,但是基本核心功能基於common.dll server.dll 。本測試版以及將來發行版都不會包含著兩個核心庫檔案的原始碼,但是會發布一套參考開發email server的原始碼,供大家學習使用SDK。
關於SDK的詳細資料,可能要等到我的發行版商業化了才會見到。
全部開發基於C#開發,我的.net framework 是v1.0.3705,不過相信在其他1.1版本的framework上應該也可以運行。如果出現一些異常情況,且你能夠及時聯絡我,我將非常感激。
要獲得一套完整的email伺服器,需要您準備確定以下資訊:
1、 email 的根目錄
2、 email 的pickup目錄,也就是本地投遞的撿取目錄。Server.dll包含了監視這個目錄並發送此目錄中eml檔案的服務線程。
3、 email 的queue目錄,也就是eml的排隊緩衝目錄。Server.dll包含了監視這個目錄並發送此目錄中eml檔案的服務線程。DispSvc會根據這個目錄的eml檔案資訊發送信件到墓地儲存目錄或者外發郵件目錄
4、 email 的 Drop 目錄,也就是確定是本地的郵件儲存目錄,會有系統服務線程從此目錄將eml檔案發送到特定的本機使用者郵箱。
5、 email 的outPost目錄,也就是需要發送到外部的郵件的儲存目錄
6、 確定mailBox目錄,也就是使用者郵箱的儲存地
7、 為本地區名建立信箱儲存區目錄。假設當前email server服務的網域名稱是abc.com,那麼需要在mailBox目錄上建立一個網域名稱目錄abc.com,然後再在此目錄下建立使用者目錄mailbox目錄和userinfo.ini檔案。假設使用者名稱info
就是….\mailbox\abc.com\info\mailbox\目錄
和
檔案……\mailbox\abc.com\info\userinfo.ini
userinfo.ini的格式為:
username=info
password=*********
FWDList=
Name=XXX
CreatTime=2003-1-1
Username= 一行表示儲存此使用者郵箱所屬使用者名稱,password行顯然就是使用者的密碼儲存。將來發行版本回考慮md5加密。其他的不重要,作為保留擴充需要。
8、 實際上,以上需要確定部分都在IserverInfo介面種定義。每一個伺服器都需要兩個介面才可以正常運轉。
public interface IServerInfo
{
/// <summary>
/// 擷取伺服器的各個目錄字元串,通過常量索引返回相關配置資訊
/// 通過SVR_DIR_XXXX訪問
/// </summary>
/// <returns>返回一個關於伺服器目錄的字串數組,訪問通過Common中的常量訪問</returns>
string[] ServerDirectorys();
/// <summary>
/// 獲得伺服器的各個網域名稱,索引0為預設網域名稱
/// 通過SVR_DOMAIN_XXXX訪問
/// </summary>
/// <returns>返回伺服器支援的全部網域名稱</returns>
string[] ServerDomains();
/// <summary>
/// 返回伺服器的關於網域名稱和MX解析的設定
/// 通過SVR_DNS_XXXX訪問
/// </summary>
/// <returns>返回DNS伺服器資訊IP</returns>
string[] ServerDNSSetting();
/// <summary>
/// 包括的資訊依次為:TCP逾時 。。。。。。
/// 通過常量訪問SVR_RT_PARA_XXXX訪問
/// </summary>
int[] ServerRunTimeParameters();
/// <summary>
/// 返回伺服器互動當中返回的資訊
/// 訪問通過SVR_REMSG_XXXX訪問
/// </summary>
string[] ServerReplyMessage();
/// <summary>
/// 返回伺服器端設定字串
/// 通過SVC_SETTING_XXXX訪問
/// </summary>
string[] ServerSetting();
}
以上介面很多返回數組,一般情況下,數組就是需要開發人員確定的。詳細參考例子。
9、 Ilog是一個記錄內部資訊的介面,協助調用者瞭解線程調用發生的情況資訊。
10、 測試環境:
.net framework 1.0以上
足夠的儲存空間和正確的確定目錄。
三、意見反饋
歡迎向以下email發送反饋資訊:
myjobsdk@yahoo.com.cn
壓縮檔及工程檔案在:
http://www.vchelp.net/ASP/cdf_pic/200410/subject_1_118575.zip