发表一个自己C#写的email 初级系统源代码

.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

{

///

1<summary>
2
3///  获取服务器的各个目录字符串,通过常量索引返回相关配置信息 
4
5///  通过SVR_DIR_XXXX访问 
6
7///  </summary>

///

1<returns> 返回一个关于服务器目录的字符串数组,访问通过Common中的常量访问  </returns>

string [] ServerDirectorys();

///

1<summary>
2
3///  获得服务器的各个域名,索引0为缺省域名 
4
5///  通过SVR_DOMAIN_XXXX访问 
6
7///  </summary>

///

1<returns> 返回服务器支持的全部域名  </returns>

string [] ServerDomains();

///

1<summary>
2
3///  返回服务器的关于域名和MX解析的设定 
4
5///  通过SVR_DNS_XXXX访问 
6
7///  </summary>

///

1<returns> 返回DNS服务器信息IP  </returns>

string [] ServerDNSSetting();

///

1<summary>
2
3///  包括的信息依次为:TCP超时  。。。。。。 
4
5///  通过常量访问SVR_RT_PARA_XXXX访问 
6
7///  </summary>

int [] ServerRunTimeParameters();

///

1<summary>
2
3///  返回服务器交互当中返回的信息 
4
5///  访问通过SVR_REMSG_XXXX访问 
6
7///  </summary>

string [] ServerReplyMessage();

///

1<summary>
2
3///  返回服务器端设定字符串 
4
5///  通过SVC_SETTING_XXXX访问 
6
7///  </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

Published At
Categories with Web编程
Tagged with
comments powered by Disqus