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

王朝c#·作者佚名  2006-12-17
宽屏版  字体: |||超大  

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.简化了代码,取消了一些异常的捕捉,是为了让大家看得清楚明白.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有