0

这是我删除邮件的代码。但是,它不起作用,

 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();
        }
4

1 回答 1

1

为什么要将这两个项目加在一起:

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

当然你的意思是这样的:

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

也就是说,无论如何这看起来都不是有效的 IMAP 命令。这看起来更像是 POP,即使那样,你也不应该$在命令字符串中有 a。你遵循什么规范?

如果您连接到 POP3 服务器,该命令应如下所示:

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

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

每个客户端命令都以称为“标签”的标识符(通常是短的字母数字字符串,例如 A0001、A0002 等)为前缀。客户端为每个命令生成不同的标签。

然后将消息标记为已删除,您将执行以下操作:

A003 STORE 35 +FLAGS (\Deleted)

其中A003是标签前缀,35是您要删除的消息的序列号。但是,要永久删除所有标记的消息,您还需要发送和EXPUNGE命令,可能如下所示:

A004 EXPUNGE

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

于 2013-05-31T10:58:50.677 回答