如何使用c#在IMAP或POP中以编程方式删除邮件



这是我删除邮件的代码。但是,它确实工作,

 public object Delete(int index)
        {
            StreamWriter.WriteLine("$ DELE {0}"+index);
            StreamWriter.Flush();
            return Response();    
        }
private string Response()
        {
            byte[] data = new byte[TcpClient.ReceiveBufferSize];
            int ret = NetworkStream.Read(data, 0, data.Length);
            return Encoding.ASCII.GetString(data).TrimEnd();
        }

为什么要把这两项加在一起呢?

StreamWriter.WriteLine("$ DELE {0}"+index);

你的意思肯定是这样的:

StreamWriter.WriteLine(String.Format("$ DELE {0}",index));

也就是说,这看起来不像一个有效的IMAP命令。这看起来更像POP,即使这样,命令字符串中也不应该有$。你们遵循的是什么规范?

如果您连接到一个POP3服务器,命令应该看起来像这样:

StreamWriter.WriteLine(String.Format("DELE {0}",index));

如果您连接到IMAP服务器,我认为删除需要首先将消息标记为已删除,然后将其删除。此外,IMAP中的所有命令都需要您生成的唯一标识符。来自规范:

每个客户端命令都带有一个标识符(通常是一个简短的字母数字字符串,例如A0001, A0002等),称为"标签"。客户端为每个命令生成一个不同的标记。

然后,要将消息标记为已删除,您可以这样做:

A003 STORE 35 +FLAGS (Deleted)

其中A003为标签前缀,35为需要删除的消息序列号。但是,要永久删除所有标记的消息,您还需要发送和EXPUNGE命令,可能看起来像这样:

A004 EXPUNGE

请注意,EXPUNGE可能会导致消息序列号发生变化,因此您不能假设与特定序列号关联的消息在EXPUNGE命令完成后将是相同的。

最新更新