亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

C#通過POP3獲取郵件的代碼(正文和附件)

2024-07-10 13:26:04
字體:
來源:轉載
供稿:網友
使用方法:
獲取第1封郵件

復制代碼 代碼如下:


Zgke.Net.POP3 _Popt = new Zgke.Net.POP3("192.168.0.1", 110);
DataTable _Mail = _Popt.GetMail("zk", "zk", 1);


返回DataTable 數據內容為
Type為類型 Text為文字 如果是附件 為byte[] Name 如果是附件里存放的為文件名

C#通過POP3獲取郵件的代碼(正文和附件)

 
下面是全部的類

復制代碼 代碼如下:


using System;
using System.Net.Sockets;
using System.Net;
using System.Security.Cryptography;
using System.IO;
using System.Data;

namespace Zgke.Net
{

/// <summary>
/// 獲取郵件的類
/// zgke@sina.com
/// qq:116149
/// </summary>
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;
}

/// <summary>
/// 獲取Mail列表
/// </summary>
/// <param>用戶名</param>
/// <param>密碼</param>
/// <returns>Mail信息</returns>
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;
}


/// <summary>
/// 獲取郵件內容
/// </summary>
/// <param>名稱</param>
/// <param>密碼</param>
/// <param>郵件編號</param>
/// <returns>數據集</returns>
public DataTable GetMail(string p_Name, string p_PassWord, int p_MailIndex)
{
POP3Client _Client = new POP3Client();
_Client.UserName = p_Name;
_Client.PassWord = p_PassWord;
_Client.Client = new TcpClient();
_Client.ReadIndex = p_MailIndex;
_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.MailTable;
}

private class POP3Client
{
public TcpClient Client;

public string UserName = "";

public string PassWord = "";

public bool ReturnEnd = false;

public DataTable MailDataTable = new DataTable();

public DataTable MailTable = new DataTable();

public string Error = "";

public bool ReadEnd = false;

public int ReadIndex = -1;


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");

MailTable.Columns.Add("Type",typeof(string));
MailTable.Columns.Add("Text",typeof(object));
MailTable.Columns.Add("Name", typeof(string));
}

private int m_SendMessage = 0;
private int m_TOPIndex = 1;

/// <summary>
/// 獲取下一個登陸到獲取列表需要的命令
/// </summary>
/// <param></param>
/// <returns></returns>
public byte[] GetSendBytes(byte[] p_Value)
{
ReadEnd = false;
string _Value = System.Text.Encoding.Default.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;
if (ReadIndex != -1)
{
m_SendMessage = 5;
return System.Text.Encoding.ASCII.GetBytes("RETR " + ReadIndex.ToString() + "/r/n");
}
else
{
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:
GetMailText(_Value);
ReturnEnd = true;
return System.Text.Encoding.ASCII.GetBytes("QUIT");

}
}
Error = _Value;
ReturnEnd = true;
return new byte[0];
}

/// <summary>
/// 轉換文字里的字符集
/// </summary>
/// <param></param>
/// <returns></returns>
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;
}


#region 獲取郵件正文 和 附件
/// <summary>
/// 獲取文字主體
/// </summary>
/// <param></param>
/// <returns></returns>
public void GetMailText(string p_Mail)
{
string _ConvertType = GetTextType(p_Mail, "/r/nContent-Type: ", ";");
if (_ConvertType.Length == 0)
{
_ConvertType = GetTextType(p_Mail, "/r/nContent-Type: ", "/r");
}
int _StarIndex = -1;
int _EndIndex = -1;
string _ReturnText = "";
string _Transfer = "";
string _Boundary = "";
string _EncodingName = GetTextType(p_Mail, "charset=/"", "/"").Replace("/"", "");
System.Text.Encoding _Encoding = System.Text.Encoding.Default;
if(_EncodingName!="")_Encoding = System.Text.Encoding.GetEncoding(_EncodingName);
switch (_ConvertType)
{
case "text/html;":
_Transfer = GetTextType(p_Mail, "/r/nContent-Transfer-Encoding: ", "/r/n").Trim();
_StarIndex = p_Mail.IndexOf("/r/n/r/n");
if (_StarIndex != -1) _ReturnText = p_Mail.Substring(_StarIndex, p_Mail.Length - _StarIndex);
switch (_Transfer)
{
case "8bit":

break;
case "quoted-printable":
_ReturnText = DecodeQuotedPrintable(_ReturnText, _Encoding);
break;
case "base64":
_ReturnText = DecodeBase64(_ReturnText, _Encoding);
break;
}
MailTable.Rows.Add(new object[] { "text/html", _ReturnText });
break;
case "text/plain;":
_Transfer = GetTextType(p_Mail, "/r/nContent-Transfer-Encoding: ", "/r/n").Trim();
_StarIndex = p_Mail.IndexOf("/r/n/r/n");
if (_StarIndex != -1) _ReturnText = p_Mail.Substring(_StarIndex, p_Mail.Length - _StarIndex);
switch (_Transfer)
{
case "8bit":

break;
case "quoted-printable":
_ReturnText = DecodeQuotedPrintable(_ReturnText, _Encoding);
break;
case "base64":
_ReturnText = DecodeBase64(_ReturnText, _Encoding);
break;
}
MailTable.Rows.Add(new object[] { "text/plain", _ReturnText });
break;
case "multipart/alternative;":
_Boundary = GetTextType(p_Mail, "boundary=/"", "/"").Replace("/"", "");
_StarIndex = p_Mail.IndexOf("--" + _Boundary + "/r/n");
if (_StarIndex == -1) return;
while (true)
{
_EndIndex = p_Mail.IndexOf("--" + _Boundary, _StarIndex + _Boundary.Length);
if (_EndIndex == -1) break;
GetMailText(p_Mail.Substring(_StarIndex, _EndIndex - _StarIndex));
_StarIndex = _EndIndex;
}
break;
case "multipart/mixed;":
_Boundary = GetTextType(p_Mail, "boundary=/"", "/"").Replace("/"", "");
_StarIndex = p_Mail.IndexOf("--" + _Boundary + "/r/n");
if (_StarIndex == -1) return;
while (true)
{
_EndIndex = p_Mail.IndexOf("--" + _Boundary, _StarIndex + _Boundary.Length);
if (_EndIndex == -1) break;
GetMailText(p_Mail.Substring(_StarIndex, _EndIndex - _StarIndex));
_StarIndex = _EndIndex;
}
break;
default:
if (_ConvertType.IndexOf("application/") == 0)
{
_StarIndex = p_Mail.IndexOf("/r/n/r/n");
if (_StarIndex != -1) _ReturnText = p_Mail.Substring(_StarIndex, p_Mail.Length - _StarIndex);
_Transfer = GetTextType(p_Mail, "/r/nContent-Transfer-Encoding: ", "/r/n").Trim();
string _Name = GetTextType(p_Mail, "filename=/"", "/"").Replace("/"", "");
_Name = GetReadText(_Name);
byte[] _FileBytes = new byte[0];
switch (_Transfer)
{
case "base64":
_FileBytes = Convert.FromBase64String(_ReturnText);
break;
}
MailTable.Rows.Add(new object[] { "application/octet-stream", _FileBytes, _Name });

}
break;
}
}

/// <summary>
/// 獲取類型(正則)
/// </summary>
/// <param>原始文字</param>
/// <param>前文字</param>
/// <param>結束文字</param>
/// <returns>符合的記錄</returns>
public string GetTextType(string p_Mail, string p_TypeText, string p_End)
{
System.Text.RegularExpressions.Regex _Regex = new System.Text.RegularExpressions.Regex(@"(?<=" + p_TypeText + ").*?(" + p_End + ")+");
System.Text.RegularExpressions.MatchCollection _Collection = _Regex.Matches(p_Mail);
if (_Collection.Count == 0) return "";
return _Collection[0].Value;
}

/// <summary>
/// QuotedPrintable編碼接碼
/// </summary>
/// <param>原始文字</param>
/// <param>編碼方式</param>
/// <returns>接碼后信息</returns>
public string DecodeQuotedPrintable(string p_Text, System.Text.Encoding p_Encoding)
{
System.IO.MemoryStream _Stream = new System.IO.MemoryStream();
char[] _CharValue = p_Text.ToCharArray();
for (int i = 0; i != _CharValue.Length; i++)
{
switch (_CharValue[i])
{
case '=':
if (_CharValue[i + 1] == '/r' || _CharValue[i + 1] == '/n')
{
i += 2;
}
else
{
try
{
_Stream.WriteByte(Convert.ToByte(_CharValue[i + 1].ToString() + _CharValue[i + 2].ToString(), 16));
i += 2;
}
catch
{
_Stream.WriteByte(Convert.ToByte(_CharValue[i]));
}
}
break;
default:
_Stream.WriteByte(Convert.ToByte(_CharValue[i]));
break;
}
}
return p_Encoding.GetString(_Stream.ToArray());
}

/// <summary>
/// 解碼BASE64
/// </summary>
/// <param></param>
/// <param></param>
/// <returns></returns>
public string DecodeBase64(string p_Text, System.Text.Encoding p_Encoding)
{
if (p_Text.Trim().Length == 0) return "";
byte[] _ValueBytes = Convert.FromBase64String(p_Text);
return p_Encoding.GetString(_ValueBytes);
}
#endregion


}

/// <summary>
/// 連接事件
/// </summary>
/// <param></param>
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);
}

/// <summary>
/// 連接事件
/// </summary>
/// <param></param>
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);
}

/// <summary>
/// 連接事件
/// </summary>
/// <param></param>
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);
}

/// <summary>
/// 獲取知道獲取到. 否則一直獲取數據
/// </summary>
/// <param></param>
/// <returns></returns>
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();
}
}

}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲a成v人在线观看| 日本一区二区三区四区视频| 亲子乱一区二区三区电影| 不卡毛片在线看| 国产精选久久久久久| 日日噜噜噜夜夜爽亚洲精品| 国产精品一区二区久久国产| 日韩欧美极品在线观看| 久久久国产视频91| 高清一区二区三区四区五区| 亚洲综合第一页| 色视频www在线播放国产成人| 蜜臀久久99精品久久久久久宅男| www.亚洲天堂| 成人精品视频99在线观看免费| 亚洲精品免费一区二区三区| 欧美精品一区三区| 97超视频免费观看| 成人国产在线视频| 国产精品一区二区久久久| 欧美激情在线播放| 国产91对白在线播放| 成年人精品视频| 在线视频日韩精品| 一区二区三区无码高清视频| 欧美成人免费在线观看| 精品美女久久久久久免费| 欧美黑人巨大精品一区二区| 国产日韩欧美视频在线| 久久久综合av| 成人久久久久爱| 日韩中文字幕免费看| 第一福利永久视频精品| 中文字幕亚洲欧美日韩高清| 亚洲a成v人在线观看| www.久久色.com| 91日韩在线播放| 一区二区在线视频| 国产亚洲精品一区二555| 一本久久综合亚洲鲁鲁| 最好看的2019年中文视频| 国模精品视频一区二区| 欧美日韩国产一区二区| 91精品视频免费看| 久久久精品美女| 一区二区三区 在线观看视| 亚洲人成网站在线播| 国产色综合天天综合网| 国产一区二区三区在线看| 两个人的视频www国产精品| 亚洲欧美日韩在线高清直播| 夜夜嗨av色一区二区不卡| 成人欧美一区二区三区在线| 精品国内亚洲在观看18黄| 日韩欧美在线国产| 亚洲成人久久网| 欧美日韩国产91| 国产不卡在线观看| 国产美女被下药99| 久久人人爽人人| 成人免费大片黄在线播放| 人人做人人澡人人爽欧美| 狠狠久久亚洲欧美专区| 色妞一区二区三区| 亚洲国产精品资源| 欧美日韩精品在线| 日韩在线视频中文字幕| 欧美第一淫aaasss性| 亚洲高清不卡av| 精品久久久国产精品999| 激情亚洲一区二区三区四区| 国产在线精品成人一区二区三区| 91精品国产91久久久久久不卡| 国产99视频精品免视看7| 国色天香2019中文字幕在线观看| 综合欧美国产视频二区| 精品亚洲精品福利线在观看| 91中文精品字幕在线视频| 中文字幕欧美日韩| 国产欧美日韩中文字幕| 中文字幕视频一区二区在线有码| 亚洲一区av在线播放| 日韩美女写真福利在线观看| 国产精品6699| 国产999精品久久久| 日韩中文字幕视频在线| 国产欧美久久一区二区| 亚洲欧美日韩一区二区在线| 成人激情春色网| 人妖精品videosex性欧美| 日韩av在线播放资源| 亚洲欧美日韩精品久久亚洲区| 国产婷婷成人久久av免费高清| 久久久亚洲精品视频| 日韩欧美第一页| 久久91超碰青草是什么| 亚洲乱亚洲乱妇无码| 日韩有码片在线观看| 国产婷婷色综合av蜜臀av| 亚洲第一福利在线观看| 亚洲专区在线视频| 亚洲free性xxxx护士hd| 日韩av片电影专区| 97视频在线观看免费高清完整版在线观看| 国产精品网址在线| 亚洲精品美女久久久| 日韩成人av一区| 国产精品一区二区女厕厕| 91免费欧美精品| 超碰97人人做人人爱少妇| 亚洲人成啪啪网站| 国产精品久久久久久久久久久久| 国产一区二区三区在线看| 亚洲成人免费在线视频| 国模精品视频一区二区三区| 97国产精品视频人人做人人爱| 国产91精品网站| 日韩电视剧在线观看免费网站| 操人视频在线观看欧美| 亚州精品天堂中文字幕| 国产成人一区二区三区电影| 成人黄色在线观看| 一个人看的www久久| 最近2019年日本中文免费字幕| 亚洲qvod图片区电影| 超碰精品一区二区三区乱码| 欧美俄罗斯性视频| 国产日韩欧美电影在线观看| 日韩在线视频免费观看高清中文| 91久久精品视频| 久久久久亚洲精品国产| 日韩在线免费av| 91久久精品视频| 亚洲高清免费观看高清完整版| 欧美不卡视频一区发布| 成人免费淫片视频软件| 日韩欧美国产中文字幕| 亚州精品天堂中文字幕| 日韩一级黄色av| 国产精品偷伦一区二区| 北条麻妃一区二区在线观看| 亚洲第一免费网站| 色偷偷偷综合中文字幕;dd| 久久久影视精品| 欧美色xxxx| 日韩大片免费观看视频播放| 欧美性猛交xxxx乱大交蜜桃| 欧美午夜精品伦理| 亚洲美女激情视频| 亚洲人成电影网站色…| 综合激情国产一区| 成人久久久久久久| 57pao成人永久免费视频| 97视频在线观看免费| 亚洲a区在线视频| 国产精品老女人视频| 亚洲自拍另类欧美丝袜| 中文字幕在线日韩| 午夜精品视频网站| 国产欧美一区二区| 亚洲精品欧美一区二区三区| 欧美性xxxxx极品娇小| 久久久成人av| 国产精品爽黄69天堂a|