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