📄 pop3.cs
字号:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Collections;
using System.Net.Mail;
/// <summary>
///POP3 的摘要说明
/// </summary>
public class POP3
{
string POPServer;
string user;
string pwd;
int port;
NetworkStream ns;
StreamReader sr;
public string Date;
public POP3(string server, string _user, string _pwd, int _port)
{
POPServer = server;
user = _user;
pwd = _pwd;
port = _port;
}
/// 连接服务器
private bool Connect()
{
TcpClient sender = new TcpClient(POPServer, port);
byte[] outbytes;
string input;
try
{
ns = sender.GetStream();
sr = new StreamReader(ns);
sr.ReadLine();
input = "user " + user + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes, 0, outbytes.Length);
sr.ReadLine();
input = "pass " + pwd + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes, 0, outbytes.Length);
sr.ReadLine();
return true;
}
catch
{
return false;
}
}
/// 断开与服务器的连接
private void Disconnect()
{
string input = "quit" + "\r\n";
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes, 0, outbytes.Length);
ns.Close();
}
/// <summary>
/// 获取邮箱中新邮件数量
/// </summary>
/// <returns></returns>
public int GetNumberOfNewMessages()
{
byte[] outbytes;
string input;
try
{
Connect();
input = "stat" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes, 0, outbytes.Length);
string resp = sr.ReadLine();
string[] tokens = resp.Split(new Char[] { ' ' });
Disconnect();
return Convert.ToInt32(tokens[1]);
}
catch
{
return -1;
}
}
/// <summary>
/// 获取邮件信息
/// </summary>
/// <param name="subj"></param>
/// <returns></returns>
public ArrayList GetNewMessages(string subj)
{
int newcount;
ArrayList newmsgs = new ArrayList();
try
{
newcount = GetNumberOfNewMessages();
Connect();
for (int n = 1; n < newcount + 1; n++)
{
ArrayList msglines = GetRawMessage(n);
string msgsubj = GetMessageSubject(msglines);
if (msgsubj.CompareTo(subj) == 0)
{
System.Net.Mail.MailMessage msg = new MailMessage();
msg.Subject = msgsubj;
msg.From = new MailAddress(GetMessageFrom(msglines));
msg.Body = GetMessageBody(msglines);
newmsgs.Add(msg);
DeleteMessage(n);
}
}
Disconnect();
return newmsgs;
}
catch (Exception e)
{
return newmsgs;
}
}
/**/
/// <summary>
/// 获取新邮件
/// </summary>
/// <param name="nIndex"></param>
/// <returns></returns>
public MailMessage GetNewMessages(int nIndex)
{
int newcount;
System.Net.Mail.MailMessage msg = new MailMessage();
try
{
newcount = GetNumberOfNewMessages();
Connect();
int n = nIndex + 1;
if (n < newcount + 1)
{
ArrayList msglines = GetRawMessage(n);
string msgsubj = GetMessageSubject(msglines);
msg.Subject = msgsubj;
msg.From = new MailAddress(GetMessageFrom(msglines));
msg.Body = GetMessageBody(msglines);
Date = GetMessageDate(msglines);
}
Disconnect();
return msg;
}
catch
{
return null;
}
}
private ArrayList GetRawMessage(int messagenumber)
{
Byte[] outbytes;
string input;
string line = "";
input = "retr " + messagenumber.ToString() + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes, 0, outbytes.Length);
ArrayList msglines = new ArrayList();
do
{
line = sr.ReadLine();
msglines.Add(line);
} while (line != ".");
msglines.RemoveAt(msglines.Count - 1);
return msglines;
}
/**/
/// <summary>
/// 获取邮件主题
/// </summary>
/// <param name="msglines"></param>
/// <returns></returns>
private string GetMessageSubject(ArrayList msglines)
{
string[] tokens;
IEnumerator msgenum = msglines.GetEnumerator();
while (msgenum.MoveNext())
{
string line = (string)msgenum.Current;
if (line.StartsWith("Subject:"))
{
tokens = line.Split(new Char[] { ' ' });
return tokens[1].Trim();
}
}
return "None";
}
/**/
/// <summary>
/// 获取邮件源地址
/// </summary>
/// <param name="msglines"></param>
/// <returns></returns>
private string GetMessageFrom(ArrayList msglines)
{
string[] tokens;
IEnumerator msgenum = msglines.GetEnumerator();
while (msgenum.MoveNext())
{
string line = (string)msgenum.Current;
if (line.StartsWith("From:"))
{
tokens = line.Split(new Char[] { '<' });
if (tokens.Length > 1)
{
return tokens[1].Trim(new char[] { '>' });
}
else
{
return tokens[0].Trim().Substring(5);
}
}
}
return "None";
}
/**/
/// <summary>
/// 获取邮件内容
/// </summary>
/// <param name="msglines"></param>
/// <returns></returns>
private string GetMessageBody(ArrayList msglines)
{
string body = "";
string line = " ";
IEnumerator msgenum = msglines.GetEnumerator();
while (line.CompareTo("") != 0)
{
msgenum.MoveNext();
line = (string)msgenum.Current;
}
while (msgenum.MoveNext())
{
body = body + (string)msgenum.Current + "\r\n";
}
return body;
}
/**/
/// <summary>
/// 获取邮件Date
/// </summary>
/// <param name="msglines"></param>
/// <returns></returns>
private string GetMessageDate(ArrayList msglines)
{
string[] tokens;
IEnumerator msgenum = msglines.GetEnumerator();
while (msgenum.MoveNext())
{
string line = (string)msgenum.Current;
if (line.StartsWith("Date:"))
{
tokens = line.Split(new Char[] { ' ' });
return tokens[1].Trim()+" "+tokens[2].Trim()+" "+tokens[3].Trim();
}
}
return "None";
}
/**/
/// <summary>
/// 删除邮件
/// </summary>
/// <param name="messagenumber"></param>
private void DeleteMessage(int messagenumber)
{
Byte[] outbytes;
string input;
try
{
input = "dele " + messagenumber.ToString() + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes, 0, outbytes.Length);
}
catch (Exception e)
{
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -