基于C#的邮件收发管理系统的设计与实现毕业论文.docx
《基于C#的邮件收发管理系统的设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《基于C#的邮件收发管理系统的设计与实现毕业论文.docx(36页珍藏版)》请在冰豆网上搜索。
基于C#的邮件收发管理系统的设计与实现毕业论文
基于C#的邮件收发管理系统的设计与实现毕业论文
1前言
1.1.研究背景
不管你是喜欢网购,每天关注游戏的最新变化、订单的物流情况的职业屌丝;还是静坐在星巴克里享受续杯咖啡,提起手机就是数十万的交易订单的高富帅。
我们都离不开电子邮件。
它像是电话留言般,在方便的时候处理机记录下信息然后通过文本、图像、声音等不同的文件格式发送给另一方。
商业营销中它不单保证了我们及时灵活的处理好每一次的商务活动,同时节约了顾客服务成本,还增进了客户关系,提高了服务质量,增加了顾客忠诚度。
根据网易邮箱发布的2013年报告,使用电子邮箱的用户中有近六成学历为大学本科及以上。
而且月收超3000人民币的占55.7%。
这就说明高端用户对邮箱需求更大,因为它不仅可以作为高效的工作邮箱,也是联系私人感情的重要沟通工具。
1.2.选题意义
虽然此类软件越来越多,相比较竞争更加艰难导致企业间对软件的功能要求愈来愈多诸如附加播放器、远程控制,复杂化的设计里面似乎已经脱离了用户本身的需求,何况用户并非每个都是计算机高手对于这样强大的软件只会变得无所适从,最终用户也不得不望而却步,转身投向更简洁的产品。
在我的使用邮箱的6年时间里实际上需要的功能也不多,也就是添加图片和附件,必要时才需要使用签名。
而根据周边的调查和咨询反应得知,其实人们使用的垫子邮箱客户端的主要功能都是纯文本邮件的收发,而一些高级的邮件形式相对较少,例如收发媒体视频邮件。
对此,利用Windows桌面系统的超高使用率而开发一款能让使用邮箱的人看得懂的软件非常重要。
这么一来,那一部分电脑小白们也可以利用电邮客户端与世界各地的朋友,同事,客户进行交流沟通。
2环境配置与需求分析
2.
2.1.系统环境
操作系统及版本:
MicrosoftWindows7UltimateServicePack1x64-basedPC
硬件信息:
CPU:
i5-2500K,@3.30GHz,3292Mhz,4个内核,4个逻辑处理器。
内存:
DDR3,1333MHz,4GB
1.
2.
2.1.
2.1.1.开发环境
MicrosoftVisualStudio2010专业版,版本10.0.40219.1SP1Rel
Microsoft.NETFramework版本4.5.50501SP1Rel
开发语言:
C#(CSHARP)
2.2.配置介绍
VisualStudio由微软公司部署的开发环境,其重新定义了集成开发环境(IDE)的界面。
VisualStudio2010同时带来了NETFramework4.0、MicrosoftVisualStudio2010CTP(CommunityTechnologyPreview--CTP),并且支持开发面向Windows7的应用程序。
Microsoft.NETFramework是用于Windows的新托管代码编程模型。
它强大功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。
.NETFramework安全解决方案基于管理代码的概念,以及由通用语言运行时(CLR)加强的安全规则,大部分管理代码需要进行验证以确保类型安全及预先定义好的其它属性的行为的安全。
而C#是由Microsoft于千禧年发布的一种编程语言,它是第一个面向组件的编程语言,其源代码会被编译成msil再运行,再到后来的版本,C#提出了纯粹的面向对象概念,以及泛型编程概念。
利用Microsoft下的开发平台,使用C#语言无疑为此次项目的进行带来极大的方便。
2.3.需求分析
我们平时接触到的电子邮件有两种使用方式。
第一种是在网站上使用,也就是一般所说的Web方式,首先登录到WebMail服务器(网页邮件服务器),通过身份验证后才可以查阅收发邮件。
如果长时间没有对WebMail服务器进行操作,则被认为登录超时,自动退出系统。
用户需要再次登录邮件服务器,才可以进行操作。
由于频繁的登录填写帐户和密码,造成了用户对电子邮件的使用产生不便。
这时出现一种不需要访问Web页面,只需要您在本地机器上使用电子邮件的相关软件,就可以直接收发、管理电子邮件。
客户端电子邮件软件一般都比WebMail服务器(网页邮件服务器)提供更为全面的功能。
使用客户端软件收发邮件,登陆时不用下载网站页面内容,速度更快;使用客户端软件收到的和曾经发送过的邮件都保存在自己的电脑中,不用上网就可以对旧邮件进行阅读和管理。
同时实现多用户,多邮箱帐户,POP3支持,对邮件管理更加快捷方便。
正是由于电子邮件客户端软的种种优点,它已经成为了人们工作和生活上进行交流必不可少的工具。
2.3.1.用户需求分析
基于此点,越来越多的人投入到了开发邮件收发系统中去了,以foxmail为例,2005年被传腾讯持逾500万美金收购,从此随之而来的邮箱系统逐渐发展成免费模式,而为了适应变化开发客户端的公司也慢慢推出了免费版本。
一些优秀的产品也面向广大群众,如:
“MozillaThunderbird”、“MirosoftOfficeOutlook”、“KMail”等等。
从使用上述的软件后可以发现,吸引用户的特别之处在于:
1与系统的融合程度高。
在“MirosoftOfficeOutlook”中,因为其软件与系统的融合,致使用户们产生一种安全感,觉得可能这样就会更加方便使用其软件的崩溃风险也得以降低。
2增加了新闻订阅功能。
这一功能的代表者非“foxmail”莫属,这样做的好处就在于用户等待回信的闲暇中可以关注新闻动态,此外用户还可以自行添加订阅。
3增加聊天功能。
在“MozillaThunderbird”中,拥有一个相当有趣的功能,那就是可以绑定GoogleTalk,FaceBookandTwitter账号与好友进行实时聊天,但是由于国家防火墙的限制,使得这一新颖的功能在国内变得鸡勒。
从以上3点可以看出高端用户在需求上对邮件客户端的基本需求还是不变的,但部分企业会根据用户不同的特点而增添有趣的功能,在本项目中由于面向基础用户,所以此次开发会本着简洁,简单的特点而为他们服务。
2.3.2.功能需求分析
依据用户需求的分析可得,本次项目中系统功能需求并非十分复杂。
其主要功能为两个;邮件接收和邮件发送。
其中,邮件接收部分会为用户增加一个邮件列表栏,那样用户就能清楚的看见自己的邮件总数。
然后是发送邮件部分,用户既可以在编写邮件时突然中断编写然后保存到草稿箱。
2.4.可行性分析
每天办公对邮件的按时接收与发送有着极大的需求,所以,开发出一款能实现接收和附加的文件发送功能的电子邮件客户端非常有必要。
在C#中集合了许多与邮件收发相关的类,这样一来就节约了开发的时间成本。
开发一款在终端接收发送邮件功能的系统远远比webmail模式方便。
因为,web需要顾虑到不同浏览器带来的格式兼容问题,使用客户端可以离线情况下看到之前的邮件而不需额外登陆网站,同时也大大避免了账号密码被盗的可能。
3系统框架
3.
3.1.系统模块设计
图3.1
由上图可知,在程序中主要分成了6个部分:
1)登陆类,2)主界面内容,3)接收邮件,4)邮件发送类,5)Socket类,还有一个为类集,用作收取邮件时的解码。
3.2.程序总体流程
图3.2
在这个流程图中可以看到,用户第一步先要创建登陆邮件系统的账户填写相关信息例如pop3服务器地址、端口,以及smtp服务器地址、端口,然后在在主界面查看邮箱的收件箱点击相关列表,接着需要写邮件的话就点击写邮件功能。
3.3.软件功能框图
图3.3
3.4.系统技术介绍
3.
3.1.
3.2.
3.3.
3.4.
3.4.1.POP3服务
首先解释一下何为POP3服务。
POP3全称(PostOfficeProtocol3)因为其已经发展为第3版,所以称之为POP3,是TCP/IP协议族中的一名成员,本意是用于支持使用客户端远程管理在服务器上的电子邮件。
它定义了如何将个人PC加入Internet的邮件服务器和下载电子邮件。
1.
2.
3.
3.1.
3.2.
3.3.
3.4.
3.4.1.
3.4.1.1.pop工作原理
其工作原理可以简单的解释为:
电子邮件客户端中启动邮件程序以连接邮件服务器,然后利用命令码下载指定电子邮件,下载完成后用户可以自主选择删除与否。
在第3版中邮件服务器可以支持只下载而服务器端并不删除。
这样的访问模式同时称之为存储转发服务。
当客户机与服务器建立连接后客户机会由认可状态转入处理状态,一系列操作后客户端发出quit命令,退出处理状态进入更新状态,之后重新返回认证状态确认身份后断开与服务器的链接集体原理如下图:
图3.4
3种状态可以描述为:
AUTHORIZATION(授权),TRANSACTION(处理),UPDATE(更新)。
3.4.1.1.
3.4.1.2.pop工作特性
在通信过程中POP3客户会像服务器发送命令并等待响应,即前文提及的命令码,接着服务器会以+OK/-ERR指出其操作状态成功与否。
如下图就是POP3的命令码:
表3.1
命令
服务器返回响应
描述
NOOP
+OK/-ERR
处理服务器返回一个肯定的响应
QUIT
结束
USER–username
+OK/-ERR
处理用户名
STAT
+OKcountsize/-ERR
处理请求服务器发回关于邮箱的统计数据。
如邮件总数和总的字节数
DELE–msg
+OKNo.xDeleted/-ERR
处理服务器将由参数标识的邮件标记为删除,由quit命令执行
LIST–msg
+OKcountsize/-ERR
处理返回邮件数量和每个邮件的大小
RETR–msg
+OKNo.xsize/-ERR
处理返回参数标识的邮件全部文本
APOP–name/digest
认可digest是MD5消息
RSET
+OK/-ERR
处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP–num
+OK/-ERR
处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数
PASS–password
+OK/ERR
处理用户密码
UIDL–msg
+OK/-ERR
处理返回邮件的唯一标识符
上表中已列出多出POP服务所支持的命令码。
另外,在通信过程中我们需要注意到POP3的默认通信端口为:
110。
3.4.2.SMTP服务
SMTP全称(SimpleMailTransferProtocol)简单邮件传输协议,由一组用于从源地址到目的地址传送邮件的规则,自主控制新建的中转方式。
它同样属于TCP/IP协议族,通过此协议所指定的服务器,就可以把E-Mail寄到收件人的服务器上。
3.4.2.
3.4.2.1.smtp工作原理
smtp的工作并非只有一种情况,其可以分为:
1是电子邮件从客户机传输到服务器;2是从某一个服务器传输到另一个服务器。
每次通信,客户机都要发送一段基于ASC-II的文本,并以CR和LF符号结束。
当然这些都是工作在25端口号。
不妨来看下其通信模型:
图3.5
3.4.2.2.smtp工作特性
同样,smtp的工作也是需要向服务器发送命令码。
如下表:
表3.2
描述
命令
响应码
发送邮件到用户终端和邮箱
SAMLFROM–host
向服务器标识用户身份,返回邮件服务器身份
HELO–domain
250/null
终止邮件会话
QUIT
221
开始信息写作
DATA
354-Pleaseinputmessage(endwith.)-250OK/null
查询服务器支持什么命令,返回命令中的信息
HELP–command
在主机上初始化一个邮件会话
MAILFROM–host
250/null
无操作,服务器应响应OK
NOOP
发送邮件到用户终端
SENDFROM–host
重置会话,当前传输被取消
RSET
标识单个的邮件接收人;常在MAIL命令后面可有多个rcptto:
RCPTTO–user
250/null
接收端和发送端交换角色
TURN
用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
VRFY–user
发送邮件到用户终端或邮箱
SOMLFROM–host
验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
EXPN–num
在上图中会设计到一个响应码,唯一与POP响应方式不同的是smtp服务器会响应一个3位的响应码,每个位都会有其特别的含义,如下:
a.1xx:
准备状态,表示命令已接收,但需要等待后续操作。
b.2xx:
完成状态,表示命令已执行完成。
c.3xx:
中间状态,表示命令已接收单未完成。
d.4xx:
临时未完成转台,表示命令未被接收或请求不存在,客户端可以重试。
e.5xx:
永久未完成状态,表示命令未被接受或请求不存在,smtp不要再尝试。
第2位是分类的含义:
a.x0x:
定义错误,不符合任何功能分类命令。
b.x1x:
信息类型。
c.x2x:
链接类型。
d.x3x:
未定义。
e.x4x:
未定义。
f.x5x:
邮件系统相关的操作。
第3位则是前一位的子级。
下面给出一些常见的响应码与含义:
表3.3
响应码
含义
211
系统状态或者系统帮助响应
214
回复求助信息
220
服务就绪
221
服务关闭传输通道
250
邮件操作完成,应答正确
251
用户非本地,将转发
354
开始邮件内容传输
421
服务不可用
450
指定的邮件服务器无法提供服务(如邮箱忙)
451
放弃要求的操作;处理过程出错
452
系统空间不足
500
格式错误
501
参数格式错误
502
不支持此命令
503
错误的命令序列
504
不支持此命令参数
550
指定的邮件服务器有误(找不到)
551
用户不是本地
552
因超出配额空间,而无法传送邮件
553
指定的邮箱有误
554
操作失败
3.5.本章总结
本章节中介绍了系统大致模块,和设计中所用到的技术知识。
另外值得关注的是在接收邮件时用到了第三方的互联网邮件扩展,它也是一个互联网标准,早在1992年已经应用于电子邮件系统,但后来也应用到了浏览器。
MIME的特点在于不仅能支持非ASC-II字符还可以支持二进制格式附件等多种格式的邮件消息。
这些标准都被定义在了RFC2045,RFC2046,RFC2047,RFC2048,RFC2049等RFC中。
4详细设计
本系统运用MicrosoftVisualStudio2010下的C#窗体编程,在本章节中将会以介绍界面模块的方式将设计呈现出来。
4.
4.1.登陆设计
登陆界面中可以清楚的看到该界面包含了创建的账号及密码其下方则是pop3的服务器地址、端口号;smtp服务器地址及端口号。
图4.1
此界面主要有2个功能:
1.登陆pop3服务器。
当用户点击登录按钮,后台会调用SocketUtil类中的静态方法创建连接pop3服务器的套接字,同时绑定110端口。
2.退出程序。
使用Application.Exit();退出程序。
4.
4.1.
4.1.1.登陆过程
这里涉及到3个不同的数据类型:
1)Socket:
通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。
在Internet上的主机一般运行了多个服务软件,同时提供几种服务。
没中服务都会打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
2)NetworkStream:
它提供了在组织模式下通过Stream套接字发送和接收数据的方法。
然后利用StreamReader流读取从服务器返回来的响应信息。
3)StreamReader:
一个从一个标准的文本文件中读取信息行的输入输出流。
StreamReader的默认为UTF-8编码,除非指定,而不是默认的ANSI代码页,当前系统,否则。
UTF-8的处理Unicode字符正确,并提供在操作系统的本地化版本一致的结果。
当点击登录按钮时,激活LoginBtn_Click事件,就会调用SocketUtil类中ConnectpopServer静态方法,在该方法中,Socket套接字将被创建,并使用pop服务默认的“110”端口,同时该套接字会通过NetworkStream接收数据,当客户机将用户账号及密码化作命令码的形式发送到邮件服务器后,服务器会放回响应的响应码,这里就用到了StreamReader.Readline()方法读取流中返回的响应信息。
假如返回的信息中包括“+OK”,则窗体会成功跳转至主页面。
4.
4.1.
4.1.1.
4.1.2.登陆流程图
图4.2
4.2.主界面设计
在主界面中我定制了一个treeView控件用作显示本邮箱的收件箱,之所以会选择TreeView,是因为它拥有分级视图机制,根据节点创建方式不同而建立友好的分层目录结构。
另外它还能支持许多功能,例如:
•节点文本既可以显示为纯文本也可以显示为超链接。
•站点导航,通过与SiteMapDataSource控件集成实现。
•能够在每个节点旁边显示复选框。
•数据绑定,它允许控件的节点绑定到XML、表格或关系数据。
•客户端节点填充(在支持的浏览器上)。
•借助编程方式访问TreeView对象模型以动态地创建树、填充节点、设置属性等。
•可通过主题、用户定义的图像和样式自定义外观。
当点击了TreeView中创建的电子邮箱账号下的子节点“收件箱”时,该节点的字体颜色会变成“DarkRed”,然后利用Delegate关键字声明一个调用listbox控件的方法在该方法中启用委托的异步调用然后显示出电子邮箱中的所有邮件。
在主界面右侧,是用于显示邮件内容的webbrowser控件。
关于此控件可以理解为于Windows窗体应用程序中承载网页以及支持浏览器的其它文档都可以显示在上面。
例如,可以使用它在应用程序中提供基于HTML的集成用户帮助或Web浏览功能。
此外,还可以使用WebBrowser控件向Windows窗体客户端应用程序添加基于Web的现有控件。
从服务器返回邮件内容到显示在WebBrowser控件的过程中,用到了MailInfo类,MediaType类,MessageEx类,QP类QuotedPrintableEncoding类以及ReadMail类。
图4.3
4.2.
4.2.1.读取邮件
首先,客户端会利用SendCommand(str)方法将“RETRx”及带着邮件序号的命令码发送到服务器,然后服务器接收到该命令后将标识符中唯一的邮件序号的正文内容发送到客户端,客户端利用返回数据最后一个字符为“.”的特征,将其放入Queue队列中,然后利用解析整封邮件的结构。
通过ReadMail类中Parsemail()方法将解析出的结果放入MailInfo的对象中。
这个过程是这样执行的,首先Readmail类中有一个定义的MailInfo对象,通过Pasemail()方法调用ParseHeader()将邮件的头部和正文解析出来,然后用ProcessHeader()讲头部所包含的信息获取出来,ParseBody()使用同样的方法将邮件解析接着继续调用SetDecodedContentStream()获取邮件编码类型等等的信息。
在ParseMail()解析邮件信头时用到了3中不同的编码方式,分别是:
1)Base64:
这是一种网络上最常见的用于传输8bit字节的编码方式,它可用于HTTP环境下传递较长的标识信息。
这种编码方式不仅比较简短,同时也具有不可读性,即所有编码的数据不会被人用肉眼直接看到。
2)QuotedPrintable:
中文译作“可打印字符引用编码”。
它是一种可使7bit数据通路上传输8bit数据,或者更一般地说在非8bitclean媒体上正确处理数据。
因为MIME定义了在e-mail中发送各种信息的方法,包括非英语的其它语言文本信息,使用非ASCII的其它字符编码。
这些编码常常使用ASCII范围以外的值来编码字符,因此需要进一步被编码以便适用于non-8-bit-clean环境。
Quoted-printable编码就是把任意字节序列映射为ASCII字符序列。
Quoted-printable自身并不是一种字符编码方案,而是一种在面向字节的编码时的数据编码布置(datacodinglayer),即由编码的字符序列如何表示为字节流QP是可逆的,即可以由原来的非ASCII字符流与QP编码后的字节流来回转换而不失信息。
Quoted-printable与Base64是两种基本的MIME内容传输编码,如果通常的"8bit"编码不适用。
如果文本不含很多非ASCII字符,quoted-printable编码的结果的可读性相当好而且紧凑。
但是,如果输入的大多数是非ASCII字符,那么quoted-printable编码将变得既不可读又非常低效。
Base64并不是人可读的,但对于所有数据其成本均匀,适用于二进制数据与非拉丁字母语言文本。
3)SevenBit:
其实这货就是我们平时学习字符编码所用到的ASC-II编码,前7位用作存储128个不同的数字,第八位用作奇偶校验位检测传输错误。
即使在这些新的标准将逐步实施,7位ASCII表仍然是现代计算和数据存储的支柱。
它是所有计算机都明白,几个真正标准之一,从电子邮件到web浏览到文档编辑不能没有它。
它是如此无处不在术语"文件文本"和"ascii文件"来对于大多数计算机用户的意思是同样的事。
接着MailInfo对象就将解析好的邮件进一步解码。
最后利用MessageEx对象解码结果呈现出来最后显示到webBrowser中。
下面介绍RFC822中提到的信头字段:
表4.1
与发信方有关的信头字段
格式:
From:
MailAddress
举例:
From:
xxx@
写信人字段。
邮件的制作人,给出他的电子信箱地址。
创建者对信件的原始内容负责。
格式:
Sender:
MailAddress
举例:
From:
xxx@
Sender:
zi@
发送者字段。
说明实际提交发送这个信件的人,给出他的电子信箱地址。
当发信人与写信人不一样时使用。
比如,秘书替经理发信。
发送者对发送负责。
格式:
Reply-TO:
MailAddress
举例:
From:
xxx@
From:
zi@
回复字段。
指定应当把回信发到哪里。
如果有此字段,回信将会发给它指定的邮箱,而不会发给From字段指定的邮箱。
比如,发送的是经理的信,但回信应交办公室处理。
与收信方有关的信头字段
格式:
TO:
MailAddresslist
举例:
TO:
xxx@
收信人字段。
指定主要收信人的邮箱地址,可以是多个邮箱地址的列表,地址中间用逗号隔开。
格式:
Cc:
MailAddresslist
举例:
C