110,536
社区成员
发帖
与我相关
我的任务
分享
class Pop3
{
string POPServer;
string user;
string pwd;
int port;
public static string Data_ = "";
/// <summary>
/// 接收邮件服务器相关信息
/// </summary>
/// <param name="server">参数 pop邮件服务器地址 </param>
/// <param name="user">参数 登录到pop邮件服务器的用户名 </param>
/// <param name="pwd">参数 登录到pop邮件服务器的密码</param>
/// <returns>无返回</returns>
public Pop3(string server, string _user, string _pwd, int _port)
{
POPServer = server;
user = _user;
pwd = _pwd;
port = _port;
}
/// <summary>
/// 获取服务器上邮件总数
/// </summary>
/// <returns></returns>
public int GetNewMessage()
{
POP3 objPOP3 = new POP3(POPServer, user, pwd);
objPOP3.Connect();
objPOP3.Login();
objPOP3.QueryServer();
int EmailCount = objPOP3.TotalMailCount;
objPOP3.Close();
return EmailCount;
}
/// <summary>
/// 保存服务器上所有邮件
/// </summary>
/// <param name="SerName"></param>
/// <param name="UserName"></param>
/// <param name="Password"></param>
/// <returns></returns>
public DataTable main()
{
POP3 objPOP3 = new POP3(POPServer, user, pwd);
objPOP3.Connect();
objPOP3.Login();
objPOP3.QueryServer();
int EmailCount = objPOP3.TotalMailCount;
DataTable dt = new DataTable("邮件");
dt.Columns.Add("FROM");//发件人
dt.Columns.Add("TO");//收件人
dt.Columns.Add("CC");//回复
dt.Columns.Add("SUBJECT");//主题
dt.Columns.Add("DATE");//日期
dt.Columns.Add("CONTENT-TYPE");
dt.Columns.Add("CHARSET");
dt.Columns.Add("MESSAGE-ID");//邮件id
dt.Columns.Add("MESSAGE SIZE");//大小
dt.Columns.Add("EMAILOBJ");//内容
dt.Columns.Add("Attachments");//附件
dt.Columns.Add("FILEDIR");//保存目录
int sum = 0;
for (int i = 1; i <= EmailCount; i++)
{
EmailMessage objEmail = objPOP3.GetMessage(i, false); // use true to get headers only
DataRow dr = dt.NewRow();
dr[0] = objEmail.From;
dr[1] = objEmail.To;
dr[2] = objEmail.Cc;
dr[3] = objEmail.Subject;
dr[4] = objEmail.Date;
dr[5] = objEmail.ContentType;
dr[6] = objEmail.Charset;
dr[7] = objEmail.GetCustomHeader("Message-ID");
dr[8] = objEmail.Size;
dr[9] = QPDecode(objEmail.Body, System.Text.Encoding.Default);
string fj = "";
if (objEmail.IsAnyAttachments)
{
for (int a = 0; a < objEmail.Attachments.Count; a++)
{
Attachment objFile = (Attachment)objEmail.Attachments[a];
if (!objFile.IsFileAttachment)
{
if (objFile.TextBody != null)
{
sum++;
fj += sum.ToString() + ":" + objFile.FileName;
if (!System.IO.Directory.Exists(@"d:\pop3\fj"))
{
System.IO.Directory.CreateDirectory(@"d:\pop3\fj");
}
StreamWriter swfj = new StreamWriter(@"d:\pop3\fj\" + sum.ToString() + "_" + objFile.FileName);
;
swfj.Write(objFile.Data);
swfj.Close();
}
}
}
}
dr[10] = fj;
dr[11] = @"d:\pop3\m_" + i.ToString() + ".eml";
dt.Rows.Add(dr);//构建DataTable的数据
if (!System.IO.Directory.Exists(@"d:\pop3"))
{
System.IO.Directory.CreateDirectory(@"d:\pop3");
}
StreamWriter sw = new StreamWriter(@"d:\pop3\m_" + i.ToString() + ".eml");
sw.Write(objEmail.ToString());
sw.Close();
}
objPOP3.Close();
return dt;
}
public string QPDecode(string data, Encoding encoding)
{
char ch;
string ret = "";
byte[] bytes = new byte[data.Length];
int bIdex = 0;
try
{
for (int rIndex = 0; rIndex < data.Length; rIndex++)
{
ch = data[rIndex];
if (ch == '=')
{
rIndex++;
if (rIndex < data.Length && (Char.IsDigit(data[rIndex]) || Char.IsLetter(data[rIndex])))
{
bytes[bIdex++] = Byte.Parse(data.Substring(rIndex++, 2), System.Globalization.NumberStyles.HexNumber);
continue;
}
if (rIndex < data.Length && data[rIndex] == '\r' && (rIndex + 1) < data.Length && data[rIndex + 1] == '\n')
{
rIndex++;
continue;
}
}
if (ch == '\r' || ch == '\n')
continue;
bytes[bIdex++] = (byte)ch;
}
ret = encoding.GetString(bytes, 0, bIdex);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return ret;
}
/// <summary>
/// base64编码转16进制
/// </summary>
/// <param name="code">base64编码字符串</param>
/// <returns></returns>
private byte[] DecodeBase64(string code) //string code_type,
{
string st = code + "000";//
string strcode = st.Substring(0, (st.Length / 4) * 4);
byte[] bytes = Convert.FromBase64String(strcode);
return bytes;
}
//UTC时间转WINDOWS时间
public DateTime UTCToDateTime(double l)
{
DateTime dtZone = new DateTime(1970, 1, 1, 0, 0, 0);
dtZone = dtZone.AddSeconds(l);
return dtZone.ToLocalTime();
}
//WINDOWS时间转UTC时间
public double DateTimeToUTC(DateTime vDate)
{
TimeZone tz = TimeZone.CurrentTimeZone;
vDate = vDate.ToUniversalTime();
DateTime dtZone = new DateTime(1970, 1, 1, 0, 0, 0);
return vDate.Subtract(dtZone).TotalSeconds;
}
/// <summary>
/// 提取指定邮件附件内容
/// </summary>
/// <param name="MessageNum">邮件编号</param>
/// <returns></returns>
public string Attachments_to_resolve(int COUNT)
{
string back = "";
string temp = "";
try
{
int NewNum = 0;
POP3 objPOP3 = new POP3(POPServer, user, pwd);
objPOP3.Connect();
objPOP3.Login();
objPOP3.QueryServer();
int EmailCount = objPOP3.TotalMailCount;
if (COUNT <= EmailCount)
NewNum = EmailCount - COUNT;
int[] email_new = new int[NewNum];
for (int i = 1; i < NewNum + 1; i++)
{
email_new[i - 1] = COUNT + i;
}
EmailMessage objEmail;
for (int cnt = 1; cnt < email_new.Length + 1; cnt++)
{
back = "";
objEmail = objPOP3.GetMessage(email_new[cnt - 1], false);
string body = objEmail.Body.ToString();
int i = body.IndexOf("base64\r\n\r\n");
if (i > 0)
{
body = body.Substring(i + 10, 16);
//编码邮件内容
byte[] body_ = DecodeBase64(body);
//你要做的操作
}
objPOP3.Close();
string tmp_time = DateTime.Now.ToString();
if (NewNum != 0)
back = "成功!本次共解析" + NewNum.ToString() + "封邮件于" + tmp_time + "。\r\n" + temp;
else
back = "本次查询于" + tmp_time + " 未找到新邮件!\r\n";
E_Mail.COUNT = EmailCount;
}
catch { back = "失败!\r\n"; }
return back;
}
}