Проверьте непрочитанные сообщения с инди
Вопрос
Я делаю просто для развлечения приложение для проверки непрочитанных сообщений в 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 Enum пустые, поэтому результат всегда 0. Я делаю что -то не так? Это проблема совместимости Indy/Gmail?
Спасибо.
РЕДАКТИРОВАТЬ: Я определенно делаю что-то не так, так как тестирование с учетной записью Hotmail показывает ту же проблему свойства пустых флагов.
Решение
а POP3
Протокол не поддерживает Message state information
На сервере, как чтение, ответил или удалил. Попробуйте использовать IMAP for Gmail
вместо.
Другие советы
Лучший (и самый быстрый) способ найти этот ответ - это поиск в Sourcecode Indy для "mfseen", вы должны найти его только в единицах Idimap*. RRUZ верен - POP3 не предлагает эту неотъемлемая способность. В POP3 вам нужно отслеживать это на стороне клиента. Этот флаг был добавлен в Idmessage для IMAP, и не обязательно для POP3.
Tidmessageflags, вероятно, должны были быть названы Tidimapmessageflags