自制Pop3邮件接收系统(二):利用TcpClient得到Pop3的邮件列表数据

原创 2002年12月13日 09:05:00

Pop3接收数据,参见
http://www.aspalliance.com/chrisg/default.asp?article=93

改成c#代码,并修改了一些bug

1.用的是ASCII,并不适合国内的邮件读取
解决方法:改为Encoding.GetEncoding(936)
2.GetResponse并不是堵塞方式,没有完全下载数据
解决方法:设置一个strEnd标志,来判断是否结束
3.GetResponse每次都要返回ReceiveBufferSize长的数据
解决方法:根据接收到数据长度,返回缓冲中的对应长度的数据
等等..

System.Net.Sockets.TcpClient tcpC;
System.Net.Sockets.NetworkStream netStream;
string SendCommand(string sToSend){
 byte[] bData=Encoding.GetEncoding(936).GetBytes(sToSend+Environment.NewLine);
 netStream.Write(bData,0,bData.Length);
 return GetResponse();
}

string GetResponse(){
  byte[] bData=new byte[tcpC.ReceiveBufferSize];
  int iRec=netStream.Read(bData, 0, bData.Length);
  return Encoding.GetEncoding(936).GetString(bData,0,iRec);
}
string ReadMail(string ps,string un,string pw){
 tcpC=new System.Net.Sockets.TcpClient(ps,110);
 netStream = tcpC.GetStream();
 string strResponse=GetResponse();
 string strNL=Environment.NewLine;
 string strEnd=strNL+"."+strNL+"+OK "+strNL;
 SendCommand("user "+un);
 SendCommand("pass "+pw);
 strResponse=SendCommand("stat");
 int iCount=Int32.Parse(strResponse.Split(' ')[1]);
 Response.Write(iCount + " Messages");
 for(int i=1;i<iCount;i++)strResponse+=SendCommand("top "+i+" 0");
 strResponse+=SendCommand("QUIT");
 while(!strResponse.EndsWith(strEnd))strResponse+=GetResponse();
 tcpC.Close();
 return strResponse;
}

调用方法:
 ReadMail(pop3Server,username,password)

ps.简化了代码,取消了一些异常的捕捉,是为了让大家看得清楚明白.

C# Tcp协议收发数据(TCPClient发,Socket收)

C# Tcp协议收发数据(TCPClient发,Socket收) 运行这个程序前需要先关闭Windows防火墙,Win7系统关闭防火墙的方法是在控制面板的“控制面板\系统和安全\Wi...
  • u010655348
  • u010655348
  • 2016年10月23日 22:02
  • 1332

C# pop3实现的收邮件

 C# pop3实现的收邮件东西写的不太清楚  可以显示邮件正文  标题  发件人,及邮件数,删除邮件!含有DecodeBase64和quoted-printable  解码 using System...
  • kurt520
  • kurt520
  • 2008年01月23日 16:14
  • 459

JavaMail系列(四) 使用POP3协议接收并解析电子邮件

package org.yangxin.study.jm;    import java.io.BufferedInputStream;  import java.io.BufferedOutp...
  • jarniyy
  • jarniyy
  • 2016年05月04日 15:52
  • 3959

C#实现POP3邮件接收程序

来自:http://outofmemory.cn/code-snippet/2409/C-achieve-POP3-email-receive-program 本文通过运用C#来实现一个基于...
  • ArvinStudy
  • ArvinStudy
  • 2013年03月08日 11:41
  • 2814

POP3重复接收邮件的问题研究

在Outlook 2003中设置了在服务器上保留邮件副本之后,在pst文件中就会生成一个已经接收邮件的列表,称为UIDL缓存。UIDL是标志一个邮箱中唯一一封邮件的标志。这样客户端连接到POP3服务器...
  • xtx1990
  • xtx1990
  • 2013年05月22日 16:54
  • 1154

POP3邮件接收协议命令使用详解

第1章 POP3概述 POP3全称为Post Office Protocol version3,即邮局协议第3版。它被用户代理用来邮件服务器取得邮件。POP3采用的也是C/S通信模型,对应的RFC文...
  • New_Teacher
  • New_Teacher
  • 2016年05月13日 09:28
  • 5171

C++ 建立邮件客户端之收邮件(利用POP3)(一)

POP是邮局协议(Post Office Protocol),使TCP/IP协议族中的一员,它是由RFC 1939定义的. 本协议主要是用于支持使用客户端远程管理在服务器上的电子邮件.最新版本是POP...
  • wsy526659583
  • wsy526659583
  • 2013年12月28日 11:57
  • 2968

Python邮件收发(SMTP POP3)

SMTP邮件发送    SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议。    smtplib模块    创建SMTP对象 smtpl...
  • HzSunshine
  • HzSunshine
  • 2017年05月26日 19:43
  • 2849

python学习——POP3收取邮件

SMTP用于发送邮件,如果要收取邮件呢? 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3。 Pyth...
  • youzhouliu
  • youzhouliu
  • 2016年07月19日 08:13
  • 2233

python 利用pop3接收邮件并保存附件

def SaveAttach():# login the pop3 server ,retrive the new mails ,and download the attachments ...
  • fengyufengzi
  • fengyufengzi
  • 2014年09月03日 14:48
  • 897
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自制Pop3邮件接收系统(二):利用TcpClient得到Pop3的邮件列表数据
举报原因:
原因补充:

(最多只允许输入30个字)