C#Pop3 DeleteMessage不删除电子邮件

C#Pop3 DeleteMessage不删除电子邮件,c#,pop3,C#,Pop3,实际上,我想通过邮件唯一id删除邮件消息(我使用ActiveUp.Net.mail.Pop3Client) 为此,我使用以下代码: private void DeleteMessageByUID ( string uid , Pop3Client popClient ) { for (int i = 1; i <= popClient.MessageCount; i++) { Header email = popClient.RetrieveHead

实际上,我想通过邮件唯一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();
}
private void DeleteMessageByUID(字符串uid,POP3客户端popClient)
{

对于(int i=1;iPOP3的工作方式是,
DeleteMessage()
方法发送的DELE命令实际上并不删除消息,它所做的只是在POP3客户端使用QUIT命令断开连接时将其标记为将来删除

我不确定ActiveUp的POP3客户端是如何工作的,但是我的()只会在调用
client.Disconnect(true);
true
是QUIT参数)时发送QUIT命令


此外,FWIW,消息Id标头与唯一Id不同。请小心使用它作为以任何唯一方式识别消息的机制,因为消息Id不一定是唯一的,也不是识别消息的安全方式。以这种方式使用消息Id的客户端容易受到DoS攻击,黑客可以向您发送ema使用相同的邮件Id发送邮件,并强制您将其映射到错误的邮件。

代码没有问题。我会向管理员咨询您的电子邮件保留策略。可能您无法删除邮件,它们必须保留在服务器上。我已经检查了ActiveUp的断开连接是如何实现的,似乎它不需要任何参数,并且始终发送将“退出”命令返回到Pop3服务器(以字符串形式返回服务器响应)。另一个问题,我不明白是关于邮件Id的问题,你能给我发送一个链接吗?请提前感谢帮助。如果你发送一封邮件Id为“X”,而我作为sabateur想要破坏你的邮件,我可以使用相同的邮件Id发送另一封邮件。如果收件人的客户作为假设您的邮件与我的邮件重复(我的邮件先到达),因为它具有相同的邮件Id,那么收件人将永远看不到您的邮件。现在,我很清楚问题所在,这不是我的情况。我正在开发一个用于自动邮件交换的简单工具,但它可以在专用网络上以及“受信任”之间工作缔约方。再次感谢澄清。