版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络编程实训报告题目: 基于stmp与pop3协议的邮件发送与接收 姓 名: 学 院: 专 业: 班 级: 学 号: 指导教师: 完成日期: 年 月 日原创性声明本人郑重声明:上交的设计报告,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本文不包含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。作者签名:日期: 年 月 日 前言电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能
2、象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。电子邮件不仅可利用电话网络,而且可利用任何通信网传送。在利用电话网络时,还可利用其非高峰期间传送信息,这对于商业邮件具有特殊价值。由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。smtp 是一种提供可靠且有效电子邮件传输的协议。 smtp 是建模在 ftp 文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。pop 协议允许工作站动态访问服务器上的邮件,目前已发展到第三版,称为 pop3。pop
3、3 允许工作站检索邮件服务器上的邮件。pop3 传输的是数据消息,这些消息可以是指令,也可以是应答。本实践是在smtp和pop协议下设计的一个电子邮箱,能够实现发送,接收邮件等功能。第一章 需求分析1.1 发送邮件发送端使用smtp 发送邮件到邮件服务器发送邮件过程:输入发件人邮箱、用户名、密码,当与邮件服务器建立连接后,编写邮件主题和内容,若需要附件的话,就点击添加附件按钮进行添加附件。最后点击发送按钮发送邮件1.2 接收邮件接收端使用pop3从邮件服务器上下载邮件,并在接收端上阅读。接收邮件过程:输入用户名和密码与邮件服务器连接,在文本框中显示出服务器上所接收的邮件,对需要的阅读的邮件点击
4、阅读下载到接收端进行阅读。在状态栏上显示于邮件服务器的连接状态,以及显示连接过程。若对于不需要的邮件,可在文本框选中,点击删除按钮删除。第二章总体设计2.1 总体设计原理电子邮件的工作过程遵循客户-服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(smtp服务器)发送。邮局服务器识别接收者的地址,并向管理该地址的邮件服务器(pop3服务器)发送消息。一个邮件系统的传输包含用户代理user agent传输代理transferagent 及接受代理deliveryag
5、ent三大部分。用户代理是一个用户发信和收信的程序, 负责将电子邮件按照一定的标准包装, 然后送至邮件服务器, 或由邮件服务器收回。传输代理负责信件的交换和传输。将信件传送至适当的邮件主机, 再由接受代理将信件分发至不同的邮件信箱。传输代理必须要能够接受用户邮件程序送来的信件, 解读收信人的地址, 根据smtp 协议将它正确无误地传递到目的地。现在一般的传输代理已采用sendmail程序完成工作。电子邮件到达邮件主机后, 在经接收代理pop协议被用户读取至自己的主机。电子邮件在发送与接收过程中都要遵循smtp、pop3等协议,这些协议确保了电子邮件在各种不同系统之间的传输。其中,smtp负责电
6、子邮件的发送,而pop3则用于接收internet上的电子邮件。smtp(simple mail transfer protocol, smtp)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。smtp协议属于tcpip协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过smtp协议所指定的服务器,我们就可以把email寄到收信人的服务器上pop3(post office protocol 3)即邮局协议,目前已发展到第三版,称pop3。它规定怎样将个人计算机连接到internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的
7、第一个离线协议标准,pop3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而pop3服务器则是遵循pop3协议的接收邮件服务器,用来接收电子邮件的。总的来说pop3协议是让用户把服务器上的信收到本地来所需要的一种协议。本程序为一个基于smtp和pop3协议的小型email收发程序,简单的实现了邮件的收发功能。第三章详细设计与实现3.1设计思路本次设计主要基于pop3协议的基础上实现的,首先详细了解一下pop3协议pop3协议1. pop适用于c/s结构的脱机模型的电子邮件协议,目前已发展到第三版,称pop3。脱机模型即不能在线操作。2.当客户机与
8、服务器连接并查询新电子邮件时,被该客户机指定的所有将被下载的邮件都将被程序下载到客户机,下载后,电子邮件客户机就可以删除或修改任意邮件,而无需与电子邮件服务器进一步交互。3. pop3客户向pop3服务器发送命令并等待响应,pop3命令采用命令行形式,用ascii码表示。服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以ascii文本+ok或-err指出相应的操作状态是成功还是失败。4. 在pop3协议中有三种状态,认可状态,处理状态和更新状态。当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则
9、进入更新状态,更新之后最后重返认可状态。如下图等待连接身份确认quit命令|认可|处理|更新|重返认可状态5.认可状态的命令语句。一般情况下,大多数现有的pop3客户与服务器执行采用ascii明文发送用户名和口令,在认可状态等待客户连接的情况下,客户发出连接,并由命令user/pass对在网络上发送明文用户名和口令给服务器进行身份确认。一旦确认成功,便转入处理状态。为了避免发送明文口令的问题,有一种新的认证方法,命令为apop,使用apop,口令在传输之前被加密。当第一次与服务器连接时,pop3服务器向客户机发送一个ascii码问候,这个问候由一串字符组成对每个客户机是唯一的,与当时的时间有关
10、,然后,客户机把它的纯文本口令附加到从服务器接收到的字符串之后,然后计算出结果字符串的md5单出函数消息摘要,客户机把用户名与md5消息摘要作为apop命令的参数一起发送出去。目前,大多数windows上的邮件客户软件不支持apop命令,qpopper支持。6.pop3命令码如下:命令参数状态描述假设用c表示客户端(client),s表示服务器端(server)。1) 授权状态 客户端首先与pop3服务器建立tcp连接,服务器接收后发送一个单行的确认信息。此时pop3会话就进入了授权状态。在授权状态,客户需要向服务器发送用户名和密码进行确认,具体命令如下: 1发送用户名: 语法形式:user
11、功能:将客户的用户名发送到服务器。 服务器返回:+ok正确的用户名;-err错误的用户名。 示例:c:user myname s:+ok welcome on this server.2用户名确认成功后,需要输入密码: 语法形式:pass 功能:将客户的密码发送给服务器。 服务器返回:+ok正确的用户名;-ok错误的用户名。2) 操作状态 授权成功后, pop3会话将进入操作状态,客户就可以执行pop3命令进行相应的操作。对于每个命令,服务器都会返回应答信息。下面是在操作状态中使用的命令: 1stat命令 语法形式:stat 功能:从服务器中获邮件总数和总字节数。 服务器返回:邮件总数和总字节
12、数。 示例:c:stat s:+ok 2 320 2list命令 语法形式:list 功能:从服务中获得邮件列表和大小。 服务器返回:列出邮件列表和大小。 示例:c:list s:+ok 2 messages (320 octets) s:1 120 s:2 200 3retr命令 语法形式:retr 功能:从服务器中获得一个邮件。 服务器返回:+ok成功;-err错误。 示例:c: retr 1 s:+ok 120 octets s: s: . 注意,这里的“.”是单独发送的。 4dele命令 语法形式:dele 功能:服务器将邮件标记为删除,当执行quit命令时才真正删除。 服务器返回:+
13、ok成功;-err错误。 示例:c:dele 1 s:+ok 1 deleted 示例:c:pass * s:+ok myname logged in at 19:04响应3.2源代码发送端: private void textboxusername_textchanged(object sender, eventargs e) labelusername.visible = !regex.ismatch(textboxusername.text, w+(-+.w+)*w+(-.w+)*.w+(-.w+)*$); private void textboxpassword_textchanged
14、(object sender, eventargs e) labelpassword.visible = !regex.ismatch(textboxpassword.text, w5,20$); private void textboxreceive_textchanged(object sender, eventargs e) labelreceive.visible = !regex.ismatch(textboxreceive.text, w+(-+.w+)*w+(-.w+)*.w+(-.w+)*$); private void textboxsubject_textchanged(o
15、bject sender, eventargs e) labelsubject.visible = !regex.ismatch(textboxsubject.text, .1,$); private void textboxbody_textchanged(object sender, eventargs e) labelbody.visible = !regex.ismatch(textboxbody.text, .1,$); private void buttonsend_click(object sender, eventargs e) string invalidstring = ;
16、 if (labelusername.visible = true) invalidstring += 用户名、; if (labelpassword.visible = true) invalidstring += 口令、; if (labelreceive.visible = true) invalidstring += 收件人、; if (labelsubject.visible = true) invalidstring += 主题、; if (labelbody.visible = true) invalidstring += 邮件内容、; /if (invalidstring.le
17、ngth 0) / / messagebox.show(invalidstring.trimend( ) + 不合规定); / else mailaddress from = new mailaddress(textboxusername.text); mailaddress to = new mailaddress(textboxreceive.text); mailmessage message = new mailmessage(from, to); message.subject = textboxsubject.text; message.subjectencoding = syst
18、em.text.encoding.utf8; message.body = textboxbody.text; message.bodyencoding = system.text.encoding.utf8; if (listbox1.items.count 0) for (int i = 0; i 0) listbox1.items.addrange(myopenfiledialog.filenames); private void button1_click(object sender, eventargs e) this.hide(); formreceivemail re = new
19、 formreceivemail(); re.show(); 接收端:private void connect_click(object sender, eventargs e) /将光标置为等待状态 cursor cr = cursor.current; cursor.current = cursors.waitcursor; /用110端口新建pop3服务器连接 server = new tcpclient(textboxpop3.text, 110); listboxstatus.items.clear(); try /初始化 netstrm = server.getstream();
20、rdstrm = new streamreader(server.getstream(); listboxstatus.items.add(rdstrm.readline(); /登录服务器过程 data = user + textboxuser.text + crlf; szdata = system.text.encoding.utf8.getbytes(data.tochararray(); netstrm.write(szdata, 0, szdata.length); listboxstatus.items.add(rdstrm.readline(); data = pass + t
21、extboxpass.text + crlf; szdata = system.text.encoding.utf8.getbytes(data.tochararray(); netstrm.write(szdata, 0, szdata.length); listboxstatus.items.add(rdstrm.readline(); /向服务器发送stat命令,从而取得邮箱的相关信息:邮件数量和大小 data = stat + crlf; szdata = system.text.encoding.utf8.getbytes(data.tochararray(); netstrm.wr
22、ite(szdata, 0, szdata.length); listboxstatus.items.add(rdstrm.readline(); /改变按钮的状态 connect.enabled = false; disconnect.enabled = true; receive.enabled = true; /将光标置回原来状态 cursor.current = cr; catch (invalidoperationexception err) listboxstatus.items.add(error: + err.tostring(); private void disconnec
23、t_click_1(object sender, eventargs e) /将光标置为等待状态 cursor cr = cursor.current; cursor.current = cursors.waitcursor; /向服务器发送quit命令从而结束和pop3服务器的会话 data = quit + crlf; szdata = system.text.encoding.ascii.getbytes(data.tochararray(); netstrm.write(szdata, 0, szdata.length); listboxstatus.items.add(rdstrm.
24、readline(); /断开连接 netstrm.close(); rdstrm.close(); /改变按钮的状态 connect.enabled = true; disconnect.enabled = false; receive.enabled = false; /将光标置回原来状态 cursor.current = cr; private void receive_click(object sender, eventargs e) /将光标置为等待状态 cursor cr = cursor.current; cursor.current = cursors.waitcursor;
25、string sztemp; listboxcontent.items.clear(); try /根据邮件编号从服务器获得相应邮件 data = retr + textboxmailnum.text + crlf; szdata = system.text.encoding.ascii.getbytes(data.tochararray(); netstrm.write(szdata, 0, szdata.length); sztemp = rdstrm.readline(); if (sztemp0 != -) /不断地读取邮件内容,只到结束标志:英文句号 while (sztemp != .) l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 达标测试人教版八年级物理上册第5章透镜及其应用-透镜同步练习练习题(含答案解析)
- 重难点解析人教版八年级物理上册第5章透镜及其应用-透镜单元测评试题(含答案解析版)
- 强化训练人教版八年级物理上册第6章质量与密度-质量定向攻克试卷(含答案详解)
- 强化训练苏科版八年级物理下册《物质的物理属性》单元测试试卷(附答案详解)
- 立春节气解析
- 2025年高三生物回归教材重点题
- 解析卷-人教版八年级上册物理物态变化《熔化和凝固》定向练习试题(含答案及解析)
- 2025年高二生物下学期协同进化现象题
- 绘本故事一年级分享
- 2025年高二(下)生物微生物冶金题
- 2023年04月2023年山东潍坊高新区招考聘用社区工作人员40人笔试参考题库附答案解析
- 部编版四年级语文上册第25课《王戎不取道旁李》说课稿+优质教案
- 差分进化算法
- 助听器效果评估
- 第一章儿童生活与教育
- 飞山景区旅游开发运营方案
- 四年级上册语文阅读理解及答案(A4打印版)
- GB/T 3478.1-2008圆柱直齿渐开线花键(米制模数齿侧配合)第1部分:总论
- 服饰编码规则表参考范本
- DID方法与合成控制法-课件
- 临床医学研究设计及统计学问题课件
评论
0/150
提交评论