IP *作品! SearchMailbox for IMAPS会返回所有可用的电子邮件,甚至是不匹配的

时间:2015-06-08 10:58:15

标签: delphi imap delphi-xe2

我正在使用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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

感谢@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是带有分隔符&#39;,&#39;;

的TStringList

然后我可以使用

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

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

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