IP*有效! SearchMailbox for IMAPS returns 所有可用的电子邮件,甚至不匹配

IP*Works! SearchMailbox for IMAPS returns all available emails, even unmatching

我正在使用 IP*Works! V9。我尝试使用 SearchMailbox 将返回的电子邮件限制为仅匹配限制的电子邮件。我的代码如下所示:

lIMap.Mailbox := 'INBOX';
lIMap.SelectMailbox;
lIMap.CheckMailbox;
lIMap.Config('FETCHAFTERSEARCH=True');
lIMap.SearchMailbox('SUBJECT Diessenhofen UNSEEN');
if (lIMap.MessageCount > 0) then
begin
   ...
end;

MessageCount 始终反映电子邮件总数而不是一封(我的收件箱中有一封匹配项)。

IMAP 服务器是 Kereo

The documentation 说这样不行。 SearchMailbox 不限制您可以使用的内容,而是调用用户提供的函数并为搜索结果中的每条消息触发一次。

感谢@arnt 的回答,我找到了适合我的解决方案。

是的,对于符合搜索条件的每条消息,都会触发事件 OnMessageInfo

由于我需要循环遍历所有消息,所以我最终这样做了:

procedure TReadIMapObjectsFavFktProperty.MessageInfo(Sender: TObject;
  const MessageId, Subject, MessageDate, From, Flags: String;
  Size:Int64);
begin
  if (MessageList.IndexOf(MessageId) < 0) then
  begin
    MessageList.Add(MessageId);
  end;
end;

其中 MessageList 是一个带有分隔符“,”的 TStringList;

然后我可以使用

获取所有消息
lIMap.MessageSet := MessageList.Text;

再次触发相同的事件或使用 MessageList 的大小循环遍历它们,如下所示:

for aa := 0 to MessageList.Count - 1 do
begin
  lIMap.MessageSet := MessageList.Strings[aa];
  lIMap.FetchMessageInfo;
  ...
end;