用户邮件代理课程设计报告.doc_第1页
用户邮件代理课程设计报告.doc_第2页
用户邮件代理课程设计报告.doc_第3页
用户邮件代理课程设计报告.doc_第4页
用户邮件代理课程设计报告.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

信息与软件工程学院课程设计报告题目全称: 用户邮件代理 课程名称: 计算机网络基础 指导老师: 王焱 职称: 副教授 序号学生姓名学号班号成绩1陈文聪201122204001620402李东潮201122204002420403曾诚201122204001520404池维键201122204000620405678910(注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。序号排位为“1”的学生成绩最高,排位为“10”的学生成绩最低。)指导老师评语: 签字: 本小组成员任务分工情况序号姓名学号任务分工完成情况1李东潮2011222040024代码实现、实验报告完美2陈文聪2011222040016统筹、实验报告与部分代码完美3曾诚2011222040015实验报告、代码实现完美4池维键2011222040006实验报告、代码实现完美5678910摘 要摘 要在Visual Studio 2010环境下开发程序,完成了一个简单的HTTP Web服务器,能够实现HTTP协议请求报文解析,根据请求内容执行相应动作,并返回响应报文,实现GET和POST方法。为发送方提供了图形界面,用户可输入发送者电子邮件地址、接收者电子邮件地址、报文主题及报文本身,能够将客户机邮件采用恰当的数据结构存储起来,实现用户邮件的发送和命令的接收。在软件设计过程中,将数据部分与控制逻辑和现实部分分开,降低了设计的复杂度。在操作上完成的效果也很好,很好地完成了实验要求。关键词:Visual Studio 2010环境,HTTP Web服务器,报文解析,响应报文。- III -AbstractABSTRACTIn the environment of Visual Studio 2010, have completed a simple program about HTTP Web server, HTTP protocol request message parsing, perform the appropriate action based on the contents of the request and returns a response packet, GET and POST methods. Provides a graphical interface for the sender, the user can enter the e-mail address of the sender, recipient e-mail address, the theme of packets and packets can be client mail using appropriate data structure stored user mail send and command reception. The data portion of the control logic in the software design process, and separated from the real part, reducing the complexity of the design. The operation completed effect is also very good, well done experimental requirements.Keywords: the environment of Visual Studio 2010, HTTP Web server, message parsing, response packet目 录目录第一章 绪论11.1 选题背景及意义11.2 国内外研究现状11.3 主要内容与章节安排11.4 本章小结1第二章 课程设计的需求分析32.1 环境需求32.2 功能需求32.3 性能需求32.3 本章小结3第三章 用户邮件代理的设计53.1 总体设计53.2 功能模块设计53.3 本章小结5第四章 用户邮件代理的实现74.1 开发环境介绍74.2 主要功能模块的实现74.3 本章小结7第五章 测试及成果展示95.1 测试环境95.2 测试用例和结果95.3 成果展示95.4 本章小结9第六章 总结与展望11参考文献12第一章 绪论第一章 绪论1.1 选题背景及意义在当今社会下,邮件已成为人们必要的一个通信工具,不管你是什么职业,总会有用到邮件的地方,特别是现在的大学生以及公司里的职员们,在交作业的时候,在完成一个项目的过程中一定会有邮件通信,在这个大背景下,因为有需求所以我们做了这样一个用户邮件代理.至于意义呢,一个是我们都是小试牛刀,希望通过这个来磨练自己的实践能力,第二呢也是希望做出来能方便大家的生活。1.2 国内外研究现状现今,邮件代理基本研究得都比较透彻了,国内的比较出名的就有QQ,新浪,163再加上各类高校的邮件域名等,但即便是这样,我们也希望做出来比较个性的,只属于我们的邮件代理,也磨练了自己的动手能力。1.3 主要内容与章节安排第一章 绪论主要描述研究背景以及意义第二章 主要描述需求,如环境,功能,性能等第三章 主要描述设计,这个系统是怎样应运而生的第四章 主要描述邮件代理是怎样实现的第五章 主要描述测试以及如何运行的第六章 总结1.4 本章小结本章是绪论,所以主要就描述了一些背景以及研究现状,和本报告的总体情况,算是为下面几章做了一个铺垫,也是报告的开头- 23 -第二章 课程设计的需求分析第二章 课程设计的需求分析2.1 环境需求2.1.1运行环境处理器:在任何Intel或与Intel兼容的处理器上运行。内存:(RAM):推荐使用2GB。操作系统:Windows xp以上版本。2.1.2开发环境软件:Visual studio 2008以上版本。操作系统:Windows xp以上版本。2.2 功能需求1.为发送方提供图形界面,用户可输入发送者电子邮件地址、接收者电子邮件地址、报文主题及报文本身。2.开发服务器处理程序,将客户机邮件采用恰当的数据结构存储起来。3.邮件客户机与本地邮件服务器建立TCP连接,向本地邮件服务器发送SMTP命令,实现用户邮件的发送和命令接收。2.3 性能需求1.性能:响应时间约为4秒。2.可用性:发生故障恢复时间快,大约为10秒,基本不发生故障。3.易用性:启动软件即可按照步骤,一步步完成操作。4.安全性:安全级别高,可访问的范围较大。2.3 本章小结本章阐述了软件设计的环境需求,本软件的功能需求和性能需求,其中环境需求包括软件的运行环境需求和软件的开发环境需求,功能需求主要说明了本软件要实现的主要的功能,性能需求则指出了本软件的要实现的性能方面的要求。第三章 *的设计第三章 用户邮件代理的设计3.1 总体设计本系统需要实现的功能是用户邮件代理,提供登录邮箱,注销用户,接收、查看、删除、回复邮件,发送新邮件以及附件相关的功能。整个系统使用C#制作图形化界面,包括登录界面和邮箱操作界面(主界面)。在未登录邮箱时,邮箱操作界面所有组件禁用,仅提供右上角登录按钮和退出按钮,点击按钮进入登录界面,输入邮箱、密码以及所用邮箱服务以后便可以登录邮箱,如果登录成功,返回邮箱操作界面后便自动刷新邮件列表,启用所有操作,右上角的按钮也将变成注销按钮。在邮箱操作界面的收件箱功能里,提供查看、删除、回复邮件和下载附件等功能;而在写信功能里,提供发送、取消发送、上传附件、删除附件等功能。在点击邮件后,则会显示出邮件内容。3.2 功能模块设计3.2.1 登录界面的设计登录界面是连接POP3服务器的桥梁,将使用TCP连接服务器,连接完成后将保持与POP3服务器的TCP连接。界面包括用户邮箱和密码输入栏,选择所用邮箱服务的下拉菜单,提供163,126,sina,qq,yahoo,gmail等邮箱服务,还有登录按钮、注销按钮和返回按钮,以及反馈服务器返回信息的消息界面。进入登录界面后需要输入完整的用户信息才能点击登录按钮,同样需要登录完成才能点击注销按钮,在连接POP3服务器过程中,连接信息会显示在消息界面上。当选择了所用邮箱服务后,系统就会提供相应的smtp和POP3服务器名。连接POP3服务器并接收信件的步骤如下:1。连接到pop3服务器(默认端口110)2。发送用户名(user)3。发送密码(pass)4。查询当前邮箱状态(stat)5。查询服务器上所有邮件UID列表(UIDL)6。查询本地所有邮件的UID列表,从而罗列出新邮件列表(本地UID列表是POP3客户端记录在日志文件中的)7。对所有新邮件查询其大小(LIST)8。下载所有新邮件(RETR)利用List提供的邮件大小信息9。如果有必要,对所有新邮件标志为删除(DELE)10。结束对话(QUIT)11。解析本地下载邮件。3.2.2主界面登录注销的设计未登录时,主界面右上角提供登录和退出功能,并提醒用户登录;登录以后,右上角提供注销和退出功能,并欢迎用户使用。登录和注销按钮都将打开登录界面,退出按钮则是退出整个程序,如果没有注销就会自动注销并退出。在从登录界面返回主界面时,如果登录成功,系统会实例化邮件发送对象,以便以后完成发送邮件的操作,并给实例对象赋值;如果注销成功,系统会销毁邮件发送对象和邮件接收对象,并清空收件箱和邮件内容。3.2.3 收件箱的设计收件箱存放的是邮箱中的邮件,显示的是每一封邮件的发件人、主题、附件和时间,功能提供附件下载、刷新列表、回复和删除邮件等,当登录成功后,返回主界面会自动刷新邮件列表,为了避免刷新时间过长造成程序假死,还需要在刷新的同时显示进度条,提醒用户程序正常运行。更新邮件列表时,系统会实例化邮件接收类,以此连接服务器并下载邮件保存在邮件接收类中。再从邮件接收类中依次取出每一封邮件,保存在声明好的邮件类中,再将信息填在收件箱列表中,同时保存在本地文件中。单击列表中邮件就可以阅读邮件内容,由于很多邮件分为txt格式和HTML格式,所以两种格式的内容都显示出来较为妥当,即邮件的Body和HTMLBody。当上下移动列表的选中项时,邮件内容也会及时地显示在右侧的文本框和WebBrowser框中。此外还有删除邮件、下载附件、回复邮件等功能,删除邮件后,应断开POP连接,再重新刷新邮件列表,回复邮件则将发件人变成收件人,主题前加上“Re”即可。3.2.4 写信的设计写信需要收件人、主题、内容和附件等信息,在填写完成后便可以发送邮件。发送时系统会实例化一个发送的邮件,并填写邮件的信息,然后使用邮件发送类的发送功能将邮件发送至SMTP服务器上。如果点取消发送,则会自动切换到收件箱。3.2.5 个人登录信息的设计由于登录界面和主界面(特别是发送邮件时)均会涉及到用户登录邮箱、密码、POP服务器和SMTP服务器的内容,所以需要在命名空间下定义一个公共类来存储以上信息,并作为全局变量使用。3.3 本章小结设计一个好的应用程序需要好的框架、算法和耐心,还要考虑到使用者的感受。邮件的发送依靠的是SMTP服务,将邮件传送到相应SMTP服务器上。邮件的接收依靠的是POP服务和TCP服务,先与POP服务器建立TCP连接,再用POP服务从服务器上下载邮件。除了实现以上功能外,还需要考虑界面的设计,如何才能在使用上更方便,如何才能看上去更简洁等等。第四章 *的实现第四章 用户邮件代理的实现4.1 开发环境介绍此次课程设计我们使用Visual Studio 2010开发环境,利用C#语言进行界面设计与后台开发。同时我们还利用了第三方邮箱操作组件jmail来辅助我们进行该课程设计的开发。4.2 主要功能模块的实现4.2.1 登陆模块的实现 登陆邮箱 登陆邮箱的实现代码如下: private void btnLogin_Click(object sender, EventArgs e) if (loginfrm.ShowDialog() = DialogResult.OK) Cursor.Current = Cursors.WaitCursor; string username = personalMessage.getUserMail; label1.Text = 您好!n + username; / 窗体组件 btnLogin.Visible = false; btnLogout.Visible = true; tabControlMyMailbox.Enabled = true; btnDownLoad.Enabled = false; btnDeleteMail.Enabled = false; / 登陆成功后实例化邮件发送对象,以便后面完成发送邮件的操作 / 实例化邮件发送类(SmtpClient)对象 if (smtpClient = null) smtpClient = new SmtpClient(); smtpClient.Host = personalMessage.getSmptServer; /gmail邮箱的port为587,其余默认为25 int Port = 25; if (smtpClient.Host = ) Port = 587; smtpClient.Port = Port; / 不使用默认凭证,即需要认证登陆 smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(personalMessage.getUserMail, personalMessage.getPassword); smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; / 登陆成功后,自动接收新邮件 / 开始接收邮件 try btnRefreshMailList.PerformClick(); catch MessageBox.Show(读取邮件列表失败!, 错误, MessageBoxButtons.RetryCancel, MessageBoxIcon.Error); / 窗体组件 richtbxMailContentReview.Enabled = true; btnDownLoad.Enabled = true; btnDeleteMail.Enabled = true; tabControlMyMailbox.Focus(); Cursor.Current = Cursors.Default; 注销登陆 注销登陆的实现代码如下: private void btnLogout_Click(object sender, EventArgs e) if (loginfrm.ShowDialog() = DialogResult.Cancel) / 窗体组件 label1.Text = 请登录; btnLogin.Visible = true; btnLogout.Visible = false; richtbxMailContentReview.Enabled = false; tabControlMyMailbox.Enabled = false; / SmtpClient 对象销毁 if (smtpClient != null) smtpClient.Dispose(); / POP3Class 对象销毁 popClient.Disconnect(); lstViewMailList.Items.Clear(); tbxMailboxInfo.Text = ; richtbxMailContentReview.Clear(); wbMailContentReview.DocumentText = ; 退出程序 退出程序的实现代码如下: private void btnExit_Click(object sender, EventArgs e) if (btnLogout.Visible = true) loginfrm.logout(); Close(); 4.2.2 邮件操作模块的实现 更新邮件并弹出进度条更新邮件并弹出进度条的实现代码如下: progressbarForm pbfrm;/实例化进度条窗口 private void btnRefreshMailList_Click(object sender, EventArgs e) pbfrm = new progressbarForm(); Thread fThread = new Thread(new ThreadStart(refreshMailList);/开辟一个新的线程 fThread.Start(); pbfrm.ShowDialog(); 更新邮件列表更新邮件列表的实现代码如下:private void refreshMailList() / 实例化邮件接收类POP3Class popClient = new POP3Class(); / 连接服务器 popClient.Connect(personalMessage.getUserMail, personalMessage.getPassword, personalMessage.getPopServer, 110); if (popClient != null) if (popClient.Count 0) lstViewMailList.Items.Clear(); tbxMailboxInfo.Text = 共 + popClient.Count + 封邮件; for (int i = 0; i 0) item.SubItems.Add(attachments.Count.ToString();/ 附件数量 else item.SubItems.Add(无); item.SubItems.Add(messageMail.Date.ToString();/ 时间 lstViewMailList.Items.Add(item); pbfrm.SetTextMessage(100 * (i + 1) / popClient.Count); / 将邮件写入文件 string path = C:EmailContents.txt; FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(第+(i+1).ToString()+封邮件); sw.WriteLine(主题:n+messageMail.Subject); sw.WriteLine(时间:n + messageMail.Date.ToString(); sw.WriteLine(来自:n + messageMail.From); sw.WriteLine(发件人:n + messageMail.FromName); sw.WriteLine(收件人:n + messageMail.RecipientsString); sw.WriteLine(正文:n + messageMail.Body); sw.WriteLine(EML文本:n + messageMail.BodyText); sw.WriteLine(HTML文本:n + messageMail.HTMLBody); sw.Flush(); sw.Close(); fs.Close(); pbfrm.enablebtnOK(); else MessageBox.Show(没有邮件!,提示,MessageBoxButtons.OK,MessageBoxIcon.Exclamation); else MessageBox.Show(读取邮件列表失败!, 错误, MessageBoxButtons.RetryCancel, MessageBoxIcon.Error); 发送邮件发送邮件的实现代码如下:private void btnSend_Click(object sender, EventArgs e) this.Cursor = Cursors.WaitCursor; / 实例化一个发送的邮件 MailMessage mailMessage = new MailMessage(); / 指明邮件发送的地址,主题,内容等信息 mailMessage.From = new MailAddress(personalMessage.getUserMail); mailMessage.To.Add(txbSendTo.Text); mailMessage.Subject = txbSubject.Text; mailMessage.SubjectEncoding = Encoding.Default; mailMessage.Body = richtbxBody.Text; mailMessage.BodyEncoding = Encoding.Default; / 设置邮件正文不是Html格式的内容 mailMessage.IsBodyHtml = false; / 设置邮件的优先级为普通优先级 mailMessage.Priority = MailPriority.Normal; /mailMessage.ReplyTo = new MailAddress(tbxUserMail.Text); / 封装发送的附件 System.Net.Mail.Attachment attachment = null; if (cmbAttachment.Items.Count 0) for (int i = 0; i 0) / 因为这里允许选择多个文件,所以这里用AddRange而没有用Add方法 cmbAttachment.Items.AddRange(openFileDialog.FileNames); 删除附件删除附件的实现代码如下:private void btnDeleteFile_Click(object sender, EventArgs e) int index = cmbAttachment.SelectedIndex; if (index = -1) MessageBox.Show(请选择要删除的附件!, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return; els

温馨提示

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

评论

0/150

提交评论