Indy TIdImap4.UIDRetrieve方法!

时间:2011-04-08 13:54:42

标签: delphi indy

这是我的小代码:

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

工作正常!现在,当我尝试阅读

curMessage.Body

然后它有时是空的。我知道消息IsMsgSinglePartMime为False时它是空的。那么我就无法从Body属性中读取消息的主体。

我在curMessage的每个属性中搜索过,但我找不到正文。让我更奇怪的是,当我保存curMessage时

curMessage.Savefile('...');
然后我可以看到那里的全身。

我不想再提取身体的请求(例如UIDRetrieveText(2))因为我知道身体数据在某处,我找不到它或者是Savefile / SaveStream发出一些内部请求服务器?

提前谢谢你们!

1 个答案:

答案 0 :(得分:2)

您需要检查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添加到您的使用条款中。