课 程 设 计
项目名称: 垃圾邮件过滤系统设计
课程名称: 计算机网络编程技术
信息工程学院计算机系
目录
一、设计题目 ---------------------------------------------------- 2
二、设计要求 ---------------------------------------------------- 2
三、小组分工 ---------------------------------------------------- 2
四、设计内容 ---------------------------------------------------- 2
4.1 设计原理------------------------------------------------- 2
4.2 设计协议------------------------------------------------- 3
4.3 设计流程------------------------------------------------- 3
4.3.1 ESMTP协议的工作流程-------------------------------- 3
4.3.2 POP3协议的工作流程--------------------------------- 4
4.4 运行环境------------------------------------------------- 5
五、 功能模块分析 ----------------------------------------------- 5
5.1 发送功能模块--------------------------------------------- 5
5.2 接收功能模块--------------------------------------------- 7
六、界面设计 ---------------------------------------------------- 8
6.1 邮件发送界面--------------------------------------------- 8
6.2 邮件接收界面--------------------------------------------- 9
七、设计不足之处及遇到的问题 ----------------------------------- 10
6.1 设计不足之处-------------------------------------------- 10
6.2 遇到的问题---------------------------------------------- 11
八、心得体会 --------------------------------------------------- 11
一、设计题目
垃圾邮件过滤系统设计
二、设计要求
① 能够群发邮件,发送内容可以是广告等垃圾信息;
② 接收方地址可以输入、从文件导入、从地址簿导入;
③ 接收方能够自动检测垃圾邮件。判定对象可以依据IP地址、邮件主题、邮件内容等组
合。可以采用关键词的模糊匹配、或者邮件重复度比较、或者饱和攻击可能性,等等来设计
判定规则。
三、小组分工
接收方地址可以输入、从文件导入、从地址簿导入。
接收方能够自动检测垃圾邮件。判定对象可以依据IP地址、邮件主题、邮件内容
等组合。 能够群发邮件,发送内容可以是广告等垃圾信息。
四、设计内容
4.1 设计原理
邮件系统主要由服务器和客户端组成,服务器包括发送服务器和接收服务器。系统构成
如图4.1所示。邮件系统包括发送和接收两部分,图中实线部分表示的是客户A将邮件发送
出去到客户B接收下来的过程,虚线部分则是客户A如何从客户B处接收邮件的过程。
图4.1 邮件系统的工作原理
4.2 设计协议
(1)简单邮件传送协议(SMTP协议),是Internet上传输邮件的标准协议,用于提交和传
送邮件。SMTP的目标是可靠、高效地传送邮件,它通常用于把邮件从客户端传输到服务器,
以及从一台服务器传输到另一台服务器。
ESMTP(扩展SMTP)是对标准SMTP的扩展,它与SMTP的区别在于,ESMTP服务器会
要求用户提供用户名和密码以便验证身份;而使用SMTP是不需要验证用户账户。
(2)邮局协议第三版(POP3协议),也是Internet上传输邮件的标准协议,它提供信息存
储功能,为用户保存收到的邮件,且从邮件服务器上下载这些邮件。
4.3 设计流程
4.3.1 ESMTP协议的工作流程
ESMTP的工作流程主要包含建立连接、传送信封、传送数据和断开连接4个阶段,其
流程图如图4.2所示。
图4.2 ESMTP工作流程图
4.3.2POP3协议的工作流程
POP3的工作流程图如图4.3所示。主要包括认证阶段、邮件接收阶段、更新阶段。
图4.3 POP3协议的工作流程
4.4 运行环境
Visual studio 2008/ Visual studio 2010、联网的PC机。
五、 功能模块分析
5.1发送功能模块
通过.Mail的SmtpClient类实例化一个smtp客户端client,用
MailAddress类生成邮件对象,通过client.send()方法发送邮件。发送方能通过地址
簿,导入等功能输入多个接收方邮箱,实现群发功能。
主要代码如下:
//确定smtp服务器地址。实例化一个Smtp客户端
.Mail.SmtpClient client = new
.Mail.SmtpClient(cmbBoxSMTP.Text);
//生成一个发送地址
string strFrom = txtUserName.Text.Trim();
MailAddress from = new MailAddress(strFrom);
string[] rece = txtEmail.Text.Split(';');
for (int i = 0; i < rece.Length; i++)
{
MailAddress to = new MailAddress(rece[i]);
MailMessage message = new MailMessage(from, to);//实例化一个电子邮件
//为 message 添加附件
foreach (TreeNode treeNode in treeViewFileList.Nodes)
{
//得到文件名
string fileName = treeNode.Text;
//判断文件是否存在
if (File.Exists(fileName))
{
//构造一个附件对象
Attachment attach = new Attachment(fileName);
//得到文件的信息
ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate =
System.IO.File.GetCreationTime(fileName);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
disposition.ReadDate =
System.IO.File.GetLastAccessTime(fileName);
//向邮件添加附件
message.Attachments.Add(attach);
}
else
{
MessageBox.Show("文件" + fileName + "未找到!");
}
}
message.Subject = txtSubject.Text;
message.SubjectEncoding = Encoding.UTF8;
message.Body = rtxtBody.Text;
message.BodyEncoding = Encoding.UTF8;
client.DeliveryMethod = work;
message.BodyEncoding = System.Text.Encoding.UTF8;
//message.IsBodyHtml = false;
//如果服务器支持安全连接,则将安全连接设为true。163不支持
//client.EnableSsl = false;
//设置用户名和密码。
//string userState = message.Subject;
eDefaultCredentials = false;
string username = txtUserName.Text;//用户名
string passwd = txtPassword.Text;//密码
NetworkCredential myCredentials = new NetworkCredential(username,
passwd);
client.Credentials = myCredentials;
//发送邮件
client.Send(message);
//提示发送成功
MessageBox.Show("成功向"+rece[i]+"发送!");
5.2 接收功能模块
接收方根据POP3协议,向邮件服务器发送USER加用户名,PASS加密码登入
邮箱,登入成功后发送STAT得到邮件数量,再通过发送RETR加邮件下标(第几封)
得到该邮件的内容。内容中To:之后为收信人,From:之后为发信人,Subject:
之后为主题,全都获取后根据内容中提示的编码类型,对正文进行解码。如Base64
编码采用如下方式解码:
private string DecodeBase64(string p_Text)
{