主题:求高手帮解决下判断新邮件的问题。
我写了个小东西,用C#访问我的邮箱,能够检测到邮箱里有多少邮件,并且能够访问邮件的内容。
但是有两个问题:
1、我无法区分那些邮件是新邮件,比如说,我的程序第一次访问,发现有10份邮件,第二次访问,发现有11分,但是我无法区分那一封是新来的。
2、我想用邮件到来的日期来区分,但是现在的方法是通过检查整个邮件的内容来获取想要的信息,如果赶上个邮件带个大附件,就很慢很慢,有没有一个只获取邮件到来日期的方法。
3、如果有更好的方法请告诉我,目的是检测有没有“新”邮件。就是上次检测时没检测到的邮件。
下面附部分代码:
public TcpClient Server; //用以和服务器建立TCP连接
public NetworkStream NetStrm; //客户机和服务器会话使用的数据流
public StreamReader RdStrm; //用以操作数据流,从数据流中获取从服务器反馈的数据
public string Data;
public byte[] szData;
public string CRLF = "\r\n";
private void RetrieveBtn_Click(object sender, EventArgs e)
{
Cursor cr = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
string szTemp;
String[] arrTemp;
bool strBody = false;
String[] arrRet = new String[10];
// MessageBox.Show(arrRet[1]);
Message.Clear();
//清除邮件内容显示区
try
{
Data = "RETR " + numericUpDown1.Value.ToString() + CRLF;
// 定义接收邮箱中的第几封邮件的命令
szData = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Data.ToCharArray());
NetStrm.Write(szData, 0, szData.Length);
//向服务器发送接收邮件命令
szTemp = RdStrm.ReadLine();
// MessageBox.Show(szTemp);
Message.Text=szTemp;
if (szTemp[0] != '-')
{
//解析接收的邮件内容,并按条目不同显示
while (szTemp != ".")
{
arrTemp = szTemp.Split(":".ToCharArray());
if (szTemp == "")
strBody = true;
if (arrTemp[0] == "Date")
{ arrRet[1] = arrTemp[1]; Message.Text = "发送时间:" + arrRet[1] + CRLF; MessageBox.Show(arrRet[1]); }
// if (arrTemp[0] == "From")//break;
// arrRet[2] = arrTemp[1];
// if (arrTemp[0] == "To")
// arrRet[3] = arrTemp[1];
// if (arrTemp[0] == "Subject")
// arrRet[4] = arrTemp[1];
// if (strBody)
// arrRet[5] = arrRet[5] + szTemp;
// //显示邮件发送时间信息
// Message.Text = Message.Text + "发送者:" + arrRet[2] + CRLF;
//显示发信人
// Message.Text = Message.Text + "接收者:" + arrRet[3] + CRLF;
//显示目的地址
// Message.Text = Message.Text + "主题:" + arrRet[4] + CRLF;
//显示邮件主题
// Message.Text = Message.Text + "内容:" + arrRet[5] + CRLF;
//显示邮件内容
//
szTemp = RdStrm.ReadLine();
}
} /**/
Cursor.Current = cr;
// RdStrm.Close();
//回复光标
}
catch (InvalidOperationException err)
{
statusBar1.Text = "错误: " + err.ToString();
}
}
但是有两个问题:
1、我无法区分那些邮件是新邮件,比如说,我的程序第一次访问,发现有10份邮件,第二次访问,发现有11分,但是我无法区分那一封是新来的。
2、我想用邮件到来的日期来区分,但是现在的方法是通过检查整个邮件的内容来获取想要的信息,如果赶上个邮件带个大附件,就很慢很慢,有没有一个只获取邮件到来日期的方法。
3、如果有更好的方法请告诉我,目的是检测有没有“新”邮件。就是上次检测时没检测到的邮件。
下面附部分代码:
public TcpClient Server; //用以和服务器建立TCP连接
public NetworkStream NetStrm; //客户机和服务器会话使用的数据流
public StreamReader RdStrm; //用以操作数据流,从数据流中获取从服务器反馈的数据
public string Data;
public byte[] szData;
public string CRLF = "\r\n";
private void RetrieveBtn_Click(object sender, EventArgs e)
{
Cursor cr = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
string szTemp;
String[] arrTemp;
bool strBody = false;
String[] arrRet = new String[10];
// MessageBox.Show(arrRet[1]);
Message.Clear();
//清除邮件内容显示区
try
{
Data = "RETR " + numericUpDown1.Value.ToString() + CRLF;
// 定义接收邮箱中的第几封邮件的命令
szData = System.Text.Encoding.GetEncoding("gb2312").GetBytes(Data.ToCharArray());
NetStrm.Write(szData, 0, szData.Length);
//向服务器发送接收邮件命令
szTemp = RdStrm.ReadLine();
// MessageBox.Show(szTemp);
Message.Text=szTemp;
if (szTemp[0] != '-')
{
//解析接收的邮件内容,并按条目不同显示
while (szTemp != ".")
{
arrTemp = szTemp.Split(":".ToCharArray());
if (szTemp == "")
strBody = true;
if (arrTemp[0] == "Date")
{ arrRet[1] = arrTemp[1]; Message.Text = "发送时间:" + arrRet[1] + CRLF; MessageBox.Show(arrRet[1]); }
// if (arrTemp[0] == "From")//break;
// arrRet[2] = arrTemp[1];
// if (arrTemp[0] == "To")
// arrRet[3] = arrTemp[1];
// if (arrTemp[0] == "Subject")
// arrRet[4] = arrTemp[1];
// if (strBody)
// arrRet[5] = arrRet[5] + szTemp;
// //显示邮件发送时间信息
// Message.Text = Message.Text + "发送者:" + arrRet[2] + CRLF;
//显示发信人
// Message.Text = Message.Text + "接收者:" + arrRet[3] + CRLF;
//显示目的地址
// Message.Text = Message.Text + "主题:" + arrRet[4] + CRLF;
//显示邮件主题
// Message.Text = Message.Text + "内容:" + arrRet[5] + CRLF;
//显示邮件内容
//
szTemp = RdStrm.ReadLine();
}
} /**/
Cursor.Current = cr;
// RdStrm.Close();
//回复光标
}
catch (InvalidOperationException err)
{
statusBar1.Text = "错误: " + err.ToString();
}
}