发表一个自己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