# 编写SMTP服务器并观察通信过程
# 一、实验要求介绍
SMTP和POP3协议是目前电子邮件应用系统中最重要的两个协议。深入
理解SMTP和POP3协议的工作过程对理解整个电子邮件系统具有重要的意
义。本实验要求编写一个简化的SMTP邮件服务器,通过观察电子邮件应用程序(如 Outlook Express等)与SMTP邮件服务器的交互过程,加深对整个邮件服务系统的理解。
目的:观察电子邮件应用程序与SMTP邮件服务器的命令交互过程要求:简化的SMTP服务器
- 响应客户SMTP命令,将命令的交互过程和收到的邮件显示到屏幕上
- 支持单用户
- 不保存和转发收到的邮件
- 不作错误处理
- 要求能显示客户端发送的图片。
# 二、实验编译运行环境
本程序编译环境是:Visual Studio 2012;系统环境是:Windows 8(64 位);测试用STMP邮件客户端是Outlook Express 2013; 三、 编写简化的SMTP服务器运行效果
简化SMTP服务器界面及功能区介绍
![](https://www.writebug.com/myres/static/uploads/2022/4/8/58b67027c3b26f1200cea7c3c894ae89.writebug)
观察发送无附件的邮件
在Outlook Express 邮件客户端发送如下内容邮件:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/edc168fe8d222a4391eaf7bb9f140ed8.writebug)
点击发送过后,在编写的简化SMTP邮件客户端上显示如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/eab1e1714777dfdb1842dcb2b2780c82.writebug)
观察发送带有图片附件的邮件
在Outlook Express 邮件客户端发送如下内容邮件
![](https://www.writebug.com/myres/static/uploads/2022/4/8/bb17132a1c5ddcd07da0a8fdb2d502f5.writebug)
点击发送过后,在编写的简化SMTP邮件客户端上显示如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/49d61263327c91f7953aad72a00f87c4.writebug)
注意:邮件中图片附件在此简化的SMTP服务器上只能显示一张;格式为任意格式,经测试常见的图片格式如.png、.jpg、.bmp均可支持;图片大小可任意大小,但是当图片大小大于100K时服务器会见过较长时间才能解码并显示在 picture control 控件中。
# 三、实验原理
SMTP服务器日志区:
此部分主要是邮件客户端与服务器建立通讯的过程,在此程序中主要是简单邮件传输协议SMTP的实现:
其中, SMTP服务器在TCP的25端口守候,其规定发送程序和接收程序之间的命令和应答命令和响应都是可读的ASCII字符串。常见的SMTP命令有如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/4350973e926394d9a3c8979301a2a399.writebug)
其应答响应命令以3位数字开始,后面跟有该响应的具体描述,常见的应答命令有如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/6d6571919b43cd52f85970b22df96d9b.writebug)
在本简化SMTP邮件服务器中与邮件客户端应答命令和响应命令如下:
![STMP](STMP.png)
邮件数据区:
此部分进行邮件内容的显示与处理,当接收到邮件内容时,按照’\r\n’分隔开每一行,当遇到’\r\n.\r\n’时结束邮件内容的显示。
邮件正文区:
此部分将邮件内容中邮件正文显示出来,当在邮件中遇到第一个![](https://www.writebug.com/myres/static/uploads/2022/4/8/79ee551ebc3737e770136708a6f00d72.writebug)时作为邮件正文base64编码的开始处,接着在其后第一次遇到![](https://www.writebug.com/myres/static/uploads/2022/4/8/5ac9da36a04a472fe5ac55353332d2c5.writebug)时作为邮件正文base64编码的结束处。将其中间字符串截取出来进行base64解码,然后显示到该区域。其中base64编码规则如下:
- 将3个字节转换成4个可打印字符
- 将每3个字节做为一个整体将其划分为4组,每组6位将6位的值作为索引,映射为对应的可打印ASCII字符
- 原始文件尾部处理剩1个字节:后面补4个比特的“0”,再分成2个6位组,映射为2个
- ASCII字符,而后再填充两个“=”
- 剩2个字节:后面补2个比特的“0”,再分成3个6位组,映射为3个
- ASCII字符,而后再填充1个“=”
- 添加回车换行:变换后,每76个字符后增加一回车换行
附件图片区:
此部分同样先进行附件图片内容的获取, 当在邮件中遇到第一个![](https://www.writebug.com/myres/static/uploads/2022/4/8/183046b54b617686aa1099e65965d9a5.writebug)时作为邮件附件图片base64编码的开始处,接着在其后第一次遇到![](https://www.writebug.com/myres/static/uploads/2022/4/8/36e0b5d47844db059fc694e6be9e7352.writebug)时作为邮件附件图片base64编码的结束处。将其中间字符串截取出来进行base64解码,写入磁盘文件流,然后使用CImage类函数调用显示图片到该区域。
# 四、程序实现步骤及代码
SMTP服务器与客户端应答:
OnSend()发送函数
![](https://www.writebug.com/myres/static/uploads/2022/4/8/67a93045e0b430f946046f27fcc122c2.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/8/8c761afe17b0a42c25c58c4b65e655f3.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/8/56a54ef048e8b58fac2c09074782b9f7.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/8/62d43f2e0913180339b3f54f722822c6.writebug)
OnReceive()接收函数
![](https://www.writebug.com/myres/static/uploads/2022/4/8/1e65a6b7ab0e04a8a30840fed707167c.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/8/72c078000fe08e67f3ed17fefad8aedc.writebug)
邮件正文区显示:
显示邮件正文ShowData()
![](https://www.writebug.com/myres/static/uploads/2022/4/8/c625a50204470e7cb43adead70ea2c7a.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/8/a61c1472e724754301576240622197d5.writebug)
邮件附件图片显示:
显示图片ShowImage()
![](https://www.writebug.com/myres/static/uploads/2022/4/8/c7bdad33649a2e7efacfa61c29143047.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/8/a8af26d5708ef9c95fe07c0f5187237e.writebug)
# 五、实验总结
通过本次实验学习了如何使用CAsyncSocket类编写一个简单SMTP邮件服务器程序,加深了TCP建立连接和SMTP协议的理解。通过观察电子邮件应用程序(如 Outlook Express等)与SMTP邮件服务器的交互过程,加深对整个邮件服务系统的理解。
总之,这次编程使我对于网络协议的设计和通信有了更深的认识,提高了对这门课程的兴趣,增强了动手编程能力。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本程序编译环境是:Visual Studio 2012;系统环境是:Windows 8(64 位);测试用STMP邮件客户端是Outlook Express 2013; 三、 编写简化的SMTP服务器运行效果。 实验要求介绍 SMTP和POP3协议是目前电子邮件应用系统中最重要的两个协议。深入 理解SMTP和POP3协议的工作过程对理解整个电子邮件系统具有重要的意 义。本实验要求编写一个简化的SMTP邮件服务器,通过观察电子邮件应用程序(如 Outlook Express等)与SMTP邮件服务器的交互过程,加深对整个邮件服务系统的理解。 目的:观察电子邮件应用程序与SMTP邮件服务器的命令交互过程要求:简化的SMTP服务器 响应客户SMTP命令,将命令的交互过程和收到的邮件显示到屏幕上 支持单用户 不保存和转发收到的邮件 不作错误处理 要求能显示客户端发送的图片。
资源推荐
资源详情
资源评论
收起资源包目录
基于C++(QT)编写 SMTP 服务器并观察通信过程【100012039】 (530个子文件)
file1.bmp 36KB
test2.bmp 36KB
file1.bmp 36KB
file1.bmp 36KB
test1.bmp 9KB
bitmap1.bmp 1KB
bitmap2.bmp 446B
MySocket.cpp 10KB
MailServerDlg.cpp 4KB
MailServer.cpp 2KB
ListenSocket.cpp 688B
stdafx.cpp 135B
MailServer.exe 9.4MB
MailServer.vcxproj.filters 2KB
resource.h 2KB
stdafx.h 2KB
MailServerDlg.h 809B
MySocket.h 777B
MailServer.h 435B
ListenSocket.h 250B
targetver.h 226B
MailServer.ico 66KB
vc110.idb 3.31MB
MailServer.ilk 15.85MB
mailserver-6d200f86.ipch 86.38MB
mailserver-6d200f86.ipch 86.38MB
mailserver-6d200f86.ipch 86.38MB
file2.jpg 49KB
file2.jpg 49KB
MailServer.lastbuildstate 77B
LICENSE 1KB
MailServer.log 2KB
README.md 7KB
stdafx.obj 797KB
MySocket.obj 681KB
MailServerDlg.obj 236KB
MailServer.obj 187KB
ListenSocket.obj 154KB
MailServer.pch 35.63MB
MailServer.pdb 31.06MB
vc110.pdb 6.64MB
编写SMTP服务器并观察通信过程实验报告.pdf 622KB
pic5.png 107KB
pic3.png 52KB
pic4.png 40KB
STMP.png 38KB
pic2.png 36KB
file3.png 32KB
pic1.png 22KB
MailServer.rc 12KB
MailServer.rc2 676B
MailServer.res 1.37MB
MailServer.sdf 83.63MB
MailServer.sln 877B
MailServer.v11.suo 37KB
rc.read.1.tlog 267KB
CL.read.1.tlog 236KB
link.read.1.tlog 14KB
cl.command.1.tlog 12KB
link.command.1.tlog 6KB
CL.write.1.tlog 6KB
link.write.1.tlog 2KB
rc.command.1.tlog 2KB
rc.write.1.tlog 574B
link.5204.read.1.tlog 2B
link.9908-rc.read.1.tlog 2B
link.7376-rc.read.1.tlog 2B
link.8496.write.1.tlog 2B
link.7612.read.1.tlog 2B
link.9064-rc.read.1.tlog 2B
link.7900-mt.write.1.tlog 2B
link.7536.write.1.tlog 2B
link.8292-mt.write.1.tlog 2B
link.6296-rc.read.1.tlog 2B
link.6788-cvtres.read.1.tlog 2B
link.5648-mt.write.1.tlog 2B
link.184-cvtres.write.1.tlog 2B
link.7612-rc.write.1.tlog 2B
link.3984-mt.write.1.tlog 2B
link.5080-rc.read.1.tlog 2B
link.1364-cvtres.write.1.tlog 2B
link.8892.write.1.tlog 2B
link.9136.write.1.tlog 2B
link.8364-rc.read.1.tlog 2B
link.8584-cvtres.write.1.tlog 2B
link.8268.write.1.tlog 2B
link.8436-rc.write.1.tlog 2B
link.9136-mt.write.1.tlog 2B
link.208.write.1.tlog 2B
link.6084-rc.read.1.tlog 2B
link.6584.write.1.tlog 2B
link-rc.read.1.tlog 2B
link.9064.write.1.tlog 2B
link.5204.write.1.tlog 2B
link.7612-cvtres.read.1.tlog 2B
link.8584-mt.read.1.tlog 2B
link.4872-mt.write.1.tlog 2B
link.8268-rc.write.1.tlog 2B
link.6208-mt.write.1.tlog 2B
link.4872-mt.read.1.tlog 2B
共 530 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
神仙别闹
- 粉丝: 2668
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功