《基于C#的邮件收发管理系统的设计与实现(共42页).docx》由会员分享,可在线阅读,更多相关《基于C#的邮件收发管理系统的设计与实现(共42页).docx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上基于C#的邮件收发管理系统的设计与实现学 院: 计算机学院 专 业: 计算机科学与技术 姓 名: 周梓兴 学 号: 7 指导老师: 雷剑刚 职 称: 讲师 中国珠海二一四 年 四 月专心-专注-专业诚信承诺书本人郑重承诺:我所呈交的毕业设计是在指导教师的指导下,独立开展研究取得的成果,文中引用他人的观点和材料,均在文后按顺序列出其参考文献,设计使用的数据真实可靠。承诺人签名: 日期: 年 月 日基于C#的邮件收发管理系统的设计与实现摘要从1987年我国第一封从北京发送到德国的电子邮件到2013年仅网易邮箱每天得拦截逾4亿封垃圾邮件。电子邮件不仅使我们的工作变得简单同时
2、还方便了生活。最重要的是,电子邮件是整个网间网以至所有其他网络系统中直接面向人与人之间信息交流的系统,它的数据发送方和接收方都是人,所以极大地满足了大量存在的人与人通信的需求。电子邮件,自打诞生以来,它的发展可谓突飞猛进,日新月异,令人刮目相看。本文详细阐述一个在Windows系统下的邮件客户端系统,该系统论述了一个基于C#的邮件客户端系统的设计原理、设计思想及具体的实现过程。其中包括了电子邮件中附件的接收,和发送简单邮件。关键词:电子邮件系统;C#;Visual Studio2010;POP3;SMTPE-Mail manage system based on c#AbstractOn 19
3、87, our country the first E-mail sent to Germany from Beijing, but in 2013 to only netease E-mails to intercept more than 400 million spam emails every day. E-mail is not only making our work but become simple and convenient life. Most importantly, email is the whole network between the network and
4、all other network system directly to interpersonal information communication system, its data sender and receiver are all human, so greatly satisfy the needs of a large amount of existence of human communication.E-mail, since birth, it is flew up in a sudden, the development of rapid and impressive.
5、This article elaborated a mail client system under Windows system, the system this paper discusses a mail client system based on c # design principle, design idea and the concrete implementation process.Including the receiving E-mail attachment, and send a simple email.Keywords: E-Mail Manage System
6、#; Visual Studio2010; POP3; SMTP目录1 前言1.1. 研究背景不管你是喜欢网购,每天关注游戏的最新变化、订单的物流情况的职业屌丝;还是静坐在星巴克里享受续杯咖啡,提起手机就是数十万的交易订单的高富帅。我们都离不开电子邮件。它像是电话留言般,在方便的时候处理机记录下信息然后通过文本、图像、声音等不同的文件格式发送给另一方。商业营销中它不单保证了我们及时灵活的处理好每一次的商务活动,同时节约了顾客服务成本,还增进了客户关系,提高了服务质量,增加了顾客忠诚度。根据网易邮箱发布的2013年报告,使用电子邮箱的用户中有近六成学历为大学本科及以上。而且月收超3000人民币的
7、占55.7%。这就说明高端用户对邮箱需求更大,因为它不仅可以作为高效的工作邮箱,也是联系私人感情的重要沟通工具。1.2. 选题意义虽然此类软件越来越多,相比较竞争更加艰难导致企业间对软件的功能要求愈来愈多诸如附加播放器、远程控制,复杂化的设计里面似乎已经脱离了用户本身的需求,何况用户并非每个都是计算机高手对于这样强大的软件只会变得无所适从,最终用户也不得不望而却步,转身投向更简洁的产品。在我的使用邮箱的6年时间里实际上需要的功能也不多,也就是添加图片和附件,必要时才需要使用签名。而根据周边的调查和咨询反应得知,其实人们使用的垫子邮箱客户端的主要功能都是纯文本邮件的收发,而一些高级的邮件形式相对
8、较少,例如收发媒体视频邮件。对此,利用Windows桌面系统的超高使用率而开发一款能让使用邮箱的人看得懂的软件非常重要。这么一来,那一部分电脑小白们也可以利用电邮客户端与世界各地的朋友,同事,客户进行交流沟通。2 环境配置与需求分析2.2.1. 系统环境操作系统及版本:Microsoft Windows 7 Ultimate Service Pack 1 x64-based PC硬件信息:CPU: i5-2500K, 3.30GHz,3292 Mhz,4 个内核,4 个逻辑处理器。内存:DDR3,1333MHz,4GB1.2.2.1.2.1.1. 开发环境Microsoft Visual St
9、udio 2010专业版,版本10.0.40219.1 SP1RelMicrosoft .NET Framework 版本 4.5.50501 SP1Rel开发语言:C# (C SHARP)2.2. 配置介绍Visual Studio由微软公司部署的开发环境,其重新定义了集成开发环境(IDE)的界面。Visual Studio 2010同时带来了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview-CTP),并且支持开发面向Windows 7的应用程序。Microsoft .NET F
10、ramework是用于Windows的新托管代码编程模型。它强大功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。.NET Framework安全解决方案基于管理代码的概念,以及由通用语言运行时(CLR)加强的安全规则,大部分管理代码需要进行验证以确保类型安全及预先定义好的其它属性的行为的安全。而C#是由Microsoft于千禧年发布的一种编程语言,它是第一个面向组件的编程语言,其源代码会被编译成msil再运行,再到后来的版本,C#提出了纯粹的面向对象概念,以及泛型编程概念。利用Microsoft下的开发平台,使用C#语言无
11、疑为此次项目的进行带来极大的方便。2.3. 需求分析我们平时接触到的电子邮件有两种使用方式。第一种是在网站上使用,也就是一般所说的Web方式,首先登录到WebMail服务器(网页邮件服务器),通过身份验证后才可以查阅收发邮件。如果长时间没有对WebMail服务器进行操作,则被认为登录超时,自动退出系统。用户需要再次登录邮件服务器,才可以进行操作。由于频繁的登录填写帐户和密码,造成了用户对电子邮件的使用产生不便。这时出现一种不需要访问Web页面,只需要您在本地机器上使用电子邮件的相关软件,就可以直接收发、管理电子邮件。客户端电子邮件软件一般都比WebMail服务器(网页邮件服务器)提供更为全面的
12、功能。使用客户端软件收发邮件,登陆时不用下载网站页面内容,速度更快;使用客户端软件收到的和曾经发送过的邮件都保存在自己的电脑中,不用上网就可以对旧邮件进行阅读和管理。同时实现多用户,多邮箱帐户, POP3支持,对邮件管理更加快捷方便。正是由于电子邮件客户端软的种种优点,它已经成为了人们工作和生活上进行交流必不可少的工具。2.3.1. 用户需求分析基于此点,越来越多的人投入到了开发邮件收发系统中去了,以foxmail为例,2005年被传腾讯持逾500万美金收购,从此随之而来的邮箱系统逐渐发展成免费模式,而为了适应变化开发客户端的公司也慢慢推出了免费版本。一些优秀的产品也面向广大群众,如:“Moz
13、illa Thunderbird”、“Mirosoft Office Outlook”、“KMail”等等。从使用上述的软件后可以发现,吸引用户的特别之处在于:1 与系统的融合程度高。在“Mirosoft Office Outlook”中,因为其软件与系统的融合,致使用户们产生一种安全感,觉得可能这样就会更加方便使用其软件的崩溃风险也得以降低。2 增加了新闻订阅功能。这一功能的代表者非“foxmail”莫属,这样做的好处就在于用户等待回信的闲暇中可以关注新闻动态,此外用户还可以自行添加订阅。3 增加聊天功能。在“Mozilla Thunderbird”中,拥有一个相当有趣的功能,那就是可以绑定
14、Google Talk,FaceBook and Twitter 账号与好友进行实时聊天,但是由于国家防火墙的限制,使得这一新颖的功能在国内变得鸡勒。从以上3点可以看出高端用户在需求上对邮件客户端的基本需求还是不变的,但部分企业会根据用户不同的特点而增添有趣的功能,在本项目中由于面向基础用户,所以此次开发会本着简洁,简单的特点而为他们服务。2.3.2. 功能需求分析依据用户需求的分析可得,本次项目中系统功能需求并非十分复杂。其主要功能为两个;邮件接收和邮件发送。其中,邮件接收部分会为用户增加一个邮件列表栏,那样用户就能清楚的看见自己的邮件总数。然后是发送邮件部分,用户既可以在编写邮件时突然中断
15、编写然后保存到草稿箱。2.4. 可行性分析每天办公对邮件的按时接收与发送有着极大的需求,所以,开发出一款能实现接收和附加的文件发送功能的电子邮件客户端非常有必要。在C#中集合了许多与邮件收发相关的类,这样一来就节约了开发的时间成本。开发一款在终端接收发送邮件功能的系统远远比webmail模式方便。因为,web需要顾虑到不同浏览器带来的格式兼容问题,使用客户端可以离线情况下看到之前的邮件而不需额外登陆网站,同时也大大避免了账号密码被盗的可能。3 系统框架3.3.1. 系统模块设计SocketUtil类登陆类主界面接收邮件邮件发送MailInfo类MediaTypeo类MessageEx类Quot
16、edPrintableEncode类ReadMail类图 3.1由上图可知,在程序中主要分成了6个部分:1)登陆类,2)主界面内容,3)接收邮件,4)邮件发送类,5)Socket类,还有一个为类集,用作收取邮件时的解码。3.2. 程序总体流程创建邮件账号查看邮件邮件发送图 3.2在这个流程图中可以看到,用户第一步先要创建登陆邮件系统的账户填写相关信息例如pop3服务器地址、端口,以及smtp服务器地址、端口,然后在在主界面查看邮箱的收件箱点击相关列表,接着需要写邮件的话就点击写邮件功能。3.3. 软件功能框图邮件收发系统账户信息邮件数据主界面显示邮件编写Socket邮件头部邮件正文页面分栏草稿
17、箱存储Pop3Smtp图 3.33.4. 系统技术介绍3.3.1.3.2.3.3.3.4.3.4.1. POP3服务首先解释一下何为POP3服务。POP3全称(Post Office Protocol 3)因为其已经发展为第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工作原理其工作原理可以简单的解释为:电子邮件客户端中启动邮件程序以连接邮件服务器,然后利用命令码下载指定电子邮件
18、,下载完成后用户可以自主选择删除与否。在第3版中邮件服务器可以支持只下载而服务器端并不删除。这样的访问模式同时称之为存储转发服务。当客户机与服务器建立连接后客户机会由认可状态转入处理状态,一系列操作后客户端发出quit命令,退出处理状态进入更新状态,之后重新返回认证状态确认身份后断开与服务器的链接集体原理如下图:图 3.43种状态可以描述为:AUTHORIZATION(授权),TRANSACTION(处理),UPDATE(更新)。3.4.1.1.3.4.1.2. pop工作特性在通信过程中POP3客户会像服务器发送命令并等待响应,即前文提及的命令码,接着服务器会以+OK/-ERR指出其操作状态
19、成功与否。如下图就是POP3的命令码:表 3.1命令服务器返回响应描述NOOP+OK/-ERR处理服务器返回一个肯定的响应QUIT结束USER username+OK/-ERR处理用户名STAT+OK count size/-ERR处理请求服务器发回关于邮箱的统计数据。如邮件总数和总的字节数DELE msg+OK No.x Deleted/-ERR处理服务器将由参数标识的邮件标记为删除,由quit命令执行LIST msg+OK count size/-ERR处理返回邮件数量和每个邮件的大小RETR msg+OK No.x size/-ERR处理返回参数标识的邮件全部文本APOP name/di
20、gest认可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全称(Simple Mail Transfer Protocol) 简单邮件传输协议,由一组用于从源地址到目的地址传送邮件的规则,自主控制新建的
21、中转方式。它同样属于TCP/IP协议族,通过此协议所指定的服务器,就可以把E-Mail寄到收件人的服务器上。3.4.2.3.4.2.1. smtp工作原理smtp的工作并非只有一种情况,其可以分为:1是电子邮件从客户机传输到服务器;2是从某一个服务器传输到另一个服务器。每次通信,客户机都要发送一段基于ASC-II的文本,并以CR和LF符号结束。当然这些都是工作在25端口号。不妨来看下其通信模型:图 3.53.4.2.2. smtp工作特性同样,smtp的工作也是需要向服务器发送命令码。如下表:表 3.2描述命令响应码发送邮件到用户终端和邮箱SAML FROM host向服务器标识用户身份,返回
22、邮件服务器身份HELO domain250/null终止邮件会话QUIT221开始信息写作DATA354 - Please input message (end with . ) - 250 OK/null查询服务器支持什么命令,返回命令中的信息HELP command在主机上初始化一个邮件会话MAIL FROM host250/null无操作,服务器应响应OKNOOP发送邮件到用户终端SEND FROM host重置会话,当前传输被取消RSET标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:RCPT TO user250/null接收端和发送端交换角色TURN用于验证指定的
23、用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令VRFY user发送邮件到用户终端或邮箱SOML FROM host验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用EXPN num在上图中会设计到一个响应码,唯一与POP响应方式不同的是smtp服务器会响应一个3位的响应码,每个位都会有其特别的含义,如下:a. 1xx:准备状态,表示命令已接收,但需要等待后续操作。b. 2xx:完成状态,表示命令已执行完成。c. 3xx:中间状态,表示命令已接收单未完成。d. 4xx:临时未完成转台,表示命令未被接收或请求不存在,客户端可以重试。e. 5xx:永久未完成状态,表示命令未被接受或请
24、求不存在,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参数格式
25、错误502不支持此命令503错误的命令序列504不支持此命令参数550指定的邮件服务器有误(找不到)551用户不是本地552因超出配额空间,而无法传送邮件553指定的邮箱有误554操作失败3.5. 本章总结本章节中介绍了系统大致模块,和设计中所用到的技术知识。另外值得关注的是在接收邮件时用到了第三方的互联网邮件扩展,它也是一个互联网标准,早在1992年已经应用于电子邮件系统,但后来也应用到了浏览器。MIME的特点在于不仅能支持非ASC-II字符还可以支持二进制格式附件等多种格式的邮件消息。这些标准都被定义在了 RFC2045,RFC2046,RFC2047,RFC2048,RFC2049:Mu
26、ltipurpose Internet Mail Extensions(多用途Internet邮件扩展),都是基于对RFC822的描述拓展。关于RFC822,它是电子邮件的标准格式,因为每封邮件邮两个部分:信头和主题。通过协议标准定义传输的格式。RFC2045,RFC2046,RFC2047,RFC2048,RFC2049 等RFC中。4 详细设计本系统运用Microsoft Visual Studio 2010 下的C#窗体编程,在本章节中将会以介绍界面模块的方式将设计呈现出来。4.4.1. 登陆设计登陆界面中可以清楚的看到该界面包含了创建的账号及密码其下方则是pop3的服务器地址、端口号;
27、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:它提供
28、了在组织模式下通过Stream套接字发送和接收数据的方法。然后利用StreamReader流读取从服务器返回来的响应信息。3)StreamReader:一个从一个标准的文本文件中读取信息行的输入输出流。 StreamReader的默认为UTF-8编码,除非指定,而不是默认的ANSI代码页,当前系统,否则。UTF-8的处理Unicode字符正确,并提供在操作系统的本地化版本一致的结果。当点击登录按钮时,激活LoginBtn_Click事件,就会调用SocketUtil类中ConnectpopServer静态方法,在该方法中,Socket套接字将被创建,并使用pop服务默认的“110”端口,同时该
29、套接字会通过NetworkStream接收数据,当客户机将用户账号及密码化作命令码的形式发送到邮件服务器后,服务器会放回响应的响应码,这里就用到了StreamReader.Readline()方法读取流中返回的响应信息。假如返回的信息中包括“+OK”,则窗体会成功跳转至主页面。4.4.1.4.1.1.4.1.2. 登陆流程图“登陆”绑定NetworkStream创建socketStreamReader,读取流YES主界面退出Fail图 4.24.2. 主界面设计在主界面中我定制了一个treeView控件用作显示本邮箱的收件箱,之所以会选择TreeView,是因为它拥有分级视图机制,根据节点创建
30、方式不同而建立友好的分层目录结构。另外它还能支持许多功能,例如: 节点文本既可以显示为纯文本也可以显示为超链接。 站点导航,通过与 SiteMapDataSource 控件集成实现。 能够在每个节点旁边显示复选框。 数据绑定,它允许控件的节点绑定到 XML、表格或关系数据。 客户端节点填充(在支持的浏览器上)。 借助编程方式访问 TreeView 对象模型以动态地创建树、填充节点、设置属性等。 可通过主题、用户定义的图像和样式自定义外观。当点击了TreeView中创建的电子邮箱账号下的子节点“收件箱”时,该节点的字体颜色会变成“DarkRed”,然后利用Delegate关键字声明一个调用lis
31、tbox控件的方法在该方法中启用委托的异步调用然后显示出电子邮箱中的所有邮件。在主界面右侧,是用于显示邮件内容的webbrowser控件。关于此控件可以理解为于Windows窗体应用程序中承载网页以及支持浏览器的其它文档都可以显示在上面。例如,可以使用它在应用程序中提供基于HTML的集成用户帮助或Web浏览功能。此外,还可以使用WebBrowser控件向Windows窗体客户端应用程序添加基于Web的现有控件。从服务器返回邮件内容到显示在WebBrowser控件的过程中,用到了MailInfo类,MediaType类,MessageEx类,QP类QuotedPrintableEncoding类
32、以及ReadMail类。图 4.34.2.4.2.1. 读取邮件首先,客户端会利用SendCommand(str)方法将“RETR x”及带着邮件序号的命令码发送到服务器,然后服务器接收到该命令后将标识符中唯一的邮件序号的正文内容发送到客户端,客户端利用返回数据最后一个字符为“.”的特征,将其放入Queue队列中,然后利用解析整封邮件的结构。通过ReadMail类中Parsemail()方法将解析出的结果放入MailInfo的对象中。这个过程是这样执行的,首先Readmail类中有一个定义的MailInfo对象,通过Pasemail()方法调用ParseHeader()将邮件的头部和正文解析出
33、来,然后用ProcessHeader()讲头部所包含的信息获取出来,ParseBody()使用同样的方法将邮件解析接着继续调用SetDecodedContentStream()获取邮件编码类型等等的信息。在ParseMail()解析邮件信头时用到了3中不同的编码方式,分别是:1)Base64:这是一种网络上最常见的用于传输8bit字节的编码方式,它可用于HTTP环境下传递较长的标识信息。这种编码方式不仅比较简短,同时也具有不可读性,即所有编码的数据不会被人用肉眼直接看到。2)QuotedPrintable:中文译作“可打印字符引用编码”。它是一种可使7bit数据通路上传输8bit数据,或者更一
34、般地说在非8bitclean媒体上正确处理数据。因为MIME定义了在e-mail中发送各种信息的方法,包括非英语的其它语言文本信息,使用非ASCII的其它字符编码。这些编码常常使用ASCII范围以外的值来编码字符,因此需要进一步被编码以便适用于non-8-bit-clean环境。 Quoted-printable编码就是把任意字节序列映射为ASCII字符序列。Quoted-printable自身并不是一种字符编码方案,而是一种在面向字节的编码时的数据编码布置(data coding layer),即由编码的字符序列如何表示为字节流QP是可逆的,即可以由原来的非ASCII字符流与QP编码后的字节
35、流来回转换而不失信息。 Quoted-printable与Base64是两种基本的MIME内容传输编码,如果通常的8bit编码不适用。如果文本不含很多非ASCII字符,quoted-printable编码的结果的可读性相当好而且紧凑。但是,如果输入的大多数是非ASCII字符,那么quoted-printable编码将变得既不可读又非常低效。Base64并不是人可读的,但对于所有数据其成本均匀,适用于二进制数据与非拉丁字母语言文本。3)SevenBit:其实这货就是我们平时学习字符编码所用到的ASC-II编码,前7位用作存储128个不同的数字,第八位用作奇偶校验位检测传输错误。即使在这些新的标准
36、将逐步实施,7 位 ASCII 表仍然是现代计算和数据存储的支柱。它是所有计算机都明白,几个真正标准之一,从电子邮件到 web 浏览到文档编辑不能没有它。它是如此无处不在术语文件文本和ascii 文件来对于大多数计算机用户的意思是同样的事。接着MailInfo对象就将解析好的邮件进一步解码。最后利用MessageEx对象解码结果呈现出来最后显示到webBrowser中。下面介绍RFC822中提到的信头字段:表 4.1与发信方有关的信头字段格式:From:MailAddress举例:From:xxx写信人字段。邮件的制作人,给出他的电子信箱地址。创建者对信件的原始内容负责。格式:Sender:M
37、ailAddress举例:From:xxxSender:zi发送者字段。说明实际提交发送这个信件的人,给出他的电子信箱地址。当发信人与写信人不一样时使用。比如,秘书替经理发信。发送者对发送负责。格式:Reply-TO:MailAddress举例:From:xxx From:zi回复字段。指定应当把回信发到哪里。如果有此字段,回信将会发给它指定的邮箱,而不会发给From字段指定的邮箱。比如,发送的是经理的信,但回信应交办公室处理。与收信方有关的信头字段格式:TO:MailAddress list举例:TO:xxx收信人字段。指定主要收信人的邮箱地址,可以是多个邮箱地址的列表,地址中间用逗号隔开。
38、格式:Cc:MailAddress list举例:Cc:xxx抄送字段。指定此信件要同时发给哪些人,也称为抄送。也可以使用邮箱地址列表,抄送给多个人。格式:Bcc:MailAddress list密抄字段。指定此信件要同时秘密发给哪些人,也称为密件抄送。也可以使用邮箱地址列表,密抄给多个人。其它的信头字段格式:Date:date-time举例:Date:Thur,30 Jan 2014 06:48:32 +210日期字段:Date字段含有电子邮件创建的日期和时间。格式:Subject:*举例:Subject:Nice! Subject:Re:Nice!信件主题字段。描述信件的主题。当回复信件时
39、,通常在主题前面增加“Re:”前缀,标记为该信件为回复信件:当信件被转发时,通常在主题文字前面加上“Fw:”,“Fwd:”这样的前缀。格式:Received:from host ;发送主机by host ;接收主机via atom ;物理路径id msg-id ;接收者msg id接受字段。是投递信件的特定邮件服务器所作的记录。处理邮件投递的每个服务器必须给它处理的每个信头的前面加一个Received字段,用以描述信件到达目的地所经过的路径以及相关信息。当跟踪各个电子邮件问题时,这个信息很有帮助。举例:Received:from xxx67.65.2.1 by zi 119.23.56.75
40、Tue dec 2014 16:01:32 +210格式:Comments:*text注释字段。用于把一个注解添加到信件中。格式:Resent-*举例:Resent-FromResent-SenderResent-dateResent-Reply-To重发字段。当需要把收到的信件重发给另一组收信人的时候,可以保持整个原始信件不变,并简单地产生重发信件所要求的新信头字段。为避免与以前的字段相混。新添加的信头字段都加上Resent-前缀字符串,它们的语法与未加前缀的同名字段相同。格式:Message-ID:msg-id信件标识字段。用于表示一个信件唯一标识,该字段通常有Smtp服务器生成,这个值通
41、常是唯一的。形式根据使用的软件而定。通常左边是标识符,右边指定电脑名下面举出主要的解析代码:*解析信头编码/*正如前面所说的3中编码方式通过下面的代码区分出来并以属于它们的方法进行解码*/case System.Net.Mime.TransferEncoding.Base64:trymailInfo.Content=new MemoryStream(Convert.FromBase64String(mailInfo.messageContent), false); catch (Exception ex)mailInfo.Content=new MemoryStream(Convert.Fro
42、mBase64CharArray(mailInfo.messageContent.ToCharArray(),0, mailInfo.messageContent.Length), false); break; case System.Net.Mime.TransferEncoding.QuotedPrintable:QP qp = new QP();mailInfo.Content=new MemoryStream(GetBytes(qp.QPDecode(mailInfo.messageContent,mailInfo.GetEncoding(), false);break;case Sy
43、stem.Net.Mime.TransferEncoding.SevenBit:default:mailInfo.Content=new MemoryStream(GetBytes(mailInfo.messageContent), false);break;*在MessageEx. GetMailMessageEx()方法中调用CreateMailMessageFromEntity()成员将邮件内容显示出来:/*下面的代码是从解析出来的信息中找到相应的位置,例如cc抄送,from发件人,to收*件人以及subject邮件主题。*/MessageEx message = new Message
44、Ex();string value;foreach (string key in mailInfo.head.AllKeys) value =mailInfo.headkey;if (value.Equals(string.Empty) value = ;message.Headers.Add(key.ToLowerInvariant(), value);switch (key.ToLowerInvariant()case bcc:MessageEx.PopulateAddressList(value, message.Bcc);break;case cc:MessageEx.Populate
45、AddressList(value, message.CC);break;case from:message.From = MessageEx.CreateMailAddress(value);break;case in-reply-to:message.ReplyTo = MessageEx.CreateMailAddress(value);break;case subject:if (value.Trim(rn.ToCharArray().Trim() != )if (value.Contains(?)trystring ZWFormat = value.Remove(value.Length - 3, 2).Remove(1, 2);string Subj