Überprüfen Sie ungelesene Nachrichten mit Indy
Frage
Ich mache nur zum Spaß eine ungelesene Nachrichtenprüfungsanwendung in Delphi. Ich verwende Indy 10. Ich kann eine Verbindung mit Google Mail herstellen und alle Nachrichten abrufen, aber ich habe hier ein Problem: Ich kann nicht sagen, ob eine Nachricht bereits gelesen wird oder nicht. In der TidMessage -Komponente befindet sich eine Flag -Eigenschaft, die mir mitteilen sollte, ob die Nachricht gelesen wurde. Der Code sieht so aus:
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;
In der Testpostfach gibt es eine ungelesene Nachricht, aber alle abgerufenen Nachrichten haben die Flags -Enum -Eigenschaft leer, sodass das Ergebnis immer 0 ist. Bin ich etwas falsch? Ist es ein Problem der Kompatibilität von Indy/Google Mail?
Vielen Dank.
BEARBEITEN: Ich mache definitiv etwas falsch, da das Testen mit einem Hotmail-Konto das gleiche Problem mit leeren Flaggen zeigt.
Lösung
das POP3
Protokoll unterstützt nicht Message state information
Auf dem Server wie Read, Antwort auf oder gelöscht. Versuchen Sie es zu verwenden IMAP for Gmail
stattdessen.
Andere Tipps
Der beste (und schnellste) Weg, um diese Antwort zu finden, besteht darin, den Indy -Sourcecode nach "mfseen" zu durchsuchen. Rruz ist richtig - POP3 bietet diese inhärente Fähigkeit nicht. In POP3 müssen Sie dies auf der Clientseite verfolgen. Diese Flagge wurde zu IDMessage für IMAP -Zwecke hinzugefügt und nicht unbedingt für POP3.
TidmessageFlags sollten wahrscheinlich TidimapmessageFlags genannt werden