/** jmail 删除邮件的解决方案 **/
/** 可实现,先下载到本地,需要时,再删除服务器端的指定邮件 **/
//测试邮箱地址为 recieveceshi@163.com
/* 建议先看下jmail“收取未读邮件”(未被客户端下载过的邮件)
* 删除邮件功能的实现思路如下:
* 和“收取未读邮件”类似,正常情况下,要删除邮件时,我们已经阅读过它
* 了,也就是,在已经把它下载到客户端(也就是本地),要想实现下载邮件
* 和删除邮件不同时进行(相对而言),需要在下载邮件时,将邮件在服务器
* 端的唯一标识(以下简称UID,保存为字符串)记录到本地数据库,当要删
* 除具体邮件时,要用到它。也就是,这个UID是必需在下载邮件的时候保存
* 下来的。下面假设已经把相关邮件的信息都下载到本地并保存过了,我们根
* 据本地信息删除邮件(删除本地记录,并把相应的服务器端邮件也删除)
* 关于UID,可以看下上面的那个链接。
*/
//删除邮件时,还是要创建jmail接收邮件类的实例
POP3 pop = new POP3();
try
{
//创建连接
//参数依次为:邮件名,密码,服务器地址
pop.Connect("recieveceshi", "qwerty", "pop.163.com");
//服务器端邮件总数量
int emailCount = pop.Count;
//取出本地保存的要删除邮件的UID
//现在假设要删除的邮件UID为:1tbi6wPzIFEAN8qGyAAAsZ
string localEmailUID = "1tbi6wPzIFEAN8qGyAAAsZ";
//查看(遍历)服务器端所有邮件,符合条件就删除
for (int i = 1; i <= emailCount; i++)
{
/* 索引要从1开始的,原因向下看就知道了。
* jmail收取的邮件信息是按时间由小到大
* 排序的(索引越小,收信的时间越早)。*/
//获取指定邮件服务器端邮件UID。要注意的是,最小索引应该是1而不是0
//此方法不需下载整封邮件,消耗网络资源较小
string theUid = pop.GetMessageUID(i);
if (theUid == localEmailUID)
{
//找到服务器端的一封邮件,把它删除
pop.DeleteSingleMessage(i);
//由于UID是邮件的唯一标记,
//所以删除后就不用再循环了
break;
}
}
//要删除本地邮件,自定义一个方法,放在这里就可以了。
//断开连接
pop.Disconnect();
MessageBox.Show("海上升明月,天涯共此时。");
}
catch
{
MessageBox.Show("片云天共远,永夜月同孤。");
}
/*
* pop.DeleteMessages();
* 如果用这个方法的话,那就简单了,
* 直接调用,它就会把服务器端的邮件全删除的。
* 所以这个情况就不说了。
* 当然,如果可以下载邮件的同时,就把邮件给删除,
* 那直接在接收邮件并保存之后,用
* pop.DeleteSingleMessage(i)就行了,也是简单的
* 方法,也不说了。
*/
/**完成时间 2014-8-27**/