Jak mogę zalogować się na konto Gmail i uzyskać liczbę wiadomości w skrzynce pocztowej z komponentem TIdIMAP4
?Jak zalogować się na konto Gmail i uzyskać liczbę wiadomości w skrzynce pocztowej za pomocą TIdIMAP4?
Odpowiedz
Aby uzyskać całkowitą liczbę wiadomości w skrzynce odbiorczej Gmaila, musisz najpierw połączyć się z serwerem IMAP Gmail za pomocą poświadczeń, wybrać skrzynkę pocztową skrzynki odbiorczej Gmaila i dla wybranej skrzynki pocztowej odczytać wartość właściwości TotalMsgs
.
W kodzie może wygląda następująco (kod ten wymaga OpenSSL, więc nie zapomnij umieścić bibliotek libeay32.dll
i ssleay32.dll
do ścieżki widocznej do projektu, można pobrać biblioteki OpenSSL do Indy w różnych wersjach i platform 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;
można ewentualnie pobrać demo project
który obejmuje OpenSSL v1.0.1c
biblioteki dla i386 platformy dla aplikacji 32-bitowych (sporządzoną w Delphi 2009).
HUuuuuge thanks! :) –
Nie ma za co! – TLama
W jaki sposób można przeglądać pocztę e-mail, aby uzyskać temat lub treść wiadomości "i" w folderze "Skrzynka odbiorcza". To nie działa. IMAPClient.MailBox.MessageList.Messages [i] .Body –
Czy to jest pytanie z Gmaila lub imap? –
@DavidHeffernan Indy IMAP. –
OK, więc część gmail nie jest problemem. Przypuszczalnie może to być dowolny serwer imap, który komunikujesz. –