使用Indy检查未读消息

时间:2010-12-29 22:17:18

标签: delphi gmail pop3 indy indy10

我正在为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帐户进行测试会显示相同的空标记属性问题。

2 个答案:

答案 0 :(得分:13)

POP3协议不支持服务器上的Message state information,如读取,回复或删除。请尝试使用IMAP for Gmail

答案 1 :(得分:3)

找到这个答案的最好(也是最快)的方法是在Indy源代码中搜索" mfSeen"您应该发现它仅用于idIMAP *单元。 RRUZ是正确的 - POP3没有提供这种固有的能力。在POP3中,您需要在客户端进行跟踪。此标志已添加到IdMessage以用于IMAP目的,而不一定用于POP3。

TIdMessageFlags可能已被命名为TIdIMAPMessageFlags