【问题标题】:Check unread messages with Indy使用 Indy 检查未读消息
【发布时间】:2011-06-01 07:06:23
【问题描述】:

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

【问题讨论】:

    标签: delphi gmail pop3 indy indy10


    【解决方案1】:

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

    【讨论】:

    • IMAP 也有同样的问题。
    【解决方案2】:

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

    TIdMessageFlags 应该很可能被命名为 TIdIMAPMessageFlags

    【讨论】:

    • 将标志类型重命名为特定于 IMAP 的名称将意味着创建特定于 IMAP 的 TIdMessage 版本,这并不理想。我们不想限制编码人员使用标志的方式。仅仅因为 POP3 不支持协议中的消息标志并不意味着编码器不支持。例如,想象一个 TIdMessage 对象列表被下载然后显示的场景。编码人员可以手动使用标志来指示用户已看到内存中的哪些消息。等
    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多