IMAP回应不正确

时间:2011-04-21 04:52:09

标签: c# sockets imap

我正在研究C#MailClient,它遵循IMAP协议,但我得到错误的响应,这意味着响应会给我一些重复的结果。 就像我第一次发送这样的命令一样。

 byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes(("$ UID FETCH " + index + " (BODY[HEADER.FIELDS (SUBJECT FROM DATE)])\r\n"));

第二次我这样发送。

byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes(("$ UID FETCH " + index + " (BODYSTRUCTURE)" + "\r\n"));

所以我再次获得第一次命令结果两次或两次以上; 有时它会继续给我第一个结果。

我的Response()方法是这样的。

 private string Response()
{
    string response = string.Empty;
    byte[] data = new byte[_imapClient.ReceiveBufferSize];
    int ret = _imapNs.Read(data, 0, data.Length);
    response = Encoding.ASCII.GetString(data,0,ret);
    return response;
}

_imapClient是

的对象
private TcpClient _imapClient;

我正在接受_imapClient的价值就是这样。

    public string GetMessageBodyStructure(int index)
{
    byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes(("$ UID FETCH " + index + " (BODYSTRUCTURE)" + "\r\n"));
    _imapNs.Write(commandBytes, 0, commandBytes.Length);
    _imapNs.Flush();
    return Response();
}

我错了,纠正我,谢谢..

1 个答案:

答案 0 :(得分:0)

  1. 不要使用char数组:

    byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes("$ UID FETCH " + index + " (BODYSTRUCTURE)" + "\r\n");

  2. TCP基于,而不是消息

  3. 这意味着没有任何东西可以保证使用相同的Read收到整个邮件。 Read可以收到一半消息,一条完整消息或两条消息。你需要相应地处理它。

    3使用return Encoding.ASCII.GetString(data, 0, ret);

    4有几个开源IMAP库。为什么不使用其中一个,因为你不熟悉套接字编程?