首页 C# 使用TcpClient 获取邮件列表

C# 使用TcpClient 获取邮件列表

举报
开通vip

C# 使用TcpClient 获取邮件列表C# 使用TcpClient 获取邮件列表 公司里网络使用代理... 只测试了公司的POP3服务器 使用方法 POP3 _Popt = new POP3("192.168.0.1", 110); DataTable _MailTable = _Popt.GetMailTable("zk", "zk"); MailTable 包含了 收件人 发件人 编号 邮件大小 主题 日期 先贴出来 有时间再改把 马上过年了:) 有什么问题再联系我把 全部代码 view plaincopy to clipboard...

C# 使用TcpClient 获取邮件列表
C# 使用TcpClient 获取邮件列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 公司里网络使用代理... 只测试了公司的POP3服务器 使用方法 POP3 _Popt = new POP3("192.168.0.1", 110); DataTable _MailTable = _Popt.GetMailTable("zk", "zk"); MailTable 包含了 收件人 发件人 编号 邮件大小 主 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 日期 先贴出来 有时间再改把 马上过年了:) 有什么问题再联系我把 全部代码 view plaincopy to clipboardprint? using System; using System.Net.Sockets; using System.Net; using System.Security.Cryptography; using System.IO; using System.Data; namespace Zgke.Net { /// /// 获取邮件的类 /// public class POP3 { private string m_Address = "127.0.0.1"; private int m_Port = 110; public POP3(string p_Address, int p_Port) { m_Address = p_Address; m_Port = p_Port; } public DataTable GetMailTable(string p_Name,string p_PassWord) { POP3Client _Client = new POP3Client(); _Client.UserName = p_Name; _Client.PassWord = p_PassWord; _Client.Client = new TcpClient(); _Client.Client.BeginConnect(m_Address, m_Port, new AsyncCallback(OnConnectRequest), _Client); while (!_Client.ReturnEnd) { System.Windows.Forms.Application.DoEvents(); } if (_Client.Error.Length != 0) throw new Exception("错误信息!" + _Client.Error); return _Client.MailDataTable; } private class POP3Client { public TcpClient Client; public string UserName = ""; public string PassWord = ""; public bool ReturnEnd = false; public DataTable MailDataTable = new DataTable(); public string Error = ""; public POP3Client() { MailDataTable.Columns.Add("NUM"); MailDataTable.Columns.Add("Size"); MailDataTable.Columns.Add("Form"); MailDataTable.Columns.Add("To"); MailDataTable.Columns.Add("Subject"); MailDataTable.Columns.Add("Date"); } private int m_SendMessage = 0; private int m_TOPIndex = 1; public bool ReadEnd = false; /// /// 获取下一个登陆到获取列表需要的命令 /// /// /// public byte[] GetSendBytes(byte[] p_Value) { ReadEnd = false; string _Value = System.Text.Encoding.ASCII.GetString(p_Value).Replace("\0", ""); if (_Value.IndexOf("+OK") == 0) { m_SendMessage++; switch (m_SendMessage) { case 1: return System.Text.Encoding.ASCII.GetBytes("USER " + UserName + "\r\n"); case 2: return System.Text.Encoding.ASCII.GetBytes("PASS " + PassWord + "\r\n"); case 3: ReadEnd = true; return System.Text.Encoding.ASCII.GetBytes("LIST\r\n"); case 4: string[] _List = _Value.Split(new char[] { '\r', '\n', '.' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 1; i != _List.Length; i++) { string[] _MaliSize = _List[i].Split(' '); MailDataTable.Rows.Add(new object[] { _MaliSize[0], _MaliSize[1] }); } if (MailDataTable.Rows.Count == 0) { ReturnEnd = true; return new byte[0]; } else { ReadEnd = true; m_TOPIndex = 1; return System.Text.Encoding.ASCII.GetBytes("TOP 1\r\n"); } case 5: System.Text.RegularExpressions.Regex _Regex = new System.Text.RegularExpressions.Regex(@"(?<=Date: ).*?(\r\n)+"); System.Text.RegularExpressions.MatchCollection _Collection = _Regex.Matches(_Value); if (_Collection.Count != 0) MailDataTable.Rows[m_TOPIndex - 1]["Date"] = GetReadText(_Collection[0].Value); System.Text.RegularExpressions.Regex _RegexFrom = new System.Text.RegularExpressions.Regex(@"(?<=From: ).*?(\r\n)+"); System.Text.RegularExpressions.MatchCollection _CollectionForm = _RegexFrom.Matches(_Value); if (_CollectionForm.Count != 0) MailDataTable.Rows[m_TOPIndex - 1]["Form"] = GetReadText(_CollectionForm[0].Value); System.Text.RegularExpressions.Regex _RegexTo = new System.Text.RegularExpressions.Regex(@"(?<=To: ).*?(\r\n)+"); System.Text.RegularExpressions.MatchCollection _CollectionTo = _RegexTo.Matches(_Value); if (_CollectionTo.Count != 0) MailDataTable.Rows[m_TOPIndex - 1]["To"] = GetReadText(_CollectionTo[0].Value); System.Text.RegularExpressions.Regex _RegexSubject = new System.Text.RegularExpressions.Regex(@"(?<=Subject: ).*?(\r\n)+"); System.Text.RegularExpressions.MatchCollection _CollectionSubject = _RegexSubject.Matches(_Value); if (_CollectionSubject.Count != 0) MailDataTable.Rows[m_TOPIndex - 1]["Subject"] = GetReadText(_CollectionSubject[0].Value); m_TOPIndex++; m_SendMessage--; ReadEnd = true; if (m_TOPIndex > MailDataTable.Rows.Count) { ReturnEnd = true; return System.Text.Encoding.ASCII.GetBytes("QUIT"); } else { return System.Text.Encoding.ASCII.GetBytes("TOP " + m_TOPIndex.ToString() + "\r\n"); } case 6: break; } } Error = _Value; ReturnEnd = true; return new byte[0]; } /// /// 转换文字里的字符集 /// /// /// public string GetReadText(string p_Text) { System.Text.RegularExpressions.Regex _Regex = new System.Text.RegularExpressions.Regex(@"(?<=\=\?).*?(?=\?\=)+"); System.Text.RegularExpressions.MatchCollection _Collection = _Regex.Matches(p_Text); string _Text = p_Text; foreach (System.Text.RegularExpressions.Match _Match in _Collection) { string _Value = "=?" + _Match.Value + "?="; if (_Value[0] == '=') { string[] _BaseData = _Value.Split('?'); if (_BaseData.Length == 5) { System.Text.Encoding _Coding = System.Text.Encoding.GetEncoding(_BaseData[1]); _Text = _Text.Replace(_Value, _Coding.GetString(Convert.FromBase64String(_BaseData[3]))); } } else { } } return _Text; } } /// /// 连接事件 /// /// private void OnConnectRequest(IAsyncResult ar) { POP3Client _Client = (POP3Client)ar.AsyncState; byte[] _ReadBytes =new byte[0]; _Client.Client.Client.BeginReceive(_ReadBytes, 0, 0, SocketFlags.None, new AsyncCallback(OnWrite), _Client); } /// /// 连接事件 /// /// private void OnSend(IAsyncResult ar) { POP3Client _Client = (POP3Client)ar.AsyncState; byte[] _ReadBytes = new byte[0]; _Client.Client.Client.BeginReceive(_ReadBytes, 0, 0, SocketFlags.None, new AsyncCallback(OnWrite), _Client); } /// /// 连接事件 /// /// private void OnWrite(IAsyncResult ar) { POP3Client _Client = (POP3Client)ar.AsyncState; byte[] _WriteBytes = new byte[_Client.Client.Client.ReceiveBufferSize]; _Client.Client.Client.Receive(_WriteBytes); if (_Client.ReadEnd) _WriteBytes = ReadEnd(_WriteBytes, _Client); byte[] _SendBytes = _Client.GetSendBytes(_WriteBytes); if (_SendBytes.Length == 0) return; _Client.Client.Client.BeginSend(_SendBytes, 0, _SendBytes.Length, SocketFlags.None, new AsyncCallback(OnSend), _Client); } /// /// 获取知道获取到. 否则一直获取数据 /// /// /// private byte[] ReadEnd(byte[] p_Value,POP3Client p_Client) { if (System.Text.Encoding.ASCII.GetString(p_Value).IndexOf("\r\n.\r\n") != -1) return p_Value; MemoryStream _Stream = new MemoryStream(); _Stream.Write(p_Value, 0, p_Value.Length); while (true) { byte[] _WriteBytes = new byte[p_Client.Client.ReceiveBufferSize]; p_Client.Client.Client.Receive(_WriteBytes); _Stream.Write(_WriteBytes, 0, _WriteBytes.Length); System.Threading.Thread.Sleep(100); if (System.Text.Encoding.ASCII.GetString(_WriteBytes).IndexOf("\r\n.\r\n") != -1) return _Stream.ToArray(); } return _Stream.ToArray(); } } }
本文档为【C# 使用TcpClient 获取邮件列表】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_353097
暂无简介~
格式:doc
大小:31KB
软件:Word
页数:11
分类:互联网
上传时间:2018-01-14
浏览量:22