2015-06-24 2 views
1

Я хотел узнать, знает ли кто, как использовать capabilities property класса Indy TIdIMAP4? Его документация, по-видимому, является минимальной автоматической сгенерированной документацией, которая вообще не описывает ее назначение или использование.Как использовать свойства свойств TidIMAP4?

Так что я написал код, как это (соединение уже открыто в этом Поинге)

if IMAP.Capabilities.IndexOf('MOVE')<>-1 then begin 
    IMAP.SendCmd(...); 
end; 

Однако, когда это, казалось, не будет работать, я начал расследование и нашел IMAP.Capabilities был пустой список строк. Я знаю, что возможности отправляются сервером при подключении, не запрашивая их, но они, похоже, не заполняются автоматически? Я ошибаюсь, думая, что список возможностей должен быть заполнен просто путем соединения?

Или есть какая-то другая команда, которую я должен назвать первым? Команда Capability выглядит многообещающе , за исключением того, что этот метод хранит результаты в предоставленном пользователем строчном списке, поэтому я немного скептически отношусь к списку строк в IMAP.Capabilities будет волшебным образом заполнен из этого (и если бы это было case, почему я должен предоставить пустой список?)Редактировать: Появляется Возможность перегружена, и в ней нет версии для него. Тем не менее, я все еще вижу пустой список возможностей после вызова этого.

+0

И ... немного тангенциально ... кажется TidIMAP4 имеет метод IsCapabilityListed который бы здорово использовать для проверки UIDPLUS и MOVE возможности с тех пор я не пришлось бы повторять логику в этом методе ... кроме того, что она не является общедоступной –

ответ

0

Я решил поиграть с другой перегруженной версией Capability, где вы предоставили строковый список функции возможностей. Это не возвращает пустой список. Я подозрительно, что другой метод не работал из-за какого-то типа проблемы с переменной областью, поэтому на самом деле это всего лишь частичный ответ.

Использование Capability таким образом сделал работу:

var 
    capas : TStrings; 
begin 
    capas := TStringList.Create; 
    IMAP.Capability(capas); 
    if (capas.IndexOf('UIDPLUS')<>-1) then 
    IMAP.SendCmd('UID EXPUNGE '+uidList.commaText); 
    capas.free; 
end; 
Смежные вопросы