Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->网络应用 ->邮件服务器 ->正文

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

来源:Linuxdby.com 作者:Webmaster 时间:2007-05-31 点击: [收藏] [投稿]
微软的VS.Net开发工具推出已有一段时日了,其中的那门新语言C#也日渐为大家所熟悉并接受。C#作为一门新兴的语言相信具有传统语言不可比拟的优越性,特别是在网络应用方面,开发者更是感觉到了C#的强大功能。所以本文就通过运用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命令从而获得邮箱中邮件的相关信息:邮件数量和大小,最终完成连接。其函数实现如下:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:使用C# 创建邮件发送组件(SMTP)   下一篇:通过sina的smtp验证的Java发送邮件源代码

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号