Controllare i messaggi non letti con Indy
Domanda
che sto facendo solo per divertimento un letto nell'applicazione Messaggi checker in Delphi. Sto usando Indy 10. Sono in grado di connettersi con Gmail e può recuperare tutti i messaggi, ma sto affrontando un problema qui: non posso dire se un messaggio è già stato letto o meno. V'è una proprietà di bandiera nel componente TidMessage che mi dovrebbe dire se il messaggio è stato letto. Gli sguardi codice come questo:
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;
Nella cassetta postale di prova v'è un messaggio non letto, ma tutti i messaggi recuperati sono le bandiere enum proprietà vuota in modo che il risultato è sempre 0. sto facendo qualcosa di sbagliato? È un problema di compatibilità Indy / Gmail?
Grazie.
EDIT:. che sto sicuramente facendo qualcosa di sbagliato, come il test con un account Hotmail mostra la stessa empty-bandiere problema proprietà
Soluzione
POP3
protocollo non supporta Message state information
sul server, come lettura, ha risposto a, o cancellato. provare a utilizzare IMAP for Gmail
.
Altri suggerimenti
Il modo migliore (e più veloce) per trovare questa risposta potrebbe essere quella di cercare il codice sorgente Indy per "mfSeen" si dovrebbe trovare utilizzata solo in idIMAP * unità. RRUZ è corretta - POP3 non offre questa capacità intrinseca. In POP3 è necessario tenere traccia presente sul lato client. Questa bandiera è stato aggiunto al IdMessage per scopi IMAP, e non necessariamente per POP3.
TIdMessageFlags dovrebbe probabilmente sono stati nominati TIdIMAPMessageFlags