發表一個自己C#寫的email 初級系統源代碼
2024-07-21 02:25:03
供稿:網友
.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發送反饋信息:
[email protected]
壓縮文件及工程文件在:
http://www.vchelp.net/asp/cdf_pic/200410/subject_1_118575.zip