Indy TIdImap4.UIDRetrieve метод! - PullRequest
       24

Indy TIdImap4.UIDRetrieve метод!

0 голосов
/ 08 апреля 2011

Вот мой маленький код:

curMessage:TIdMessage;
tidImap: TIdIMAP4;
...
tidImap.UIDRetrieve('123', curMessage);

Это отлично работает! Теперь, когда я пытаюсь прочитать

curMessage.Body

Тогда иногда пусто. Я понимаю, что пусто, когда сообщение IsMsgSinglePartMime является ложным. Тогда я не могу прочитать тело сообщения из свойства Body.

Я искал в каждом свойстве curMessage, но нигде не мог найти основной текст. Что делает его еще более странным, так это то, что когда я сохраняю curMessage

curMessage.Savefile('...');

тогда я смогу увидеть все тело там.

Я не хочу делать еще один запрос на выборку для тела (например, UIDRetrieveText (2)), потому что я понимаю, что данные тела есть где-то, я просто не смог их найти или Savefile / SaveStream делает некоторые внутренние запросы на сервер?

Заранее спасибо, ребята!

1 Ответ

2 голосов
/ 08 апреля 2011

Вам нужно проверить TIdMessage.MessageParts.

var
  Msg: TIdMessage;
  i: Integer;
begin
  // Code to retrieve message from server
  for i := to Msg.MessageParts.Count - 1 do
  begin
    if (Msg.MessageParts.Items[i] is TIdAttachment) then
      // Handle attachment
    else
    begin
      if Msg.MessageParts.Items[i] is TIdText then
        HandleText(TIdText(Msg.MessageParts.Items[i]).Body);
    end;
  end;
end;

В Indy 10 TIdMessageParts было перемещено в собственное подразделение, поэтому вам, возможно, придется добавить IdMessageParts к вашему предложению использования.

...