Помогла бы отправка примера ответа с сервера IMAP, содержащего «дополнительные данные».
Проблема, с которой вы, скорее всего, сталкиваетесь, связана с ответами сервера без тегов.
Вот что RFC3501 говорит:
Ответы о состоянии могут быть помечены или нет. Отмеченные ответы о состоянии указывают результат выполнения (состояние ОК, НЕТ или ПЛОХО) клиентской команды и имеют тег, соответствующий команде:
C: a002 NOOP
S: a002 OK NOOP completed
Некоторые ответы о состоянии и все данные сервера не имеют тегов.
неотмеченный ответ обозначается токеном "*" вместо тега.
C: a047 NOOP
S: * 22 EXPUNGE
S: * 23 EXISTS
S: * 3 RECENT
S: * 14 FETCH (FLAGS (\Seen \Deleted))
S: a047 OK NOOP completed
Так что вам нужно различать эти 2 типа ответов.
Пожалуйста, помните, что проверки того, что каждая полученная строка начинается с символа '*', недостаточно, поскольку в вашем сообщении электронной почты также могут быть строки, начинающиеся со знака звезды:
C: a004 fetch 12 body[header]
S: * 12 FETCH (RFC822 {342}
S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
S: From: Terry Gray <gray@cac.washington.edu>
S: Subject: IMAP4rev1 WG mtg summary and minutes
S: MIME-Version: 1.0
S:
S: * This is email body containing start char
S: )
S: a004 OK FETCH completed
{342} - точное количество байтов, которые вы должны прочитать.
Суть в том, чтобы не изобретать велосипед, использовать существующую библиотеку.
Вы можете проверить мой компонент IMAP (не бесплатно).