基于WinSock的邮件服务器的设计与实现

时间:2022-10-09 07:00:45

基于WinSock的邮件服务器的设计与实现

摘要:该文首先介绍了Internet有关服务,接着对各种邮件协议族以及域名系统进行了论述,然后研究了Windows的服务器编程模型。将SMTP协议、POP3协议以及MIME结合起来开发邮件收发服务器。

关键词:电子邮件;SMTP;POP3

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)35-2298-04

The Design and Implementation of Email Server based on WinSock

SUN Gen-qin1, HU Jing-Li2

(1. Gannan Normal University, Ganzhou 341000, China; 2. Science and Technology College of NCHU,Nanchang 330034,China)

Abstract: This paper firstly shows the services about the Internet, and then gives an introduction to the several of email protocol and the domain system, and at last studies the programming models of windows severs. Unifying the SMTP protocol, the POP3 protocol and MIME to develop the receiving and sending server of mails.

Key words: Email; SMTP; POP3

1 引言

电子邮件是Internet上最为广泛的一种服务。它方便使用,发送,阅读,答复和管理方便,而且速度快,成本低。因此,电子邮件发展比较快,技术较以前有了很大发展。邮件报文格式发展到多用途Internet邮件扩展(MIME)格式,这使得现在的电子邮件能不仅允许你邮递简单的文本文件,还可以传递二进制数据,图形图像,音频文件,视频文件等。在另一方面,邮件协议也得到完善,由SMTP发展到ESMTP,增加邮件的加密,使得邮件传送更为安全,高效。因此,电子邮件非常适用想进行快速信息处理以提高工作效率的现代企业。

2 TCP/IP协议组族

目前,在Internet广泛采用的协议是TCP/IP协议族。TCP/IP, 是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统,如图1所示。每一层负责不同的功能:

2.1 链路层

链路层有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

2.2 网络层

网络层有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。

2.3 运输层

运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议: TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途。

2.4 应用层

应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供这些通用的应用程序:如:Telnet、FTP和e-mail等。

3 Internet电子邮件系统

Internet电子邮件系统一般是由输出队列,输出队列,客户处理,服务器处理以及接收邮件的邮箱组成的。其基本构成元素示意图如图2所示。

目前,许多机构都采用中继系统,修改的Internet电子邮件系统如图3所示。

在此系统中,在发送方和接收方之间有4个MTA。发送方主机上的本地MTA只把邮件交给它自己的中继MTA(该中继MTA可能在该机构的域中有一个mailhost的主机名)。这个通信就在该机构的本地互联网上用SMTP。然后,发送方机构的中继MTA就在Internet上把邮件发送到接收方机构的中继MTA上,而这个中继MTA就通过与接收方主机上的本地MTA通信,把邮件交给接收方主机。尽管可能存在其他协议,但这个例子中所有MTA均使用SMTP协议。

4 基于WinSock的邮件服务器

邮件服务器系统在VC++软件开发平台上实现,支持POP3、IMAP4、SMTP等国际标准邮件协议,是一款简单实用的邮件服务器。整个系统具有高伸缩性、可靠性和可用性,为适应用户需要特别提供一套系统中同时支持中、用户界面功能简单,满足局域邮件收发的需求,用户管理需求以及信件管理需求。

4.1 WinSock的概念

将Winsock细分为两种组件:Client Sock和Server Sock,它们分别作为客户端和服务器端的组件。通过这两种组件之间的通信,再加上辅助的应用程序代码,就可以实现一个简单的通信程序。当然,如果你想在客户端程序中再引入Server Sock的话,那么客户端程序就可以充当服务器了,可以对其他的客户端程序的请求进行响应。

如果正在编写服务器端程序,就必须设置Server Sock组件的Port属性。设置此参数主要是因为在同一台计算机上可能运行着多个服务器程序,而它们可能总在不停地接受来自于远程客户端程序的连接请求。也可以设置Service属性,它指示了Server Sock所提供的服务类型,比如:FTP、HTTP等,然后设置Active属性为True。

如果正在编写客户端程序,则设置Client Server组件的属性就多一些。Port属性应设置成和服务器端的Port属性值一致,另外Host的属性必须正确设置,它是一个只读属性,在设计时不可用。Host指示了客户程序所要连接的远程服务器的主机名。也可以设置Address属性,也就是远程主机的IP地址。

4.2 邮件服务器的概念

邮件服务器提供了邮件系统的基本结构,包括邮件传输、邮件分发、邮件存储等功能,以确保邮件能够发送到Internet网络中的任意地方。能基本实现各类信号的传送、接收和存贮功能,不只局限于信件中传递,还可以用来传递文件、声音及图形图像等不同类型的信息。

4.3 邮件服务器的功能

a) POP3邮件收取功能

POP3(Post office Protocol 3)L4 是TCP/IP网络经常使用的邮政协议标准的最新版本.POP3协议允许客户通过暂时的TCP/IP连接,从POP主机上取得电子邮件.POP协议最大的优点是不需要与网络保持不问断的连接,就可收取电子邮件。在默认情况自下,POP3的端口号是llO,其工作流程分为下面几步:

1) 客户机发出请求,请求和服务器连接;

2) POP3服务器应答,连接建立;

3) 客户机和服务器交互命令/应答和数据;

4 )结束连接。

b) SMTP邮件发送功能

该系统可设置SMTP发信认证,有效防止垃圾邮件;发件人身份验证支持由RF C2554、RFC2222和RFC 1995定义的发件人身份验证功能,方便用户通过客户端软件发送邮件。

信件管理功能:日常大量的电子邮件是需要管理的,对于个人来说工作量还好完成,但企业面临的问题就严重了,众多员工的往来信件需要解决空间、安全、归档、备份等等问题。

c) 邮件服务器的性能参数:邮件服务器的主要性能参数应当包括:SMTP发信效率、POP3收信效率、邮件服务器消息转发效率等等。影响邮件服务器使用的重要因素:网络带宽的影响、操作系统的影响、邮件设计技术的影响、用户配置水平的影响。

5 Windows下的服务器设计

在Windows操作系统中,服务器软件有三种技术可以并发处理来自多个客户机的服务器请求:多线程,消息驱动和循环处理。它们都有一些各自的特点:多线程编程最直接;消息驱动和循环处理只需要一个线程,节省了多线程间上下文切换的CPU开销;消息驱动是Windows操作系统所特有的。因而更适合Windows下应用程序编写的特点。但在循环处理的服务程序中,为了响应客户机的请求,代码使用异步接收和发送数据的办法把长的传输间隔分成足够短的间隔,这样就破坏了程序自然的逻辑顺序,整个代码看起来会很凌乱,消息驱动的服务程序结构虽保证了程序的逻辑顺序,但消息就像精灵一样,根本无法预知她什么时候会突然地冒出来,因而很难确切地知道代码实际运行的次序。Windows的多任务调度技术使得服务器可以给每个已连接的客户机创建一个线程。独立地处理请求和应答。这样,开发复杂的并发式TCP服务器程序就变得容易了。一个处理客户机请求程序的线程在收到完整的请求前能够一直保持阻塞状态,而不必担心会妨碍对其他客户机的处理。在收到请求后阻塞调用返回后,线程接着分析请求和应答,完毕后,线程或继续接收下一个请求或直接退出。多线程并发服务器和客户机交互的程序结构如图4所示。

和其它抢占式的多线程操作系统一样,32位的Windows操作系统提供了多任务的管理。这样,服务器程序能够为请求服务器的客户机建立一个或多个任务线程,以便同时处理。

6 邮件服务器系统的主要模块

6.1 概述

该邮件服务系统遵照SMTP协议,ESMTP协议,POP3协议,MIME协议。采用多线程并发技术,用户验证处理。其主要功能有:发送邮件,收邮件,用户验证并转发邮件,邮局信件服务,用户信件管理。

6.2 发送邮件模块

该模块的函数模块为SendEmail,遵照SMTP协议和Internet邮件系统,整个模块所需的类型为:

函数接口参数类型CemailMessage结构,它的定义如下:

typedef struct CemailMessage

{CString strEmailFrom; //起始邮件地址

CString strEmailTo;//目的邮件地址

CString strEmailBody;//邮件报文

};

邮件交换记录的报文报头的C语言描述如下:

typedef struct tagDNSHEADER

{USHORT id;//标识

unsigned short parameter;//参数

unsigned short questin_number;//问题数

unsigned short anwser_number;//答案数

unsigned short manager_number;//管理机构数

unsigned short accesory_info_number;//附加信息数

} DNSHEADER;

报文的问题单元的C语言描述如下:

typedef struct tagDNSQUESTION

{unsigned short query_type;

unsigned short query_class;

} DNSQUESTION;

整个函数模块流程如图5所示。

其中在邮件报文的发送SendEmailMsg函数中,若邮件目的地址非法,则必须进死信处理(DoDeadLetter)。

6.3 接收邮件模块

该模块函数为ReceiveMail,遵照SMTP协议。这个模块主要实现SMTP基本会话协议和邮件的存放。回话中,主要要进行必要接收用户名验证。其部分流程如图6所示。

6.4 用户验证并转发邮件模块

该模块主要实现用户的委托邮件发送,但必须进行用户名和密码的验证,遵照的ESMTP协议。因为通常用户名和密码采用BASE64码传送,所模块必须实现BASE64的解码函数(IsRegisted)。

6.5 邮局信件服务模块

该模块实现了邮件的离线邮局服务。实现POP3协议的基本命令。

6.6 用户信件管理模块

对服务器来说,用户的邮件管理显得很重要。在该模块中,对用户的信件采用了以txt和eml为基本格式,两层模式管理结构。以一个名为USER1为例,如图7所示。

当USER1收到一个邮件时,服务器在USER1的文件夹下,以收到该信件的时间为文件名登记在USER1.txt中,同时,建立20001009103410.eml来保存邮件。

7 小结

通过对各种邮件协议的研究,了解各种协议的概念和作用,对其标识有一定的掌握,该系统实现了各种协议的基本功能。该系统基本实现邮件的收发,信件管理,用户管理等基本功能,完成预期所要达到的目标。

参考文献:

[1] 寇从芝, 张红英. 基于Intranet的邮件服务器功能开发[J]. 计算机与现代化, 2004,9:55-56.

[2] 郑澜, 吉国力. J2EE平台上邮件服务器的实现[J]. 厦门大学学报, 2005,44(B06):255-257.

[3] 俞盛. 电子邮件协议浅析[J]. 程序员, 2003,10:63-66.

上一篇:用Flash制作朗读类课件 下一篇:影片画面叠加的制作方法与技巧