Indy TIdImap4.UIDRetrieve方法!

发布于 2024-10-31 11:43:30 字数 543 浏览 2 评论 0原文

这是我的小代码:

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

效果很好!现在,当我尝试阅读

curMessage.Body

“Then”时,有时它是空的。我知道当消息 IsMsgSinglePartMime 为 False 时它是空的。所以我无法从 Body 属性读取消息的正文。

我搜索了 curMessage 的每个属性,但没有找到正文。更奇怪的是,当我保存 curMessage 时

curMessage.Savefile('...');

,我可以看到那里的所有正文。

我不想发出另一个请求来获取正文(例如 UIDRetrieveText(2)),因为我知道正文数据位于某处,我只是找不到它,或者 Savefile/SaveStream 是否向服务器发出一些内部请求?

提前谢谢你们了!

Here is my little code:

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

That works fine! Now when i try to read

curMessage.Body

Then it is empty sometimes. I've understand that it is empty when message IsMsgSinglePartMime is False. So then i can't read message's body from Body property.

I've searched in curMessage's every property, but nowhere could i found the body text. What makes it even more odd, is that when i save curMessage

curMessage.Savefile('...');

then i can see all the body there.

I don't want to make another request to fetch for the body (eg UIDRetrieveText(2)) because i understand that the body data is there somewhere, i just could not find it or is Savefile/SaveStream making some internal requests to server?

Thank you guys in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

肤浅与狂妄 2024-11-07 11:43:30

您需要检查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 添加到您的 use 子句中。

You need to be checking 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;

In Indy 10, TIdMessageParts has been moved into it's own unit, so you may have to add IdMessageParts to your uses clause.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文