版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
运用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后,还返回一些邮箱的统计信息,比如:+OK1message(s)[1304byte(s)]不同的服务器返回的信息格式不太一样,所以我们可以用STAT命令来查看邮箱的情况。STAT命令的回应中有两个数字,分别表示邮件的数量和邮件的大小。如果信箱里有信,就可以用RETR命令来获取邮件的正文。RETR命令的格式为:RETR〈邮件编号〉如果返回结果第一行是+OK信息,则表示成功。第二行起便是邮件的正文。最后一行和SMTP协议一样,是一个单独的英文句号,表示邮件的结尾部分。把邮件存储起来后要用DELE命令删除邮箱中的邮件,否则原有的邮件会继续保留在服务器上,一旦邮件一多,你的邮箱就爆了。DELE命令的格式为:DELE〈邮件编号〉如果删错了,可以用RSET命令来恢复所有已被删除的邮件。条件是你还没有退出,一旦退出,那就一切ByeBye了。全部完成以后,输入QUIT命令就可以退出POP3服务器了。实现以上,我简要地向大家介绍了POP3邮件接收的基本过程和原理,下面就是一个运用上面的原理实现的简易的邮件接收程序。有了对基本原理的理解,编程的工作就变得相当轻松了。在本程序中,我主要用到了两个类:TcpClient类和Networkstream类。TcpClient类是运用C#进行网络编程的一个非常重要的类,它提供了通过网络连接、发送和接收数据的简单方法,从而实现了网络编程的大大简化。NetworkStream类实现通过网络套接字发送和接收数据的标准.Net框架流机制,它支持对网络数据流的同步和异步访问,是实现网络通讯的重要组成部分。在这里我先给出程序最终的运行效果,图示如下:
具体的过程步骤如下:第一步:打开VS.Net,新建一个工程,在项目类型里选择“Visual(3#项目”,在模板里选择“Windows应用程序”,工程名不妨为“MailReceiver”,最后点击“确定”按钮。第二步:布置主界面。先往窗体上添加如下控件:六个Label控件、四个TextBox控件、一个RichTextBox控件、一个CheckBox控件、一个ListBox控件以及三个Button控件。各个控件的属性设置如下表所示:Form1(主窗体)Text属性POP3邮件接收程序MaximizeBox属性FalseLabel1Text属性POP3服务器地址:TextAlign属性MiddleRightLabel2Text属性用户名:
TextAlign属性MiddleRightLabel3Text属性密码:TextAlign属性MiddleRightLabel4Text属性信息:TextAlign属性MiddleLeftLabel5Text属性邮件编号:TextAlign属性MiddleLeftLabel6Text属性状态:TextAlign属性MiddleLeftPopServer、Username、Password、MailNum(TextBox控件)Text属性(均为空)Password的PasswordChar属性*Message(RichTextBox控件)Text属性(为空)BackupChBox(CheckBox控件)Text属性在邮件服务器上保留备份Status(ListBox控件)ItemHeight属性12Connect(Button控件)Text属性连接FlatStyle属性FlatDisconnect (Button控件)Text属性断开连接FlatStyle属性FlatEnabled属性FalseRetrieve(Button控件)Text属性收取邮件FlatStyle属性FlatEnabled属性False其他属性均可为默认值。在设置完以上的各个控件属性后,对主窗体进行合理的布局,则可得到最终的界面示意图如下所示:
第三步:代码编写。首先因为程序中运用到网络编程的一些重要的类,如:TcpClient、Networkstream,所以在程序的开头处需添加以下名字空间(Namespace):usingSystem.Net;usingSystem.Net.Sockets;usingSystem.IO;接着,为我们的类添加以下一些公有的数据成员:publicTcpClientServer;publicNetworkStreamNetStrm;publicStreamReaderRdStrm;publicstringData;publicbyte口szData;publicstringCRLF=〃\r\n〃;最后,便是三个按钮的消息响应函数,这三个函数是程序的主体部分。其中Connect按钮的消息响应函数完成了到POP3服务器的连接工作,并根据用户名和密码进行登录。如果一切顺利,则再向服务器发送STAT命令从而获得邮箱中邮件的相关信息:邮件数量和大小,最终完成连接。其函数实现如下:privatevoidConnect_Click(objectsender,System.EventArgse)(//将光标置为等待状态Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;〃用110端口新建POP3服务器连接Server=newTcpClient(PopServer.Text,110);Status.Items.Clear();try(//初始化NetStrm=Server.GetStream();RdStrm=newStreamReader(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(InvalidOperationExceptionerr)Status.Items.Add("Error:"+err.ToString());}而Disconnect按钮的消息响应函数则通过向服务器发送QUIT命令来终止和邮件服务器的连接,实现比较简单,具体函数如下:list2privatevoidDisconnect_Click(objectsender,System.EventArgse)(//将光标置为等待状态Cursorcr=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命令来进行相应的删除。函数实现如下:privatevoidRetrieve_Click(objectsender,System.EventArgse)(//将光标置为等待状态Cursorcr=Cursor.Current;Cursor.Current=Cursors.WaitCursor;stringszTemp;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());}}elseStatus.Items.Add(szTemp);}〃将光标置回原来的状态Cursor.Current=cr;}catch(InvalidOperationExceptionerr)(Status.Items.Add("Error:〃+err.ToString());}}最后一步便是保存你的劳动成果,再进行编译、建立并运行了,最终的图示我已
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 摇床选矿工班组协作知识考核试卷含答案
- 甲状腺细针穿刺取材操作质量控制共识
- PayPal 面试真题及详细参考答案(2026实战版)
- 2025年抗菌药物临床合理运用培训考核试题(附答案)
- 重症肌无力免疫抑制剂应用指南(2026版)
- 营地高空设施检修作业规程
- 仓管员的考试试题及答案
- NPDP产品开发专业认证模拟试题(含详细答案解析)
- 出货抽检管控方案
- 安徽省淮南市东部地区联考2025-2026学年九年级上学期语文期中试卷(含答案)
- 新疆宗教史课件
- Unit 2 We're Family!Section A 2a-2e课件+音频 人教版(2024)七年级英语上册
- 采购汇报指南
- 成都纺织高等专科学校招聘笔试真题2024
- 24年10月自考00186国际商务谈判试题及答案
- 学术交流英语(学术写作)智慧树知到答案2024年哈尔滨工程大学
- DL∕T 1878-2018 燃煤电厂储煤场盘点导则
- 发展汉语初级听力I-13-14(部编)课件
- 脚手架工程安全管理风险辨识及防范措施
- 月度安全检查表
- XX公司就业见习管理方案【模板】
评论
0/150
提交评论