PAGE14/NUMPAGES14
SMTP邮件服务器实验
1 .实验内容和实验环境说明
实验工作:使用Socket API创建SMTP邮件服务器程序
实验内容:1)作为SMTP服务器,接收邮件客户端程序的TCP连接请求,接收SMTP命令和邮件数据,并将邮件保存在文件中;
2 )作为SMTP客户端,建立与实际邮件服务器的TCP连接,发送SMTP命令,并将保存的邮件发送到实际邮件服务器
3 )提供邮件错误报告)将实际邮件服务器的错误报告传输到邮件客户端软件
4 )支持一封邮件的多个收件人,要求收件人属于不同的域(例如163.com、…);
5 )提供发件人和收件人电子邮件地址格式检查功能。 例如,以下邮件地址是错误的。 chengli,chengli@,
实验环境: Microsoft Visual Studio 2010
2 .软件设计
(1)数据结构:
char mail_from[4096]; //保存发送源地址
char rcpt_to[5][4096]; //保存收件人
char data[4096]; 储存数据
用于存储char imf[4096] //邮件的标准格式
WORD A; //装入套接字库
WSADATA B; 调用WSAStartup函数保存返回的windows套接字初始化信息
int err; //错误标志
套接字Socks Rv; //创建接收客户端的套接字
SOCKADDR_IN addrSrv; //作为服务器端的套接字地址
char recvBuf[4096]=' '; //接收客户端SMTP命令
)2)模块结构:
[1]main (; //用于从客户端接收保存邮件的服务器端
[2] main _ CLI cenet (套接字; //客户端将接收到的邮件转发到邮件服务器,并且将邮件服务器的错误报告通过套接字s转发到客户端
[3]增值税电子邮件(char * addr ); //收发地址(addr )的合法性监测
)3)算法流程)制作流程图,描述算法的主要流程。
主() )
加载windows套接字; 创建监听套接字; 将插座和插座结合; 将插座置于监听模式;
while(1)。
如果队列不为空,则提取第一个链接以建立连接。 打开邮件保存文件;
Send:220 recv:kddhmgsjx;
send :250 ok recv : mail from :
t发送目的地
地址的合法性f
send :550邀请用户; 连续
send :250 ok recv : rcpt to : 检查合法性
wile(recv!=DATA )
recv: RCPT TO: 检查合法性
Send:250 OK
recv :数据
send :354开始邮件输入; end with. rnrecv :数据框架, bytes
Send:250 recv:IMF; send 250 recv:
send :队列
调用客户端程序
关闭插座
关闭文件指针
释放分配的套接字资源
)4)主要功能模块的实现要点
[1]main (; //用于从客户端接收保存邮件的服务器端
实现要点:建立与客户端的连接,根据SMTP协议标准进行通信。
[2] main _ CLI cenet (套接字; //客户端将接收到的邮件转发到邮件服务器,并且将邮件服务器的错误报告通过套接字s转发到客户端
实现要点:建立与服务器端的连接,根据SMTP协议标准进行通信。
[3]增值税电子邮件(char * addr ); //收发地址(addr )的合法性监测
实现要点:根据标准的电子邮件地址格式进行合法性监测
3实验结果演示与分析
)1)对你实现的功能,逐一进行测试,输出截图。
常规邮件分发:
1
2
3
4
错误报告:
1
2
)2)你的程序提供了错误处理功能吗? 能处理什么样的错误?
[1]将实际邮件服务器的错误报告传送到邮件客户端软件
[2]监视收发邮件地址的格式是否正确
)3)与上课学习的SMTP协议相比,你的程序是否按协议实现呢