2015-05-07 23 views
6

Sto cercando di ottenere il numero di messaggi non letti della mia casella di posta IMAP utilizzando TIdIMAP4 da Indy 10.6.0.4975.Perché la proprietà TIdMailBox.UnseenMsgs restituisce il valore 0?

Il problema è che la proprietà UnseenMsgs restituisce 0 anche quando nella cassetta postale accessibile sono presenti alcuni messaggi non letti. Questo è il codice che uso:

procedure TForm1.FormClick(Sender: TObject); 
var 
    TotalMsgs: Integer; 
    UnseenMsgs: Integer; 
begin 
    IdIMAP41.Connect(True); 
    IdIMAP41.SelectMailBox('Inbox'); 

    TotalMsgs := IdIMAP41.MailBox.TotalMsgs; // returns correct value 
    UnseenMsgs := IdIMAP41.MailBox.UnseenMsgs; // <- returns always 0 

    IdIMAP41.Disconnect(False); 
end; 

Perché il ritorno TIdMailBox.UnseenMsgs proprietà 0 invece del numero corretto?

+2

@TLama: tbat avrebbe dovuto essere registrato come una risposta, non un commento. –

+0

@tlama grazie alla correzione –

risposta

8

Chiamare il metodo StatusMailBox prima di accedere a tale proprietà. E 'menzionato nella documentazione UnseenMsgs proprietà come:

UnseenMsgs viene aggiornato quando i risultati del metodo TIdIMAP4.StatusMailBox vengono analizzati.

Quindi fare così:

IdIMAP41.Connect(True); 
IdIMAP41.SelectMailBox('Inbox'); 
IdIMAP41.StatusMailBox('Inbox', IdIMAP41.MailBox); 

UnseenMsgs := IdIMAP41.MailBox.UnseenMsgs; 
+0

funziona bene. Ho letto l'aiuto ma non ho potuto capirlo. Grazie. –