C#实现POP3邮件接收程序

Visual C#使用PoP3协议构建客户端邮件接收程序 电子邮件系统中的协议主要有RFC822,SMTP,POP,IMAP,MIME五种协议,这里将介绍一个简单的基于POP3协议的邮件接收程序。 The main  protocols of Email System is RFC822,SMTP,POP,IMAP ,MIME fiv 阅读详情

来自:http://outofmemory.cn/code-snippet/2409/C-achieve-POP3-email-receive-program

本文通过运用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框架流机制,它支持对网络数据流的同步和异步访问,是实现网络通讯的重要组成部分。在这里我先给出程序最终的运行效果,图示如下:

pop3

具体的过程步骤如下:

第一步:打开VS.Net,新建一个工程,在项目类型里选择"Visual C#项目",在模板里选择"Windows 应用程序",工程名不妨为"MailReceiver",最后点击"确定"按钮。

第二步:布置主界面。先往窗体上添加如下控件:六个Label控件、四个TextBox控件、一个RichTextBox控件、一个CheckBox控件、一个ListBox控件以及三个Button控件。各个控件的属性设置如图1所示。

在设置完图1的各个控件属性后,对主窗体进行合理的布局,则可得到最终的界面示意图如下所示:

![pop3][pop3 2]

第三步:代码编写。首先因为程序中运用到网络编程的一些重要的类,如:TcpClient、NetworkStream,所以在程序的开头处需添加以下名字空间(Namespace):

using System.Net; 
using System.Net.Sockets; 
using System.IO;

接着,为我们的类添加以下一些公有的数据成员:

public TcpClient Server; 
public NetworkStream NetStrm; 
public StreamReader RdStrm; 
public string Data; 
public byte[] szData; 
public string CRLF = "\r\n";

最后,便是三个按钮的消息响应函数,这三个函数是程序的主体部分。其中Connect按钮的消息响应函数完成了到POP3服务器的连接工作,并根据用户名和密码进行登录。如果一切顺利,则再向服务器发送STAT命令从而获得邮箱中邮件的相关信息:邮件数量和大小,最终完成连接。其函数实现如下:

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

private void 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命令来进行相应的删除。函数实现如下:

private void 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#.NET实现电子邮件客户程序 <br />用C#.NET实现电子邮件客户程序 <br />周华清 戴晟辉(东华理工学院计算机与通信系 江西 抚州 344000) <br />【摘要】通过C#这种VisualSTudio.NET中新引入的面向对象且类型安全的编程语言,在.NET平台上开发电子邮件客户程序。通过套接字编程实现网络通信连接,阐述SMTP(简单邮件传输协议)和POP3(邮局协议)的工作原理,然后具体讲解了根据SMTP协议开发电子邮件客户端的邮件发送程序,根据POP3协议开发电子邮件客户端的邮件接收程序。 <br />【关键词】套 阅读详情

相关推荐

C# 使用 MailKit 接收邮件(附demo)

MailKit 是一个开源的 C# 邮件处理库,用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使用的 API,支持多种邮件协议,包括 SMTP、POP3、和 IMAP。特性与优势描述多协议支持支持 SMTP、POP3、IMAP 等多种邮件协议。异步操作使用异步编程模型,提高性能和响应性。附件处理提供灵活的附件处理功能,支持添加、读取和保存邮件附件。SSL/TLS 支持支持安全套接字层(SSL)和传输层安全性(TLS),确保邮件的安全传输。容错处理。

二等碗 4133

C# 邮件的发送与接收SMTP和POP3

C# 使用LumiSoft.Net 进行邮件的发送与接收 SMTP协议和POP3协议

TheWindOfFate的博客 2293

探索SMTP与POP3协议在邮件处理中的应用

本文深入探讨了SMTP和POP3协议的基本原理和实现方式。通过分析VB.NET和C#代码示例,我们了解了SMTP服务器如何监听端口25以接收连接,并通过一系列响应与客户端交互。同时,文章详细解释了POP3协议用于接收电子邮件的机制,以及如何使用命令行进行邮箱操作。此外,还介绍了如何构建简单的邮件处理程序,包括SPAM过滤功能。

weixin_28681379的博客 341

实现POP3邮件接收程序[C#]

微软的VS.Net开发工具推出已有一段时日了,其中的那门新语言C#也日渐为大家所熟悉并接受。C#作为一门新兴的语言相信具有传统语言不可比拟的优越性,特别是在网络应用方面,开发者更是感觉到了C#的强大功能。所以本文就通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理。首先我向大家介绍邮件接收的基本原理:

3385

使用C#创建邮件客户端应用

本文还有配套的精品资源,点击获取 简介:本文将介绍如何使用C#编写一个邮件接收程序。C#是一种面向对象的编程语言,由微软开发,适用于Windows平台上的多种软件开发,如网络通信和桌面应用。邮件客户端程序开发涉及对SMTP和POP3协议的理解,使用 ***.Mail 命名空间,包括 MailMessage 、 SmtpClient ...

weixin_35728286的博客 788

pop3 客户端 c#pop3 客户端 开源的pop3 客户端 pop3

开源的pop3 客户端, 用C#从底层写的POP3邮件接收程序,让您从底层了解邮件接收的原理,对从事邮件开发开发人员很有帮助。

【愚公系列】2022年12月 .NET CORE工具案例-使用MailKit使用POP3协议进行邮件读取

MailKit是最流行且最强大的.NET邮件处理框架之一,下面为大家简单介绍MailKit的使用方式(IMAP为例)安全SASL 身份验证支持 S/MIME v3.2。支持 OpenPGP。支持 DKIM 签名。支持 ARC 签名。短信客户端支持 SSL 和 TLS。支持 STARTTLS、SIZE、DSN、8BITMIME、pipelining、binarymime 和 SMTPUTF8 扩展。POP3 客户端支持 SSL 和 TLS。支持 STLS、UIDL、PIPELINING、UTF8 和 LANG

愚公智库 9711

MiFlash Prime免授权刷机实战:解锁小米9008 EDL救砖新方案

MiFlash Prime作为免授权刷机工具,有效解决了小米设备在9008 EDL模式下因账号验证无法救砖的难题。本文详细介绍了从驱动安装、进入EDL模式到固件刷写的完整流程,帮助用户安全快速地恢复变砖设备,是维修人员和极客的实用解决方案。

5f4d3s2a1q的博客 2852

C#进阶-实现邮箱收发功能

本文介绍了C#开发中常用的操作邮箱的方法,包括使用SMTP协议发送邮件、通过POP3和IMAP协议接收邮件,以及利用Exchange服务器进行邮件的发送、接收和管理等。每种方法都配有相应的示例代码,帮助读者快速上手。无论是自动化通知、报警还是与用户进行交互,C#提供了多种灵活可靠的方式来实现邮件功能,满足不同场景的需求。

踏雨歌青春,诗酒趁年华 1万+

Spark on Yarn 高可用模式部署流程

本文介绍了如何配置Spark和Yarn的高可用(HA)环境,以确保在大规模数据处理中避免单点故障。

xhaoDream的博客 1443

【OTDR曲线工具箱】04 批量生成sor文件

软件下载地址:http://120.78.150.214:9999/isora.zip 通过一个测试数据sor文件,批量生成多个测试文件(基于Bellcore GR196及SR-4731标准)。主要考虑哪些问题: 1、sor测试是否符合要求(主要是衰减系数) 2、多个文件的创建时间 3、文件必须随机处理,不要看省去一模一样。 来说说怎么操作的 第一步:选择参考曲线 参考曲线的选择由两种方法:从文件中导入、从曲线库中选择。 其中曲线库分为公共库和个人库两种,平时浏览的sor文件都可以加载到库中。 第二步

夜晚是传说的博客 5266

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

导读:   本文通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理。   首先我向大家介绍邮件接收的基本原理:   一开始便是客户端与服务器的连接。不过,在客户端连接到服务器之前,注意把端口设为POP3协议默认的110号。   客户端连接服务器成功后,服务器会返回以下信息:   +OK……   字符

黑客攻防 | .net 源代码下载 | ASP.NET开发 | ORACLE数据库开发 | JAVASCRIPT脚本下载 | java源码下载 2083

安卓15_ROM修改定制化_____修改rom的前提条件 去除各种验证 安卓设备通用

通过博文了解💝💝💝 1-------💝💝💝了解安卓设备的启动流程与核心验证机制 2-------💝💝💝了解安卓设备修改rom中的各种验证机制以及对应的去除方法 3-------💝💝💝了解avb验证与dm验证的本质区别与对应的操作方式 4-------💝💝💝修改rom前的循序步骤 避免验证机制导致的不开机

小马哥的专栏 504

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

微软的VS.Net开发工具推出已有一段时日了,其中的那门新语言C#也日渐为大家所熟悉并接受。C#作为一门新兴的语言相信具有传统语言不可比拟的优越性,特别是在网络应用方面,开发者更是感觉到了C#的强大功能。所以本文就通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理。首先我向大家介绍邮件接收的基本原理:

962

华为OD机考双机位C卷 - 朋友圈个数(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 朋友圈个数(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 695

YOLO与ORB-SLAM3的结合:实现动态环境下的目标检测与视觉SLAM

摘要: 本文介绍如何将YOLOv5目标检测与ORB-SLAM3视觉SLAM系统结合,实现动态环境下的机器人感知与定位。内容包括:源码下载(集成项目YOLO_ORB_SLAM3)、libtorch安装(PyTorch C++支持)、编译配置(解决路径依赖问题)、ROS环境下的部署(Noetic适配),以及使用TUM数据集的测试流程(RGB-D数据关联与运行)。重点解决编译时Torch路径错误、ROS与Anaconda冲突等问题,并展示系统运行效果。该整合方案为动态场景SLAM提供目标检测能力,未来可优化检测模

FJN110的博客 960
上一篇: IBatisNet 学习---01
下一篇: c#发送邮件内嵌图片的两种方法
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值