日期:2014-05-18 浏览次数:20507 次
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;