实际上我想通过邮件唯一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();
}
Run Code Online (Sandbox Code Playgroud)
但从我删除所有邮件(最初邮件从邮箱中消失)开始大约两个小时后,我将能够找到它们(与之前删除的邮件具有相同的 UID)。
我不确定问题的原因是否在我的程序中,我猜是邮箱配置错误,但在联系系统管理员之前我会确定这一点。
POP3 的工作方式是,该方法发送的 DELE 命令DeleteMessage()实际上并不删除邮件,它所做的只是将其标记为将来当 POP3 客户端使用 QUIT 命令断开连接时删除。
我不确定 ActiveUp 的 POP3 客户端是如何工作的,但我的(MailKit)只会在您调用时发送 QUIT 命令client.Disconnect (true);(true是 quit 参数)。
另外,FWIW,Message-Id 标头与唯一 ID 不同。请小心使用它作为以任何独特方式识别消息的机制,因为消息 ID 不一定是唯一的,也不是识别消息的安全方法。以这种方式使用 Message-Id 的客户端容易受到 DoS 攻击,黑客可以向您发送一封具有相同 Message-Id 的电子邮件,并迫使您将其映射到错误的消息。