这是我删除邮件的代码。但是,它不起作用,
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();
}
答案 0 :(得分:1)
为什么要将这两个项目一起添加:
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
命令完成后,您不能认为与特定序列号关联的消息将是相同的。