C#Pop3 DeleteMessage不会删除电子邮件

时间:2015-04-08 15:31:18

标签: 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.RetrieveHeaderObject(i);

          if (email.MessageId == uid )
          {
                popClient.DeleteMessage(i);
                break;
          }
     }

     popClient.Disconnect();
}

但是从我删除所有邮件开始大约两个小时后(最初邮件从邮箱中消失)我将能够找回它们(使用与之前删除的邮件相同的UID)。

我不确定问题的原因是否在我的程序中,我猜是邮箱的配置错误,但在我联系系统管理员之前我会确定的。

1 个答案:

答案 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的电子邮件,并强制您将其映射到错误的消息。