前一段时间在论坛上看见有人问如何使用.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. pjax简单实例

    ajax缺点是破坏了浏览器的前进后退,因为ajax的请求不会留在历史记录中.pjax就不一样了,pjax被解释成ajax+pushState的封装,因为它把ajax的请求写入历史记录,并反映在地址栏, ...

  2. 仿易讯clientloading效果

    以下来实现一个loading效果.详细效果例如以下: 首先对这个效果进行拆分,它由以下部分组成: 1 一个"闪电"样式的图案. 2 "闪电"图案背后是一个圆角矩 ...

  3. 微信URL有效性验证

    1.填写配置项:填写 URL 和 Token 点击提交按钮  微信服务器会以get方式请求到所指定的URL,在此URL中进行URL的有效性验证 2.URL有效性的验证: if ("get&q ...

  4. MANIFEST.MF 文件内容完全详解(转)

    打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANI ...

  5. pycharm注册码地址

    (1)地址:http://idea.lanyus.com/ (2)注意,在破解的时候,是先修改hosts文件所在路径:“C:\Windows\System32\drivers\etc\hosts”,修 ...

  6. exception_action

    for i in range(3, -2, -1): try: print(4 / i) except Exception as e: print(Exception) print(e)

  7. Coin和Token有什么区别

    在币圈,经常可以听到“coin”和“token”这些词汇,他们究竟分别代表什么,有什么区别呢?下面本文就和大家一起来扒一扒. 什么是coin? coin (包括山寨coin)是一种数字货币,它通过加密 ...

  8. swift开发学习笔记-闭包

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jiangqq781931404/article/details/32913421 文章转自:http ...

  9. Java for LeetCode 128 Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  10. Java for LeetCode 111 Minimum Depth of Binary Tree

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...