5

我在 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;

在测试邮箱中,有一条未读邮件,但所有检索到的邮件的 flags 枚举属性都为空,因此结果始终为 0。我做错了什么吗?是 Indy/Gmail 兼容性的问题吗?

谢谢。

编辑:我肯定做错了,因为使用 Hotmail 帐户进行测试显示相同的空标志属性问题。

4

2 回答 2

13

POP3协议在服务器上不支持Message state information读取、回复或删除等。尝试IMAP for Gmail改用。

于 2010-12-29T22:29:20.120 回答
3

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

TIdMessageFlags 应该很可能被命名为 TIdIMAPMessageFlags

于 2010-12-30T05:32:21.007 回答