首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

邮件服务器

技术前沿 | Qmail | IMail | MDaemon | Exchange | Domino | 其它 | Foxmail | James | Kerio | JavaMail | WinMail | Sendmail | Postfix | Winwebmail | Merak | CMailServer | 邮件与开发 | 金笛 |
首页 > 邮件服务器 > 邮件与程序开发 > 运用C#实现POP3邮件接收程序 > 正文

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

出处:本站收集于网络 作者:请作者联系 时间:2005-7-12 13:48:00
微软的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命令从而获得邮箱中邮件的相关信息:邮件数量和大小,最终完成连接。其函数实现如下:

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命令来终止和邮件服务器的连接,实现比较简单,具体函数如下:

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邮件接收的实现一无所知,我想在看完这篇文章后,你对它至少会有了个大概的了解。不过,还要指出的是这只是一个很简单的实例,如果要在实际中应用,则还需大大的改进,有兴趣的读者不妨一试。,
相关文章 热门文章
  • c#实现自动发邮件
  • 使用 C# 进行 Outlook 2003 编程的简介
  • 在C#编写代码发送邮件
  • 用C#访问Hotmail
  • 使用C# 创建邮件发送组件(SMTP)
  • C# - MailSender 邮件发送组件源代码 (支持ESMTP, 附件)
  • C#中对POP3邮件解码
  • 用Visual C#实现xx邮件接收程序
  • 使用C# .NET创建启用了Exchange邮箱收件人
  • 用C++ Builder实现电子邮件群发
  • 用Cdonts实现发送Email
  • Jmail的主要参数列表
  • ASP.NET 2.0发送电子邮件全面剖析之二
  • VC++ SMTP协议电子邮件传送剖析
  • 通过sina的smtp验证的Java发送邮件源代码
  • ASP.NET 2.0中发送电子邮件剖析之一
  • 在Asp.Net中使用SmtpMail发送邮件的方法
  • .NET环境下Email的技术介绍
  • ASP.NET 2.0发送电子邮件中存在的问题
  • 用ASP判断Email地址是否有效
  • IIS如何接收ServerXMLHTTP传过来的编码字符?
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号