运用C#实现POP3邮件接收程序.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运用 C# 实现 POP3 邮件 接收 程序
- 资源描述:
-
运用C#实现POP3邮件接收程序 微软的VS.Net开发工具推出已有一段时日了,其中的那门新语言C#也日渐为大家所熟悉并接受。C#作为一门新兴的语言相信具有传统语言不可比拟的优越性,特别是在网络应用方面,开发者更是感觉到了C#的强大功能。所以本文就通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理。 首先我向大家介绍邮件接收的基本原理: 一开始便是客户端与服务器的连接。不过,在客户端连接到服务器之前,注意把端口设为POP3协议默认的110号。 客户端连接服务器成功后,服务器会返回以下信息: +OK…… 字符+OK是POP3协议的返回信息。它的回应信息不像SMTP协议那样用丰富多变的数字表示,只有两个:+OK或者-ERR。其中,+OK表示连接成功,而-ERR则表示连接失败。 接下来,客户端输入USER <用户名> 该命令告诉服务器你的用户名。注意,有些服务器会区分大小写字母的。 服务器返回+OK后,客户端输入PASS <口令> 服务器返回+OK后,还返回一些邮箱的统计信息,比如:+OK 1 message(s) [1304 byte(s)] 不同的服务器返回的信息格式不太一样,所以我们可以用STAT命令来查看邮箱的情况。STAT命令的回应中有两个数字,分别表示邮件的数量和邮件的大小。 如果信箱里有信,就可以用RETR命令来获取邮件的正文。RETR命令的格式为: RETR <邮件编号> 如果返回结果第一行是+OK信息,则表示成功。第二行起便是邮件的正文。最后一行和SMTP协议一样,是一个单独的英文句号,表示邮件的结尾部分。 把邮件存储起来后要用DELE命令删除邮箱中的邮件,否则原有的邮件会继续保留在服务器上,一旦邮件一多,你的邮箱就爆了。DELE命令的格式为: DELE <邮件编号> 如果删错了,可以用RSET命令来恢复所有已被删除的邮件。条件是你还没有退出,一旦退出,那就一切Bye Bye了。全部完成以后,输入QUIT命令就可以退出POP3服务器了。 实现 以上,我简要地向大家介绍了POP3邮件接收的基本过程和原理,下面就是一个运用上面的原理实现的简易的邮件接收程序。有了对基本原理的理解,编程的工作就变得相当轻松了。在本程序中,我主要用到了两个类:TcpClient类和NetworkStream类。TcpClient类是运用C#进行网络编程的一个非常重要的类,它提供了通过网络连接、发送和接收数据的简单方法,从而实现了网络编程的大大简化。NetworkStream类实现通过网络套接字发送和接收数据的标准.Net框架流机制,它支持对网络数据流的同步和异步访问,是实现网络通讯的重要组成部分。在这里我先给出程序最终的运行效果,图示如下: 具体的过程步骤如下: 第一步:打开VS.Net,新建一个工程,在项目类型里选择“Visual C#项目”,在模板里选择“Windows 应用程序”,工程名不妨为“MailReceiver”,最后点击“确定”按钮。 第二步:布置主界面。先往窗体上添加如下控件:六个Label控件、四个TextBox控件、一个RichTextBox控件、一个CheckBox控件、一个ListBox控件以及三个Button控件。各个控件的属性设置如下表所示: Form1(主窗体) Text属性 POP3邮件接收程序 MaximizeBox属性 False Label1 Text属性 POP3 服务器地址: TextAlign属性 MiddleRight Label2 Text属性 用户名: TextAlign属性 MiddleRight Label3 Text属性 密码: TextAlign属性 MiddleRight Label4 Text属性 信息: TextAlign属性 MiddleLeft Label5 Text属性 邮件编号: TextAlign属性 MiddleLeft Label6 Text属性 状态: TextAlign属性 MiddleLeft PopServer、Username、Password、MailNum(TextBox控件) Text属性 (均为空) Password的PasswordChar属性 * Message(RichTextBox控件) Text属性 (为空) BackupChBox(CheckBox控件) Text属性 在邮件服务器上保留备份 Status(ListBox控件) ItemHeight属性 12 Connect(Button控件) Text属性 连接 FlatStyle属性 Flat Disconnect (Button控件) Text属性 断开连接 FlatStyle属性 Flat Enabled属性 False Retrieve(Button控件) Text属性 收取邮件 FlatStyle属性 Flat Enabled属性 False 其他属性均可为默认值。在设置完以上的各个控件属性后,对主窗体进行合理的布局,则可得到最终的界面示意图如下所示: 第三步:代码编写。首先因为程序中运用到网络编程的一些重要的类,如:TcpClient、NetworkStream,所以在程序的开头处需添加以下名字空间(Namespace): using System.Net; using System.Net.Sockets; using System.IO; 接着,为我们的类添加以下一些公有的数据成员: public TcpClient Server; public NetworkStream NetStrm; public StreamReader RdStrm; publicstring Data; publicbyte[] szData; publicstring CRLF = "\r\n"; 最后,便是三个按钮的消息响应函数,这三个函数是程序的主体部分。其中Connect按钮的消息响应函数完成了到POP3服务器的连接工作,并根据用户名和密码进行登录。如果一切顺利,则再向服务器发送STAT命令从而获得邮箱中邮件的相关信息:邮件数量和大小,最终完成连接。其函数实现如下: privatevoid Connect_Click(object sender, System.EventArgs e) { //将光标置为等待状态 Cursor cr = Cursor.Current; Cursor.Current = Cursors.WaitCursor; //用110端口新建POP3服务器连接 Server = new TcpClient(PopServer.Text,110); Status.Items.Clear(); try { //初始化 NetStrm = Server.GetStream(); RdStrm= new StreamReader(Server.GetStream()); Status.Items.Add(RdStrm.ReadLine()); //登录服务器过程 Data = "USER "+ Username.Text+CRLF; szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); NetStrm.Write(szData,0,szData.Length); Status.Items.Add(RdStrm.ReadLine()); Data = "PASS "+ Password.Text+CRLF; szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); NetStrm.Write(szData,0,szData.Length); Status.Items.Add(RdStrm.ReadLine()); //向服务器发送STAT命令,从而取得邮箱的相关信息:邮件数量和大小 Data = "STAT"+CRLF; szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); NetStrm.Write(szData,0,szData.Length); Status.Items.Add(RdStrm.ReadLine()); //改变按钮的状态 Connect.Enabled = false; Disconnect.Enabled = true; Retrieve.Enabled = true; //将光标置回原来的状态 Cursor.Current = cr; } catch(InvalidOperationException err) { Status.Items.Add("Error: "+err.ToString()); } } 而Disconnect按钮的消息响应函数则通过向服务器发送QUIT命令来终止和邮件服务器的连接,实现比较简单,具体函数如下:list2 privatevoid Disconnect_Click(object sender, System.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); Status.Items.Add(RdStrm.ReadLine()); //断开连接 NetStrm.Close(); RdStrm.Close(); //改变按钮的状态 Connect.Enabled = true; Disconnect.Enabled = false; Retrieve.Enabled = false; //将光标置回原来的状态 Cursor.Current = cr; } 最后,Retrieve按钮的消息响应函数则根据用户在邮件编号文本框中的输入来取得相应的邮件,它向服务器发送的命令为RETR,并根据返回的信息判断邮件的有无。若返回信息的第一个字符为“+”,则表示+OK,也即成功;若为“-”,则表示-ERR,也即为失败。在成功的情况下,若用户选择了“在邮件服务器上保留备份”,则收取邮件后不删除服务器上的备份,否则用DELE命令来进行相应的删除。函数实现如下: privatevoid Retrieve_Click(object sender, System.EventArgs e) { //将光标置为等待状态 Cursor cr = Cursor.Current; Cursor.Current = Cursors.WaitCursor; string szTemp; Message.Clear(); try { //根据邮件编号从服务器获得相应邮件 Data = "RETR "+ MailNum.Text+CRLF; szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); NetStrm.Write(szData,0,szData.Length); szTemp = RdStrm.ReadLine(); if(szTemp[0]!='-') { //不断地读取邮件内容,只到结束标志:英文句号 while(szTemp!=".") { Message.Text += szTemp; szTemp = RdStrm.ReadLine(); } //若BackupChBox未选中,则收取邮件后,删除保留在服务器上的邮件 if(BackupChBox.Checked == false) { Data = "DELE" + MailNum.Text + CRLF; szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()); NetStrm.Write(szData,0,szData.Length); Status.Items.Add(RdStrm.ReadLine()); } } else { Status.Items.Add(szTemp); } //将光标置回原来的状态 Cursor.Current = cr; } catch(InvalidOperationException err) { Status.Items.Add("Error: "+err.ToString()); } } 最后一步便是保存你的劳动成果,再进行编译、建立并运行了,最终的图示我已经在文章的开头处给出了,还行吧。 到处为止,我们已经完成了POP3邮件接收程序的全部工作了。从中,我们不难发现运用C#完成一些网络实用编程是非常容易的。只要我们掌握了其中的原理,具体的编程工作就变得非常的轻松而且有条理。即使以前你对POP3邮件接收的实现一无所知,我想在看完这篇文章后,你对它至少会有了个大概的了解。不过,还要指出的是这只是一个很简单的实例,如果要在实际中应用,则还需大大的改进,有兴趣的读者不妨一试。 源代码文件为展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




运用C#实现POP3邮件接收程序.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/8972693.html