前一段时间在论坛上看见有人问如何使用.net进行POP3编程,其实POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制.

  
  废话少说,程序员最需要的使代码.
  
  1.打开VS.NET 2003.
  
  2.新建一个WinForm Application.

文章转载自网管之家:http://www.bitscn.com/os/windows/200604/1954.html

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

文章转载自网管之家:http://www.bitscn.com/os/windows/200604/1954.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

.NET&nbsp;下的&nbsp;POP3&nbsp;编程代码共享的更多相关文章

  1. ASP.NET MVC下的四种验证编程方式[续篇]

    在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...

  2. ASP.NET MVC下的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...

  3. .NET跨平台之mac 下vs code 多层架构编程

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入,申请备注填写姓名+技术+工作年限) Q  Q:408365330     E-Mail:eg ...

  4. ASP.NET MVC下的四种验证编程方式[续篇]【转】

    在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...

  5. ASP.NET MVC下的四种验证编程方式【转】

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...

  6. linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...

  7. Windows下C语言的Socket编程例子(TCP和UDP)

    原文:Windows下C语言的Socket编程例子(TCP和UDP) 刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6: 首先是TCP server端: ...

  8. [转]VS 2012环境下使用MFC进行OpenGL编程

    我就不黏贴复制了,直接给出原文链接:VS 2012环境下使用MFC进行OpenGL编程 其它好文链接: 1.OpenGL系列教程之十二:OpenGL Windows图形界面应用程序

  9. 5.3linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在Linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后 ...

随机推荐

  1. android假设给TextView或EditText的email链接加下划线,并在点击在email连接上能够弹框显示

    怎样把textview的一些文字加上背景色: Spannable str = new SpannableString("#fdsfdfsdfdsfd#"); Matcher mat ...

  2. c# 根据枚举Value 获得名称

    // 定义枚举类型enum sotype : int { book=1, pen=2, other=3 } // 输出名称 switch (Enum.GetName(typeof(sotype), 1 ...

  3. 使用@Scheduled注解编写spring定时任务

    import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframewor ...

  4. 九度OJ 1035:找出直系亲属 (二叉树、递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2380 解决:934 题目描述:     如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外) ...

  5. java 核心技术卷一 知识点

    第九章 集合 1.Iterator和Iterable接口类,作用. 2.Collection接口类,作用. 3.Map接口类,作用.

  6. get_linux_ip_info.sh 获取ip地址

    linux 获取ip地址 get_linux_ip_info.sh #!/bin/bash #/告诉使用者,这程序的用户是从ipconfig 命令中获取IP地址 echo "该程序是从命令中 ...

  7. Tomcat 开启远程调试

    根据 Tomcat 启动方式在 catalina.sh 或者 startup.sh 添加一下内容 $TOMCAT_HOME/bin/catalina.sh 添加 CATALINA_OPTS=" ...

  8. 插头dp小结

    插头dp: \(A:\)插头dp是什么? \(B:\)一种基于连通性状态压缩的动态规划问题 \(A:\)请问有什么应用呢? \(B:\)各种网格覆盖问题,范围允许状压解决,常用于计算方案数与联通块权值 ...

  9. android 电池(一):锂电池基本原理篇【转】

    本文转载自:http://blog.csdn.net/xubin341719/article/details/8497830 关键词:Android  电池关机充电 androidboot.mode ...

  10. SDUT OJ类型转换函数的应用

    题目描述 处理一个复数与一个double数相加的运算,结果存放在一个double型变量d1中,输出d1的值.定义Complex(复数)类,在成员函数中包含重载类型转换运算符:operator doub ...