我正在为Delphi中的未读消息检查器应用程序做一些有趣的事情。我正在使用Indy 10.我可以连接Gmail并可以检索所有消息,但我在这里遇到问题:我无法判断消息是否已被读取。 TidMessage组件中有一个标志属性,它应该告诉我消息是否已被读取。 代码如下所示:
procedure TForm1.btTestConnectionClick(Sender: TObject);
var
i: Integer;
count: Integer;
flag: TIdMessageFlags;
begin
if (pop3Test.Connected) then begin
pop3Test.Disconnect;
end;
pop3Test.Username := edAccount.Text;
pop3Test.Password := edPassword.Text;
pop3Test.Host := HOST;
pop3Test.AuthType := patUserPass;
pop3Test.Port := PORT;
pop3Test.Connect;
Count := 0;
for i := pop3Test.CheckMessages downto 1 do begin
pop3Test.Retrieve(i, IdMessage1);
if (mfSeen in IdMessage1.Flags) then begin
Count := Count + 1;
end;
end;
ShowMessage(IntToStr(Count));
pop3Test.Disconnect;
end;
在测试邮箱中有一条未读消息,但所有检索到的消息都将标志枚举属性设置为空,因此结果始终为0.我做错了什么?这是Indy / Gmail兼容性的问题吗?
感谢。
编辑:我肯定做错了,因为使用Hotmail帐户进行测试会显示相同的空标记属性问题。
答案 0 :(得分:13)
POP3
协议不支持服务器上的Message state information
,如读取,回复或删除。请尝试使用IMAP for Gmail
。
答案 1 :(得分:3)
找到这个答案的最好(也是最快)的方法是在Indy源代码中搜索" mfSeen"您应该发现它仅用于idIMAP *单元。 RRUZ是正确的 - POP3没有提供这种固有的能力。在POP3中,您需要在客户端进行跟踪。此标志已添加到IdMessage以用于IMAP目的,而不一定用于POP3。
TIdMessageFlags可能已被命名为TIdIMAPMessageFlags