zoukankan      html  css  js  c++  java
  • .NET 下的 POP3 编程代码共享

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

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

  • 相关阅读:
    react 组件传值
    vue 子组件如何修改父组件data中的值??????????????????
    移动端的一些初始化 css 样式。。。
    centos7命令
    poi导出
    eclipse项目导入工作空间提示已存在问题
    maven jar包冲突问题
    layui下拉框渲染问题,以及回显问题
    两个线程交替运行——使用synchronized+wait+notify实现
    造成索引失效的情况
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751646.html
Copyright © 2011-2022 走看看