其实我想通过邮件唯一ID删除邮件消息(我使用ActiveUp.Net.Mail.Pop3Client)
为此,我使用以下代码:
private void DeleteMessageByUID ( string uid , Pop3Client popClient )
{
for (int i = 1; i <= popClient.MessageCount; i++)
{
Header email = popClient.RetrieveHeaderObject(i);
if (email.MessageId == uid )
{
popClient.DeleteMessage(i);
break;
}
}
popClient.Disconnect();
}
但是从我删除所有邮件开始大约两个小时后(最初邮件从邮箱中消失)我将能够找回它们(使用与之前删除的邮件相同的UID)。
我不确定问题的原因是否在我的程序中,我猜是邮箱的配置错误,但在我联系系统管理员之前我会确定的。
答案 0 :(得分:2)
POP3的工作方式是DeleteMessage()
方法发送的DELE命令实际上并没有删除该消息,当POP3客户端使用QUIT断开连接时,它所做的就是将其标记为将来删除命令。
我不确定ActiveUp的POP3客户端是如何工作的,但我的(MailKit)只会在您拨打client.Disconnect (true);
时发送QUIT命令(true
是退出的论点)。
此外,FWIW,Message-Id标头与唯一标识不同。小心使用它作为您以任何独特方式识别消息的机制,因为Message-Ids不一定是唯一的,也不是识别消息的安全方式。以这种方式使用Message-Ids的客户端可以接受DoS攻击,黑客可以向您发送包含相同Message-Id的电子邮件,并强制您将其映射到错误的消息。