Come posso accedere a un account Gmail e ottenere il numero di messaggi nella cassetta postale con il componente TIdIMAP4
?Come accedere a un account Gmail e ottenere il numero di messaggi in una casella di posta con TIdIMAP4?
risposta
Per ottenere il numero totale di messaggi nella posta in arrivo di Gmail, è necessario prima connettersi al server IMAP di Gmail con le credenziali, selezionare la casella di posta in arrivo di Gmail e per quella casella selezionata leggere il valore della proprietà TotalMsgs
.
Nel codice può assomiglia segue (questo codice richiede OpenSSL, quindi non dimenticate di mettere le librerie libeay32.dll
e ssleay32.dll
ad un percorso visibile al progetto, è possibile scaricare le librerie OpenSSL per Indy in diverse versioni e piattaforme from here
):
uses
IdIMAP4, IdSSLOpenSSL, IdExplicitTLSClientServerBase;
function GetGmailMessageCount(const UserName, Password: string): Integer;
var
IMAPClient: TIdIMAP4;
OpenSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
Result := 0;
IMAPClient := TIdIMAP4.Create(nil);
try
OpenSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
OpenSSLHandler.SSLOptions.Method := sslvSSLv3;
IMAPClient.IOHandler := OpenSSLHandler;
IMAPClient.Host := 'imap.gmail.com';
IMAPClient.Port := 993;
IMAPClient.UseTLS := utUseImplicitTLS;
IMAPClient.Username := UserName;
IMAPClient.Password := Password;
IMAPClient.Connect;
try
if IMAPClient.SelectMailBox('INBOX') then
Result := IMAPClient.MailBox.TotalMsgs;
finally
IMAPClient.Disconnect;
end;
finally
OpenSSLHandler.Free;
end;
finally
IMAPClient.Free;
end;
end;
procedure TForm1.ConnectButtonClick(Sender: TObject);
begin
ShowMessage('Total count of messages in inbox: ' +
IntToStr(GetGmailMessageCount('[email protected]', 'Password')));
end;
Si può opzionalmente scaricare un demo project
che include OpenSSL v1.0.1c
librerie per la piattaforma i386 per le applicazioni a 32 bit (compilato in Delphi 2009).
Grazie Huuuuuge! :) –
Prego! – TLama
Come si può scorrere tra le e-mail per ottenere oggetto o corpo di "i" e-mail nella cartella "posta in arrivo". Questo non sembra funzionare .. IMAPClient.MailBox.MessageList.Messages [i] .Body –
Questa è una domanda Gmail o una domanda IMAP? –
@DavidHeffernan Indy IMAP. –
OK, quindi la parte di gmail non è il problema. Presumibilmente potrebbe essere qualsiasi server imap che comunichi. –