Ответ IMAP не правильный - PullRequest
0 голосов
/ 21 апреля 2011

Я работаю над 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"));

поэтому я снова получаю первый результат команды дважды или более чем 2 раза; и иногда это продолжает давать мне первый результат.

Мой метод 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 голосов
/ 21 апреля 2011
  1. Не использовать массив символов:

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

  2. TCP - stream * на основе 1011 * и не message based.

Это означает, что ничто не гарантирует, что все сообщение получено с тем же Read.Read может получить половину сообщения, полное сообщение или два сообщения.Вы должны справиться с этим соответствующим образом.

3 Использование return Encoding.ASCII.GetString(data, 0, ret);

4 Существует несколько библиотек IMAP с открытым исходным кодом.Почему бы не использовать один из них, поскольку вы новичок в программировании сокетов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...