Проверьте непрочитанные сообщения с помощью Indy - PullRequest
3 голосов
/ 30 декабря 2010

Я делаю просто для удовольствия приложение для проверки непрочитанных сообщений в Delphi. Я использую Indy 10. Я могу подключиться к Gmail и получить все сообщения, но у меня возникла проблема: я не могу определить, прочитано ли уже сообщение или нет. В компоненте TidMessage есть свойство flag, которое должно сообщать мне, прочитано ли сообщение. Код выглядит так:

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 enum пустое, поэтому результат всегда равен 0. Я что-то не так делаю? Это проблема совместимости Indy / Gmail?

Спасибо.

РЕДАКТИРОВАТЬ: Я определенно делаю что-то не так, поскольку тестирование с учетной записью Hotmail показывает ту же проблему свойства empty-flags.

Ответы [ 2 ]

13 голосов
/ 30 декабря 2010

протокол POP3 не поддерживает Message state information на сервере, например, чтение, ответ или удаление. попробуйте вместо этого IMAP for Gmail.

3 голосов
/ 30 декабря 2010

Лучший (и самый быстрый) способ найти этот ответ - найти исходный код Indy для «mfSeen». Вы должны найти его только в единицах idIMAP *. RRUZ верен - POP3 не предлагает этой присущей способности. В POP3 вам нужно отслеживать это на стороне клиента. Этот флаг был добавлен в IdMessage для целей IMAP, а не обязательно для POP3.

TIdMessageFlags, вероятно, должен был называться TIdIMAPMessageFlags

...