C# POP3编程

 POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 


废话少说,程序员最需要的使代码,:)! 

1.打开VS.NET 2003. 

2.新建一个WinForm Application. 

3.添加命名空间 

using System; 
using System.Drawing; 
using System.Collections; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Data; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
using System.IO; 

4.主要代码 

为了防止界面在连接服务器时死锁,我另开了一个线程 

private void button1_Click(object sender, System.EventArgs e) 

Thread myThread=new Thread(new ThreadStart(TreadGet)); 
myThread.Start(); 


private void TreadGet() 

ConnectToServer(); 
LogonServer(); 
GetEmailList(); 


//连接服务器 
private void ConnectToServer() 

this.myClient=new TcpClient(); 
try 

this.myClient.Connect(this.serverNameTextBox.Text,110); 
this.messageListBox.Items.Add("连接服务器成功"); 
//初始化网络流,数据就是通过这个对象读出来的 
ns=this.myClient.GetStream(); 
sr=new StreamReader(ns); 
sw=new StreamWriter(ns); 

catch(Exception ex) 

this.messageListBox.Items.Add(ex.Message); 


//验证用户名,密码 
private void LogonServer() 

result=sr.ReadLine(); 
this.messageListBox.Items.Add(result); 
sw.WriteLine("USER "+this.nameTextBox.Text); 
sw.Flush(); 

result=sr.ReadLine(); 
if(result.Substring(0,3)=="-ER") 

this.messageListBox.Items.Add("没有这个用户名"); 
return; 


sw.WriteLine("PASS "+this.passTextBox.Text); 
sw.Flush(); 

try 

result=sr.ReadLine(); 

catch(IOException ioex) 

this.messageListBox.Items.Add(ioex.Message); 
return; 


if(result.Substring(0,4)=="-ERR") 

this.messageListBox.Items.Add("无法登录,可能使用户名密码错误!"); 
return; 


this.messageListBox.Items.Add("登录成功"); 



//获取邮件列表 
private void GetEmailList() 

string from=null; 
string subject=null; 
sw.WriteLine("stat"); 
sw.Flush(); 

result=sr.ReadLine(); 
// MessageBox.Show(result); 
string[] nummessage=result.Split(' '); 
int totalnum=Convert.ToInt32(nummessage[1]); 
if(totalnum>0) 
this.messageListBox.Items.Add("你有"+totalnum.ToString()+"邮件"); 
else 
this.messageListBox.Items.Add("邮箱里没有邮件"); 

for(int i=1;i<=totalnum;i++) 

sw.WriteLine("top "+i.ToString()+" 0"); 
sw.Flush(); 
result=sr.ReadLine(); 

while(true) 

result=sr.ReadLine(); 
if(result==".") 
break; 
if(result.Length>4) 

if(result.Substring(0,5)=="From:") 
from=result ; 
if(result.Substring(0,8)=="Subject:") 
subject=result ; 





this.listBox1 .Items.Add(i.ToString()+" "+from+ " "+ subject); 




private void button2_Click(object sender, System.EventArgs e) 

this.listBox1.Items.Clear(); 



参考资料 

网络邮件收取使用的是Pop3协议,了解Pop3协议有助于我们加深对邮件系统的理解。而且使用Pop3协议你还可以直接telnet 到邮件服务器上去收信。 

  一般telnet Pop3 Server 110后就可以用这些命令了,大小写不敏感, 不包括口令本身,注意不要让口令回显,等验证通过后再允许回显好了。 

  user username 用户认可 

  pass password 认可 执行成功则状态转换 

  apop name,digest 认可一种安全传输口令的办法,执行成功导致状态转换,请参见RFC 1321 。 

  stat 处理请求server回送邮箱统计资料,如邮件数、 邮件总字节数 

  uidl n 处理 server返回用于该指定邮件的唯一标识, 如果没有指定,返回所有的。 

  list n 处理 server返回指定邮件的大小等 

  retr n 处理 server返回邮件的全部文本 

  dele n 处理 server标记删除,quit命令执行时才真正删除 

  rset 处理撤消所有的dele命令 

  top n,m 处理 返回n号邮件的前m行内容,m必须是自然数 

  noop 处理 server返回一个肯定的响应 

  quit client 希望结束会话。如果server处于"处理" 状态,则现在进入"更新"状态,删除那些标记成删除的邮件。如果server处于"认可"状态, 则结束会话时server不进入"更新"状态 。 

  使用telnet 的一个完整的收信例子如下: 

  telnet pop3Server 110 
  user username 
  pass **** 
  stat 
  list 
  retr 1 
  retr 2 
  ... 
  dele 1 
  dele 2 
  ... 
  quit 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值