2022年电子邮件客户端发送功能的实现 .pdf
科信学院课程设计说明书(2009 /2010 学年第二学期)课程名称:软件程序设计题目 : 电子邮件客户端发送功能的实现专业班级:07 级通信工程2 班学生姓名:杨文光学号:070312217 指导教师: 马小进、陈湘国、崔东、赵欣设计周数:2 周设计成绩:2010 年7 月9 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现1 目录1、课程设计目的 2 2、课程设计正文 2 2.1 软件分析 2 2.2 软件框架结构设计 3 2.2.1 总体规划 3 2.2.2 框架结构图 4 2.3 数据库设计 5 2.3.1 Access 数据库简介 5 2.3.2 数据库表说明 5 2.4 软件程序实现 6 2.4.1 电子邮箱通讯协议 6 2.4.2 邮箱主要功能 7 3、课程设计总结 15 4、参考文献 16名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现2 1 、课程设计目的1、熟练掌握数据库的基本操作:包括数据库、表的建立,数据库的连接,数据的添加、删除、修改等;2、对常见的电子邮件客户端软件(如Outlook 、Foxmail )进行分析,熟悉电子邮件客户端的功能;3、深入学习System.Net.Mail 命名空间及使用,掌握邮件发送功能的实现。4、根据技术要求,实现功能,完成系统联调及测试等工作。5、综合运用本课程及有关先修课程理论知识和生产实践知识进行设计实训,并使所学知识得到进一步巩固、加强和发展。2、课程设计正文2.1 软件分析2.1.1需求分析电子邮件 ( 简称 E-mai1) 又称电子信箱, 它是种用电子手段提供信息交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信, 加速了信息的交流及数据传送 , 它是个简易、快速的方法。通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理, 将邮件送到世界的各个角落。到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1 不只局限于信件的传递, 还可用来传递文件、 声音及图形、图像等不同类型的信息。例如比较著名的邮件收发软件有系统自带的OutLook,还有比较著名的第三方软件FoxMaiL 等等。SMTP 全称是简单邮件传输协议,它的主要功能是用来管理发送邮件。MailSend 命名空间是整个程序的核心。它包括两个类。 在 SmtpMail 的类中包含了一个SendMail 的方法, 它从底层详细地实现了和服务器的交互操作。既可以用它发送一个纯文本邮件,也可以发送一个带有附件的邮件,除此也可以使用不同的SMTP服务器。2.1.2 系统流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现3 2.2 软件框架结构设计2.2.1 总体规划电子邮件客户端系统主要包括四个模块:文件管理模块、 邮箱管理模块、 好友管理模块、写邮件还是管理邮箱?开始初始化程序输入用户名和密码进入创建邮件界面发送邮件修改地址薄写邮件结束电子邮箱客户端系统流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现4 消息提示系统模块。文件管理模块:包括写邮件、新建用户、退出程序。邮箱管理模块:包括发件箱、收件箱、草稿箱。好友管理模块:包括添加好友、修改好友、删除好友。消息提示系统模块:包括各种信息提示。2.2.2 框架结构图用户操作邮件结构(图1) ,此图明确的展现了用户使用电子邮箱的基本过程,首先建立新帐户, 存入帐户中, 需要发邮件则从地址薄中选择接收邮件对象,地址薄中邮箱地址需事前输入,可对地址薄中信息进行添加、删除、修改等操作;需要接收邮件,可对邮件进行答复、保存、删除等操作。电子邮件客户端系统总体结构(图2)用户登录发送邮件接收邮件取消地址簿邮件管理保存答复删除地址管理添加修改删除用户操作邮件结构图1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现5 2.3 数据库设计2.3.1 Access数据库简介Access 是 MicrosoftOffice套件中一个极为重要的组成部分,是最流行的数据库管理系统。随着MicrosoftOffice办公套件的不断改进,Access 的新的版本功能变得更加强大。不管是处理公司的客户订单数据、管理自己的个人通讯录,还是科研数据的记录处理,人们都可以利用它来解决大量数据的管理工作。Access 数据库的窗口使用简单明了,数据类型丰富方便使用,创建也很容易,本次课程设计就是使用的此数据库。2.3.2 数据库表说明电子邮件客户端系统文件管理邮箱管理好友管理消息提示写邮件新建退出发件箱收件箱草稿箱添加好友修改好友删除好友错误消息提示名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现6 好友管理表 (friendsInfo) 列名数据类型长度是否为主键是否为空注释name nvarchar 10 否否姓名Email nvarchar 20 是否E-mail tel char 11 否是电话添加好友表 (friendsAdd) 列名数据类型长度是否为主键是否为空注释emailID nvarchar 20 是否邮 箱账号password nvarchar 20 否否密码发件箱( sendBox)列名数据类型长度是 否 为主键是 否 为空注释sender nvarchar 20 否否发送者receiver nvarchar 20 否否接收者subject nvarchar 50 否否主题body ntext 否否正文Account int 否否帐户2.4 软件程序实现2.4.1 电子邮箱通讯协议1. SMTP协议SMTP 是Simple Mail Transfer Protocol的缩写,是一个定义邮件传输的协议。它基于TCP 服务的应用层协议,有由RFC 定义,默认端口号是25。SMTP 是个请求 /响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和LF符结束,响应包括一个表示返回状态的三位数字应答码。 2. POP3 协议 POP是Post Office Protocol的缩写,而 POP3 则为 POP 的版本 3,该协议用于电子邮件的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现7 接收,其默认端口是110。 POP3 客户端向 POP3 服务器发送命令并等待响应,POP3 命令采用命令行形式,用 ASCII 码表示,以 CRLF 结束。服务器响应是由一个单独的命令行组成,响应的第一行以 ASCII 文本“ +OK ”或“ -ERR”指出相应的操作状态是成功还是失败。2.4.2 邮箱主要功能1. 用户登录界面主要代码:privatevoid button1_Click(object sender, EventArgs e) if(textBox1.Text.Trim().ToLower() = ywg ) & (textBox2.Text.Trim() = 12345 ) frmMain frm = new frmMain (); frm.Show(); this .Hide(); else /MessageBox.Show(用户名或密码错误!); MessageBox.Show( 用户名或密码错误 , 出错了 , MessageBoxButtons .OK, MessageBoxIcon.Error); privatevoid textBox1_KeyPress(object sender, KeyPressEventArgs e) if (e.KeyChar = (char )13) textBox2.Focus(); privatevoid textBox2_KeyPress(object sender, KeyPressEventArgs e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现8 if (e.KeyChar = (char )13) button1_Click(sender, e); privatevoid button2_Click(object sender, EventArgs e) textBox1.Text = null ; textBox2.Text = null ; privatevoid frmLogin_Load(object sender, EventArgs e) 2. 邮箱登录主界面邮箱主页面 3. 邮箱配置发送或接收邮件前要配置相应的服务器类型名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现9 相应的代码:privatevoid pop3Box_TextChanged( object sender, EventArgs e) pop3server = pop3Box.Text.ToString(); privatevoid smtpBox_TextChanged( object sender, EventArgs e) smtpserver = smtpBox.Text.ToString(); privatevoid passBox_TextChanged(object sender, EventArgs e) password = passBox.Text.ToString(); privatevoid SendMailBtn_Click(object sender, EventArgs e) if (smtpserver= ) MessageBox.Show( 服务器未设置 ); return ; if (name= ) | (password= ) MessageBox.Show( 用户名和密码不能为空!); return ; frmSendMail form = new frmSendMail (smtpserver,name,password); form.Show(); privatevoid ReceMailBtn_Click(object sender, EventArgs e) if ( = pop3server) MessageBox.Show( 服务器未设置 ); return ; if ( = name) | ( = password) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现10 MessageBox.Show( 用户名和密码不能为空!); return ; receiveMail form = new receiveMail(pop3server,name,password); form.Show(); privatevoid Form1_Activated(object sender, EventArgs e) pop3Box.Text = pop3server; smtpBox.Text = smtpserver; comboBox1.Text = name; passBox.Text = password; privatevoid comboBox1_TextChanged( object sender, EventArgs e) name = comboBox1.Text.ToString(); privatevoid comboBox1_SelectedIndexChanged(object sender, EventArgs e) privatevoid label3_Click(object sender, EventArgs e) 4. 创建新邮件界面名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现11 其主要代码 : privatevoid button1_Click(object sender, EventArgs e) if ( = comboBox1.Text) | ( = comboBox2.Text) MessageBox.Show( 发送人和收件人地址不能为空! ); return ; string msgUn = comboBox1.Text, comboBox2.Text, titleBox.Text, userBox.Text, filetextBox.Text, textBox.Text ; mySendMail.SetmsgUn(msgUn); thread1 = new Thread ( new ThreadStart(Send); thread1.Start(); privatevoid addAttach_Click(object sender, EventArgs e) OpenFileDialog fileDialog=new OpenFileDialog(); fileDialog.CheckFileExists=true ; fileDialog.ValidateNames=true ; fileDialog.Multiselect=true ; fileDialog.ShowDialog(); if (fileDialog.FileName.Length0) filetextBox.Text=(fileDialog.FileName); publicvoid SetListBox(string mylistvalue) statelistBox.Items.Add(mylistvalue); publicvoid SetButtonfalse() button1.Enabled =false ; publicvoid SetButtonture() button1.Enabled = true ; publicvoid Send() MethodInvoker dgMyBtnTrue = new MethodInvoker (SetButtonture); MethodInvoker dgMyBtnFalse = new MethodInvoker (SetButtonfalse); dgMyListBox = new SetMyListBox (SetListBox); BeginInvoke(dgMyBtnFalse); statelistBox.Invoke(dgMyListBox, new object 正在连接服务器。 。 。 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现12 mySendMail.Login(); statelistBox.Invoke(dgMyListBox, new object 正在发送。 。 ); mySendMail.SendMails(); BeginInvoke(dgMyBtnTrue); privatevoid frmSendMail_Load(object sender, EventArgs e) this .friendsInfoTableAdapter.Fill(this .emailInfoDataSet3.friendsInfo); this .newTableAdapter.Fill(this .emailInfoDataSet._new); privatevoid button3_Click(object sender, EventArgs e) SqlConnection conn = new SqlConnection( OperateDB.ConnString); conn.Open(); string sql = INSERT INTO sendbox VALUES( + comboBox1.Text.Trim() + , + comboBox2.Text.Trim() + , + titleBox.Text.Trim() + , + textBox.Text.Trim() + ); SqlCommand cmd = new SqlCommand (sql, conn); if (cmd.ExecuteNonQuery() = 1) MessageBox.Show( 保 存 成 功 ! , 提 示 , MessageBoxButtons .OK, MessageBoxIcon.Information); else MessageBox.Show( 出错啦,保存失败!, 提示 , MessageBoxButtons .OK, MessageBoxIcon.Error); conn.Close(); privatevoid button2_Click(object sender, EventArgs e) Application.Exit(); publicclassSMail privatestring smtpServer; privatestring name; privatestring password; privatestring filepath = ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现13 privatestring msgUn; SmtpClient client ; MailMessage message; public SMail(string ss, string na, string pass) smtpServer = ss; name = na; password = pass; publicvoid Login() client = new SmtpClient (smtpServer); MailAddressfrom = newMailAddress (msgUn0, msgUn3, System.Text.Encoding .Default); MailAddress to = new MailAddress (msgUn1); message = new MailMessage (from, to); filepath = msgUn4; if ( != filepath) AttachmentmailAttach = newAttachment (filepath, MediaTypeNames . Application.Octet); ContentDisposition fileDis = mailAttach.ContentDisposition; fileDis.CreationDate = System.IO. File .GetCreationTime(filepath); fileDis.ModificationDate = System.IO. File .GetLastWriteTime(filepath); fileDis.ReadDate = System.IO.File .GetLastAccessTime(filepath); message.Attachments.Add(mailAttach); message.Body = msgUn5; message.BodyEncoding = System.Text.Encoding .Default; message.Subject = msgUn2; message.SubjectEncoding = System.Text.Encoding .Default; client.UseDefaultCredentials = false ; client.Credentials = newSystem.Net. NetworkCredential(name, password); client.DeliveryMethod = SmtpDeliveryMethod .Network; publicvoid SendMails() try client.Send(message); message.Dispose(); MessageBox.Show( 发送成功! ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现14 catch ( Exception e) MessageBox.Show( 发送失败! ); message.Dispose(); publicvoid SetmsgUn( string msg) msgUn = msg; 5. 添加好友6. 好友编辑7. 地址簿名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现15 3、课程设计总结两周的课设时间很快过去了,做得课程设计功能也实现了。在这将近半月的时间中,收获颇胜, 在设计过程中充分的将学过的理论知识运用到实践当中,同时遇到好多未见过的问题,通过查阅资料,询求老师同学的帮助,终于将所有问题全部解决,尤其是做完设计,成功发出第一封邮件时,心里感觉特别高兴,还有更兴奋的是学会了怎样主动的思考和解决问题。在课程设计当中,我遇到了各种问题,有关于做窗体的,有关于写代码的,还有关于建立数据库的, 凡是用到的知识都有掌握不牢固之处。最大的问题就是不管怎么设计始终不能成功的发送邮件,每个程序有好多的代码,而自己学到的毕竟有限,而且写代码时很容易出错,过了一个多星期,我还没有弄出来,而别的同学已经开始写报告了,心里相当的着急,还好有老师的耐心指导,和同学的热心帮助,我坚持着尝试, 后来我们组的一个同学成功的做了出来,鉴于所剩时间有限,我便将人家的程序拷贝过来,分析修改,终于苍天不负有心人,终于在规定时间前做了出来,多次调试,成功的发送出第一封邮件,虽然做出来了,但那是借鉴他人的成果做出来的,心里多少有点不甘。总体来讲, 这次课程设计让我学到很多,知识是用来实践的,学会理论不等于能做出实用的系统, 这需要另一个学习的过程来提高自己的能力。学习就是为了使用,所以课程设计给我们提供了一个很好的实践机会,让我们能检验一下对所学的知识的掌握程度,也让我们真正认识到所学的C#和数据库的实际用处所在。我很高兴我能做出实用的电子邮箱系统,这是我学习以来做的第一个大型的软件系统,我很高兴,我也有信心做好更多的软件系统,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现16 同时我会把成功发送的第一封邮件珍藏起来,因为它具有深远的意义,是我学习中的一个里程碑。最后,感谢老师和同学们的热情帮助,感谢你们!4、参考文献1 程云志等编著数据库原理与SQL Server 2005应用教程机械工业出版社,2006 2 MSDN Library for Visual Studio 2005 3 马骏 C# 网络应用高级编程人民邮电出版社,2006 4 潭桂华,魏亮. Visual C#高级编程范例 J.清华大学出版社,2004 5 邱锦伦,曹旻. Visual C#.NET程序设计教程 J. 清华大学出版社,2006 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - 电子邮件客户端发送功能的实现17 课程设计评语课程设计成绩指导教师(签字)年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -