版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子邮件客户端软件的研究与开发
1.引言1.1电子邮件简单介绍 电子邮件(简称E-mai1)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数据传送,它是—个简易、快速的方法。通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。例如比较著名的邮件收发软件有系统自带的OutLook,还有比较著名的第三方软件FoxMaiL,FastMail等等。1.2开发背景介绍
当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不太实用。有鉴于此,在了解RFC底层协议的基础上,我们开发了这个各种功能相对简单实用的邮件客户端程序,简化了很多不必要的功能。1.3运行环境及开发环境1.3.1开发环境AMDAthlon(TM),512M内存,80G硬盘Microsoft®Windows™XPProfessionalMicrosoft®VisualStudio2003(CSharp)Microsoft®DeveloperNetworkforVisualStudio.NET20031.3.2运行环境Intel®Pentium®2及以上处理器,32M以上内存,4G以上硬盘Microsoft®Windows™9X/NT操作系统800*600或以上的屏幕分辨率确保机器上安装有.NetFrameWork1.0或者以上版本
2.软件架构及系统用例图2.1系统架构软件的总体架构如图2.1:2.2系统总体用例用户新建账号发送邮件接收邮件纯文本邮件带附件邮件2.3程序功能框图客户端软件电子邮件接收系统电子邮件接收系统附加功能各种错误的提示简单邮件接收带有附件的邮件接收简单邮件发送带有附件的邮件发送电子邮件编写电子邮件的分类管理通讯簿管理3SMTP协议的研究
由于要开发的是邮件客户端程序,就不得不用到SMTP协议和POP协议。而我个人负责的是邮件发送功能的实现,因此就必然会涉及到SMTP(SimpleMailTransferProtocol)协议。SMTP被用来在因特网上发送邮件,该协议规定了一些基本的命令和方法使客户端与服务器进行交互,以达到发送邮件的目的。3.1SMTP协议简介及工作原理3.1.1介绍简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。3.2SMTP协议的命令和应答3.2.1SMTP协议的命令 SMTP命令定义了邮件传输或由用户定义的系统功能。它的命令是由<CRLF>结束的字符串。而在带有参数的情况下,命令本身由<SP>和参数分开,如果未带参数可以直接和<CRLF>连接。邮箱的语法格式必须和接收站点的格式一致。下面讨论SMTP几个常用的命令和应答。下面是SMTP命令:HELO<SP><domain><CRLF>MAIL<SP>FROM:<reverse-path><CRLF>RCPT<SP>TO:<forward-path><CRLF>DATA<CRLF>NOOP<CRLF>QUIT<CRLF>TURN<CRLF>3.2.2SMTP的应答码对SMTP命命令的响应是是多样的,它它确定了在邮邮件传输过程程中请求和处处理的同步,,也保证了发发送SMTP知道接收SMTP的状状态。每个命命令必须有且且只有一个响响应。SMTP响应应由三位数字字组成,其后后跟一些文本本。数字帮助助决定下一个个应该进入的的状态,而文文本对人是有有意义的。三三位的响应已已经包括了足足够的信息,,不用再阅读读文本,文本本可以直接抛抛弃或者传递递给用户。特特别的是,文文本是与接收收和环境相关关的,所以每每次接收到的的文本可能不不同。在附录录E中可以看看到全部的响响应码。正规规的情况下,,响应由下面面序列构成::三位的数字字,<SP>,一行文本本和一个<CRLF>,,或者也可以以是一个多行行响应。只有有EXPN和和HELP命命令可以导致致多行应答,,然而,对所所有命令,多多行响应都是是允许的。REPLYCODESBYFUNCTIONGROUPS500格格式错误,命命令不可识别别(此错误也也包括命令行行过长)501参数数格式错误502命令令不可实现4命名控件件MailSend由于在CSharp语语言中,都是是以命名控件件来组织程序序的。而所有有的类都归属属于一个特定定的命名空间间下。需要的的命名空间系系统本身自带带了一部分,,而且如果系系统没有你需需要的命名空空间的话,就就可以自己编编写,本节中中的这个命名名空间就是由由于需要而编编写的。而调调用某一个类类中的某个变变量成员的方方法就是通过过命名空间间名.类名.变量成员来来访问的,,当然在CSharp中如果在在程序开始通通过Using命名空空间名,就可可以直接的象象C++那样样来访问成员员变量,可以以说相当的方方便,这些都都会在程序中中体现出来,,在此不再做做过多的叙述述。4.1发发送送邮件类类SmtpMail4.1..1主主要成成员变量量说明1)网网络连接接类及实实例TcpClienttc为TCP网网络服务务提供客客户端连连接类TcpClient实实例对象象tc。。TcpClient类提提供了一一些简单单的方法法,用于于在同步步阻塞模模式下通通过网络络来连接接、发送送和接收收流数据据。而实实例化的的过程也也是连接接SMTP服务务器的过过程。它它的重载载方法之之一的两两个参数数一个为为服务器器名称字字符串,,另一个个为服务务器的埠埠。2)提供供用于网网络访问问的基础础数据流流及其实实例NetworkStreamns此类提供供访问网网络的基基础数据据流的方方法。其其中最基基本也是是最重要要的两个个方法就就是Write()和和Read())方法,,至于参参数不再再次赘述述。3)一维维字符串串数组变变量FilePath此字符串串数组主主要用来来存放用用户选择择的附件件的绝对对路径名名,并在在发送带带附件的的邮件时时用到。。4)发送送邮件所所需的基基本参数数比如用于于ESMTP等等录检验验用的用用户名、、密码,,发送邮邮件需要要的收信信人,发发信人地地址以及及主题等等等在此此不再赘赘述。4.1..2主主要成成员函数数说明1)重载载的构造造函数SmtpMail(()此函数主主要用于于在初始始化过程程中,把把用户选选择的附附件的路路径以参参数的形形式传给给FilePath。。2)添加加附件的的函数AddAttachment传给FilePath的路径径,通过过这样一一个函数数就可以以循环的的动态的的添加到到IList接接口的一一个对象象中了,,方便以以后在具具体的实实现的过过程中的的使用。。3)得到到上传的的附件的的文件流流 GetStream由于在网网络中的的操作都都是以网网络流的的形式来来实现的的,因此此先将上上传的附附件转换换成文件件流,然然后再用用Write的的方法把把这些附附件的文文件流写写入到网网络中,,来完成成发送附附件的操操作。4)将字符符串编码为为Base64字符符串的函数数 Base64Encode由于ESMTP的LOGIN认证机制制是采用Base64编码,,当用户发发出AUTHLOGIN的命命令后,服服务器返回回334的的应答码等等待用户输输入。如果果身份确认认后服务器器返回235的应答答码,否则则返回失败败信息。所所以要将用用户名和密密码转换成成Base64编码码然后再发发给服务器器。此函数数的作用就就是把给定定的字符串串转换成相相应的Base64编码的字字符串。5) 发送送SMTP命令的函函数 SendCommand这个函数的的作用是把把SMTP命令的字字符串转换换成对应的的字节型值值(C#中中规定的Write方法只能能写入字节节型的数据据)然后写写入网络中中,如果操操作成功就就返回一个个标志为真真的布尔型型变量,如如果操作失失败或者发发生异常就就返回标志志为假的布布尔型变量量6)接受服务器器应答的函函数 RecvResponse它的作用就就是从网络络流中读取取服务器返返回的字节节型的信息息,将其转转换成字符符串型的变变量,然后后将其返回回,可以通通过其返回回值来判断断操作是否否成功。具具体实现代代码如下所所示:7)重载载的函数Dialog它们的作用用是与服务务器交互,,发送命令令并接收回回应。不同同的是参数数是字符串串类型的那那个函数,,每次发送送一条命令令,并接受受服务器的的响应,根根据响应的的信息来判判断交互的的结果是否否成功。而而参数是字字符串数组组的函数每每次发送的的是一组命命令,用于于和服务器器的交互,,这个函数数主要是用用于ESMTP服务务器的验证证的功能,,因为验证证的过程是是一个等待待然后又输输入的过程程,因此将将他们放在在一个数组组中有利于于理解和操操作。而他他们的实现现主要是通通过调用上上面的发送送SMTP命令函数数SendCommand以以及接受SMTP服服务器响应应的函数RecvResponse来来实现的。。具体的代代码如下所所示:8)邮邮件发送送程序SendMail这是整个个程序的的核心部部分。具具体的实实现SMTP协协议的程程序正是是通过它它一步一一步实现现并最终终实现发发送简单单邮件甚甚至带附附件的邮邮件的功功能。而而它的实实现是调调用以上上给出的的各个函函数的结结果。以以下就简简单的通通过几个个SMTP命令令的格式式来实现现privateboolSendEmail(){//连接接网络try{//建立立一个TCP连连接tc=newTcpClient(mailserver,mailserverport);}catch{MessageBox.Show("连连接失败败","请确认认");returnfalse;}//获取取当前流流的资料料ns=tc.GetStream();SMTPCodeAdd();//验证证网络连连接是否否正确if(RightCodeHT[RecvResponse().Substring(0,3)]==null){returnfalse;}string[]SendBuffer;if(ESmtp){SendBuffer=newString[4];SendBuffer[0]="EHLO"+mailserver+enter;SendBuffer[1]="AUTHLOGIN"+enter;SendBuffer[2]=Base64Encode(username)+enter;SendBuffer[3]=Base64Encode(password)+enter;if(!Dialog(SendBuffer,"SMTP服服务器验验证失败败,请核核对用户户名和密密码。"))returnfalse;}else{SendBufferstr="HELO"+mailserver+enter;if(!Dialog(SendBufferstr,""))returnfalse;}SendBufferstr="MAILFROM:<"+From+">"+enter;if(!Dialog(SendBufferstr,"发件件人地址址错误,,或不能能为空"))returnfalse;//把传传过来的的收件人人的地址址分割然然后提交交给服务务器stringsplit=";";string[]address=Regex.Split(Recipient,split);SendBuffer=newstring[address.Length];for(inti=0;i<SendBuffer.Length;i++){SendBuffer[i]="RCPTTO:<"+address[i]+">"+enter;}if(!Dialog(SendBuffer,"收收件件人人地地址址有有误误"))returnfalse;SendBufferstr="DATA"+enter;if(!Dialog(SendBufferstr,""))returnfalse;SendBufferstr="From:"+FromName+"<"+From+">"+enter;SendBufferstr+=enter+"."+enter;if(!Dialog(SendBufferstr,"错错误误信信件件信信息息"))returnfalse;SendBufferstr="QUIT"+enter;if(!Dialog(SendBufferstr,"断开连连接时错误误"))returnfalse;//关闭流流对象ns.Close();//关闭连连接tc.Close();FilePath=null;returntrue;}4.2AddExtra类这个附加的的小类只是是提供一些些返回当前前系统时间间,获取主主机名,主主机IP,,有关帮助助等小的功功能,在此此仅对帮助助信息中的的“关于””操作函数数稍加说明明。因为它它说明了在在CSharp中中调用WindowsAPI函函数所需需如下几个个步骤:4.2.1调用用WindowsAPI所所需的命命名空间----usingSystem.Runtime.InteropServices;而调用显示示关于对话话框的函数数ShellAbout还需需要用到两两个命名空空间如下所所示---usingSystem.Reflection;---usingSystem.Diagnostics;4.2.2在程程序中声明明所需的API函数数[DllImport("shell32.dll")]staticexternintShellAbout(IntPtrhWnd,stringszApp,stringszOtherStuff,IntPtrhIcon);4.2.3在程程序中具体体的使用Assemblyass=Assembly.GetExecutingAssembly();FileVersionInfomyVersion=FileVersionInfo.GetVersionInfo(ass.Location);ShellAbout(this.Handle,"邮件收发发系统#","版本本"+myVersion.FileMajorPart+"."+myVersion.FileMinorPart+"."+myVersion.CompanyName,this.Icon.Handle);至此此就就完完成成了了在在CSharp中中调调用用WindowsAPI函函数数的的过过程程。。而在在此此程程序序中中最最主主要要的的调调用用了了两两个个WINDOWSAPI函函数数,,一一个个就是是动动态态的的获获取取图图标标句句柄柄的的函函数数SHGetFileInfo()和和动动态态调调用用相关关联联的的打打开开指指定定程程序序的的函函数数ShellExecute().下下面面章章节节将将对对这这两个个函函数数进进行行完完全全的的用用法法解解析析。。4.3程程序序用用到到的的主主要要API函函数数完完全全解解析析SHGetFileInfo用法完全全解析一.函数名名:SHGetFileInfo二.作用::动态的获取取图标的句句柄三.在C#中的声明明方式:[DllImport(“shell32.dll”)]PrivatestaticexternintShGetFileInfo(stringpszPath,uintdwAttributes,refSHFILEINFOpsi,uintcbFileInfo,uintflags);四.各个参参数的解析析:1.pszPath-指定的的文件名((可以是绝绝对的路径径,也可以以是相对的的路径)。。当uFlags的取取值中不包包含SHGFI_PIDL时,可直直接指定;;否则pszPath要要通过计算算获得,不不能直接指指定;2.dwFileAttributes-文件件属性。仅当uFlags的的取值包含含SHGFI_USEFILEATTRIBUTES时时有有效,,一般不用用此参数。。3.psfi-返回回获取的文文件的信息息。是一个个结构体类类型的变量量。它的原原型如下所所示:privatestructSHFILEINFO{publicIntPtrhIcon;publicintiIcon;publicuintdwAttributes;[MarshalAs(UnmanagedType.LPStr,SizeConst=256)]publicstringszDisplayName;[MarshalAs(UnmanagedType.LPStr,SizeConst=80)]publicstringszTypeName;};各个参数代代表的含义义:1)hIcon-文件的的图标句柄柄。2)iIcon-图标的的系统索引引号。3)dwAttributes--文件的属属性值。4)szDisplayName-文件的的显示名((名称的最最大长度))。5)szTypeName-文件件的类型名名(最大长长度默认认是80个个字符)。。4.cbFileInfo--psfi的字节数数。5.uFlags--指明需要要返回的文文件信息标标识符。常用的是::SHGFI_ICON;//获得图图标
SHGFI_DISPLAYNAME;//获获得显示名名
SHGFI_TYPENAME;//获获得类型名名
SHGFI_ATTRIBUTES;//获得属性性
SHGFI_LARGEICON;//获得大图图标
SHGFI_SMALLICON;//获得小小图标SHGFI_PIDL;//pszPath是一个标标识符五.补充说说明:函数SHGetFileInfo()的返回值值也随uFlags的取值变变化而有所所不同。通通过调用SHGetFileInfo()可以以由psfi参数得得到文件的的图标句柄柄,但要注注意在uFlags参数中不不使用SHGFI_PIDL时,SHGetFileInfo()不能获获得"我的的电脑"等等虚似文件件夹的信息息。ShellExecute用用法完全解解析一.函数名名:ShellExecute二.作用::ShellExecute不不仅可以运运行EXE文件,也也可以运行行已经关联联的文件件。三.在C#中的声明明://EntryPoint给给出Dll入口点点的名称,,如果没有有给出,则则用方法本本身的名称称。[DllImport("shell32.dll",EntryPoint="SHGetFileInfo")]privatestaticexternintShellExecute(IntPtrhwnd,stringOperation,stringFileName,stringParameters,stringDirectory,intShowCmd);四.各个参参数解析::●hWnd:用于指指定父窗口口句柄。当当函数调用用过程出现现错误时,,它将作为为Windows消消息窗口的的父窗口。。例如,可可以将其设设置为应用用程序主窗窗口句柄,,即Application.Handle,,也可以将将其设置为为桌面窗口口句柄(用用GetDesktopWindow函数获得得)。●Operation:用于于指定要进进行的操作作。其中““open”操作表表示执行由由FileName参数指定定的程序,,或打开由由FileName参数指定定的文件或或文件夹;;“print”操操作表示打打印由FileName参数数指定的文文件;“explore”操操作表示浏浏览由FileName参数数指定的文文件夹。当当参数设为为nil时时,表示执执行默认操操作“open”。。●FileName::用于指指定要打打开的文文件名、、要执行行的程序序文件名名或要浏浏览的文文件夹名名。●Parameters:若若FileName参参数是一一个可执执行程序序,则此此参数指指定命令令行参数数,否则则此参数数应为nil或或PChar(0)。。●Directory:用于于指定默默认目录录。●ShowCmd:若若FileName参参数是一一个可执执行程序序,则此此参数指指定程序序窗口的的初始显显示方式式,否则则此参数数应设置置为0。。若ShellExecute函数调调用成功功,则返返回值为为被执行行程序的的实例句句柄。若若返回值值小于32,则则表示出出现错误误。五.补充充说明上述仅仅仅是ShellExecute函数数的标准准用法5.软件件运行界界面5..1新新建建邮邮件件帐帐号号用户户打打开开软软件件之之后后,,需需要要新新建建一一个个邮邮件件帐帐号号,,在在这这个个信信件件帐帐号号的的过过程程中中,,需需要要指指定定SMTP服服务务器器,,SMTP的的端端口口,,以以及及用用于于ESMTP验验证证的的用用户户名名和和密密码码。。指指定定这这些些发发邮邮件件的的必必须须参参数数之之后后,,再再回回到到系系统统的的主主界界面面如如下下所所示示::5..2发发送送邮邮件件界界面面5..2..1发发送送不不带带附附件件的的邮邮件件在新新建建帐帐号号的的过过程程中中已已经经指指定定了了邮邮件件地地址址,,和和帐帐号号名名称称,,所所以以默默认认的的以以这这些些参参数数来来发发送送邮邮件件。。通通过过调调用用参参数数的的不不同同程程序序会会自自动动的的调调用用相相对对应应的的代代码码来来执执行行不不同同的的操操作作。。发发送送简简单单的的邮邮件件运运行行界界面面如如下下。。5.2.2发发送送带附附件的的邮件件和简单单的邮邮件不不同之之处在在于多多了发发送附附件的的功能能,软软件模模拟FoxMail里面面发送送邮件件时,,在程程序的的下面面自动动显示示增添添的附附件的的名称称,以以及图图标等等信息息。并并且邮邮件支支持添添加,,删除除,排排列图图标等等功能能。运运行行界面面如下下所示示:5.3验验证证邮件件发送送是否否成功功邮件发发送出出去之之后,,用FoxMail跟踪踪接受受之后后的,,证明明邮件件和附附件都都可以以正常常接收收,具具体的的FoxMail的的接收收界面面如下下所示示:6结结论
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考试历史试题及答案
- 经济学试题及答案
- 2025年河南省小学考试题及答案
- 2026年赣南卫生健康职业学院高职单招职业适应性考试备考题库带答案解析
- 2026年执业药师继续教育测试题含答案
- 2026年营销谈判技巧试题含答案
- 2026年美术史洛可可艺术特点考点练习题及解析
- 2026年渤海理工职业学院高职单招职业适应性考试模拟试题带答案解析
- 2026年亳州职业技术学院高职单招职业适应性考试备考试题带答案解析
- 2026年疫情防控常态化知识考核题库含答案
- 医院财务数据总结工作汇报
- 集团战略发展工作汇报
- (正式版)DB32∕T 3817-2025 《农业用水定额》
- 2025年电商平台运营总监资格认证考试试题及答案
- 门窗质量保证措施
- 浙江省2025年初中学业水平考试浙真组合·钱塘甬真卷(含答案)
- 《察今》(课件)-【中职专用】高二语文(高教版2023拓展模块下册)
- GB/T 30425-2025高压直流输电换流阀水冷却设备
- GB/T 45355-2025无压埋地排污、排水用聚乙烯(PE)管道系统
- 2025年园长大赛测试题及答案
- 生命体征的评估及护理
评论
0/150
提交评论