日期:2014-05-18  浏览次数:20507 次

.NET接收邮件
.NET利用自带的命名空间接收邮件,也就是利用System.Net.Sockets;System.Net;System.IO;等命名空间实现Pop3邮件接收功能,有知道的请附上详细源码。谢谢!

------解决方案--------------------
C# code


 c#接收电子邮件类
using System;
using System.Net.Sockets;
using System.Net;
using System.Security.Cryptography;
using System.IO;

                            /////////////////////////////////////////////
                            // 类名:Pop3          //
                            // 功能:接收电子邮件           //
                            /////////////////////////////////////////////

namespace ZTSX.Email
{
/// <summary>
/// Pop3 的摘要说明。
/// </summary>
public class Pop3
{
   private string mstrHost      = null;   //主机名称或IP地址
   private int mintPort      = 110;   //主机的端口号(默认为110)
   private TcpClient mtcpClient    = null;   //客户端
   private NetworkStream mnetStream   = null;   //网络基础数据流
   private StreamReader m_stmReader   = null;   //读取字节流
   private string mstrStatMessage    = null;   //执行STAT命令后得到的消息(从中得到邮件数)

   /// <summary>
   /// 构造函数
   /// </summary>
   /// <remarks>一个邮件接收对象</remarks>
   public Pop3()
   {
   }

   /// <summary>
   /// 构造函数
   /// </summary>
   /// <param name="host">主机名称或IP地址</param>
   public Pop3(string host)
   {
    mstrHost = host;
   }

   /// <summary>
   /// 构造函数
   /// </summary>
   /// <param name="host">主机名称或IP地址</param>
   /// <param name="port">主机的端口号</param>
   /// <remarks>一个邮件接收对象</remarks>
   public Pop3(string host,int port)
   {
    mstrHost = host;
    mintPort = port;
   }

   #region 属性

   /// <summary>
   /// 主机名称或IP地址
   /// </summary>
   /// <remarks>主机名称或IP地址</remarks>
   public string HostName
   {
    get{return mstrHost;}
    set{mstrHost = value;}
   }

   /// <summary>
   /// 主机的端口号
   /// </summary>
   /// <remarks>主机的端口号</remarks>
   public int Port
   {
    get{return mintPort;}
    set{mintPort = value;}
   }

   #endregion

   #region 私有方法

   /// <summary>
   /// 向网络访问的基础数据流中写数据(发送命令码)
   /// </summary>
   /// <param name="netStream">可以用于网络访问的基础数据流</param>
   /// <param name="command">命令行</param>
   /// <remarks>向网络访问的基础数据流中写数据(发送命令码)</remarks>
   private void WriteToNetStream(ref NetworkStream netStream,String command)
   {
    string strToSend = command + "\r\n";
    byte[] arrayToSend = System.Text.Encoding.ASCII.GetBytes(strToSend.ToCharArray());
       netStream.Write(arrayToSend,0,arrayToSend.Length);
   }

   /// <summary>
   /// 检查命令行结果是否正确
   /// </summary>
   /// <param name="message">命令行的执行结果</param>
   /// <param name="check">正确标志</param>
   /// <returns>
   /// 类型:布尔
   /// 内容:true表示没有错误,false为有错误
   /// </returns>
   /// <remarks>检查命令行结果是否有错误</remarks>
   private bool CheckCorrect(string message,string check)
   {
    if(message.IndexOf(check) == -1)
     return false;
    else
     return true;
   }

   /// <summary>
   /// 邮箱中的未读邮件数
   /// </summary>
   /// <param name="message">执行完LIST命令后的结果</param>
   /// <returns>
   /// 类型:整型
   /// 内容:邮箱中的未读邮件数
   /// </returns>
   /// <remarks>邮箱中的未读邮件数</remarks>
   private int GetMailNumber(string message)
   {
    string[] strMessage = message.Split(' ');
    return Int32.Parse(strMessage[1]);
   }

   /// <summary>
   /// 得到经过解码后的邮件的内容
   /// </summary>
   /// <param name="encodingContent">解码前的邮件的内容</param>
   /// <returns>
   /// 类型:字符串
   /// 内容:解码后的邮件的内容
   /// </returns>
   /// <remarks>得到解码后的邮件的内容</remarks>
   private string GetDecodeMailContent(string encodingContent)
   {
    string strContent = encodingContent.Trim();
    string strEncode = null;