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