前一段时间在论坛上看见有人问如何使用.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. C# C/S程序使用HTML文件作为打印模板

    C#   C/S程序使用HTML文件作为打印模板 在网上找了一堆的资料,整理到郁闷呀,慢慢试慢慢改.哎,最终成功了,哈,菜鸟伤不起呀 public partial class Print : Form ...

  2. java 多参实现

    package com.northeasttycoon.monitor.service; import static java.lang.System.out; /** * Created by no ...

  3. MySQL 忘记密码解决办法

    第一步: 关闭MySQL服务.  第二步: 打开DOS窗口,在里面输入安装MqSQL的目录本机为:C:\Program Files\MySQL\MySQL Server 5.6\bin 第三步: 在命 ...

  4. Python中类方法、__new__方法和__init__方法解析

    在编程语言中创建一个类,有构造方法这样的一个术语.而在Python中,通常大家都认为__init__是构造方法,其实并不完全等同.在构建类中,有一个特殊的方法__new__,这个才能等同为构造方法. ...

  5. intellij idea jdk language level

    jdk的新的版本会兼容旧的版本. 如果安装了新的jdk,但是还是希望使用旧版本的特性,这个可以使用jdk language level来实现. 比如安装了jdk8,但是希望用7,那么language ...

  6. 远程服务器上的weblogic项目管理(二)发布完成后如何重启weblogic容器

    前面说到了每次更新服务器项目的java文件与配置文件后,需要更新weblogic容器以完成更新加载,下面来说说如何更新weblogic容器: 第一种方法可以通过ssh shell client工具直接 ...

  7. .net编程扫盲(*)

    http://www.cnblogs.com/edisonchou/p/4787775.html

  8. Java for LeetCode 084 Largest Rectangle in Histogram【HARD】

    For example, Given height = [2,1,5,6,2,3], return 10. 解题思路: 参考Problem H: Largest Rectangle in a Hist ...

  9. node版本管理工具 -- nvm安装与使用

    新老项目维护时node环境切换麻烦怎么办? 不用担心,有了nvm ,一个命令就能切换node版本. 首先需要安装nvm工具,进入下载地址. 下载之后安装nvm. nvm安装之后还需要配置两个环境变量( ...

  10. Algorithm: Sieve of Eratosthenes

    寻找比n小的所有质数的方法. 2是质数, 2*i都是质数,同样3是质数,3*i也都是质数 代码如下 int n; vector<, true); prime[] = prime[] = fals ...