毕业设计答辨电子邮件客户端软件的研究与开发_第1页
毕业设计答辨电子邮件客户端软件的研究与开发_第2页
毕业设计答辨电子邮件客户端软件的研究与开发_第3页
毕业设计答辨电子邮件客户端软件的研究与开发_第4页
毕业设计答辨电子邮件客户端软件的研究与开发_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子邮件客户端软件的研讨与开发

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+"."+myVersionpanyName,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新建邮件帐号用户翻开软件之后,需求新建一个邮件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论