这是我的小代码:
curMessage:TIdMessage;
tidImap: TIdIMAP4;
...
tidImap.UIDRetrieve('123', curMessage);
工作正常!现在,当我尝试阅读
curMessage.Body
然后它有时是空的。我知道消息IsMsgSinglePartMime为False时它是空的。那么我就无法从Body属性中读取消息的主体。
我在curMessage的每个属性中搜索过,但我找不到正文。让我更奇怪的是,当我保存curMessage时
curMessage.Savefile('...');
然后我可以看到那里的全身。
我不想再提取身体的请求(例如UIDRetrieveText(2))因为我知道身体数据在某处,我找不到它或者是Savefile / SaveStream发出一些内部请求服务器?
提前谢谢你们!
答案 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
添加到您的使用条款中。