好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

15页
  • 卖家[上传人]:豆浆
  • 文档编号:20549208
  • 上传时间:2017-11-22
  • 文档格式:DOC
  • 文档大小:78.50KB
  • / 15 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 运用 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控件各个控件的属性设置如下表所示:Text 属性 POP3 邮件接收程序Form1(主窗体)MaximizeBox 属性 FalseText 属性 POP3 服务器地址:Label1TextAlign 属性 MiddleRightText 属性 用户名:Label2TextAlign 属性 MiddleRightText 属性 密码:Label3TextAlign 属性 MiddleRightText 属性 信息:Label4TextAlign 属性 MiddleLeftText 属性 邮件编号:Label5TextAlign 属性 MiddleLeftText 属性 状态:Label6TextAlign 属性 MiddleLeftText 属性 (均为空)PopServer、Username、Password、MailNum(TextBox 控件)Password 的 PasswordChar 属性 *Message(RichTextBox 控件)Text 属性 (为空)BackupChBox(CheckBox 控件)Text 属性 在邮件服务器上保留备份Status(ListBox 控件) ItemHeight 属性 12Text 属性 连接Connect(Button 控件)FlatStyle 属性 FlatText 属性 断开连接FlatStyle 属性 FlatDisconnect (Button 控件)Enabled 属性 FalseText 属性 收取邮件FlatStyle 属性 FlatRetrieve(Button 控件)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 命令来终止和邮件服务器的连接,实现比较简单,具体函数如下:lis t2privatevoid 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; 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.