Poczta w Delphi z OAuth2

Microsoft 365 i Gmail nie akceptują już zwykłego hasła dla większości skrzynek. Uzyskaj tokeny OAuth2, utrzymuj je aktualne i przekaż swojemu klientowi SMTP, IMAP lub POP3 dokładnie taki ciąg SASL, jakiego potrzebuje.

TsgcMailOAuth2

Uzyskuje i odświeża tokeny dostępu OAuth 2.0 dla Exchange Online i Gmail oraz buduje ciągi XOAUTH2 i OAUTHBEARER. Nigdy nie łączy się z serwerem pocztowym, więc działa z Indy TIdSMTP, TIdIMAP4, TIdPOP3 lub dowolną biblioteką potrafiącą wysłać surowe polecenie SASL.

Klasa komponentu

TsgcMailOAuth2 (jednostka sgcAuth_Mail_OAuth2)

Protokół

SASL OAUTHBEARER (RFC 7628) i XOAUTH2

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Enterprise i All-Access, a także pakiet sgcAuth. Dostępny również w sgcWebSockets .NET.

Zaloguj się raz, wysyłaj pocztę przez miesiące

Wybierz Provider i Protocols, ustaw ClientId, użyj ponownie zapisanego tokenu odświeżania lub wywołaj Start, a następnie uwierzytelnij sesję pocztową za pomocą GetXOAuth2.

uses
  IdSMTP, sgcAuth_Mail_OAuth2;

// Mail to pole formularza: Mail: TsgcMailOAuth2;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Mail := TsgcMailOAuth2.Create(Self);
  Mail.Provider := mopMicrosoft365;
  Mail.Protocols := [mpSMTP];
  Mail.TenantId := 'contoso.onmicrosoft.com';
  Mail.ClientId := 'your-application-id';
  Mail.OnTokensChanged := OnMailTokensChanged;

  // użyj ponownie zapisanego tokenu odświeżania, zaloguj się tylko, gdy już nie działa
  Mail.RefreshToken := LoadRefreshToken;
  if (Mail.RefreshToken = '') or not Mail.Refresh then
    Mail.Start; // otwiera przeglądarkę, PKCE i przekierowanie loopback
end;

procedure TForm1.OnMailTokensChanged(Sender: TObject; const AccessToken,
  RefreshToken: String; const ExpiresAt: TDateTime);
begin
  SaveRefreshToken(RefreshToken); // zaszyfruj go w swoim magazynie
end;

// TIdSMTP z UseTLS = utUseExplicitTLS i AuthType = satNone
procedure TForm1.Authenticate(aSMTP: TIdSMTP);
begin
  aSMTP.Connect; // EHLO i STARTTLS
  aSMTP.SendCmd('AUTH XOAUTH2 ' + Mail.GetXOAuth2('user@contoso.com'), 235);
end;
// uses: IdSMTP, sgcAuth_Mail_OAuth2
TsgcMailOAuth2 *Mail = new TsgcMailOAuth2(this);
Mail->Provider = mopMicrosoft365;
Mail->Protocols = TsgcMailOAuth2Protocols() << mpSMTP;
Mail->TenantId = "contoso.onmicrosoft.com";
Mail->ClientId = "your-application-id";
Mail->OnTokensChanged = OnMailTokensChanged;

Mail->RefreshToken = LoadRefreshToken();
if (Mail->RefreshToken.IsEmpty() || !Mail->Refresh())
  Mail->Start();

IdSMTP1->Connect();
IdSMTP1->SendCmd("AUTH XOAUTH2 " + Mail->GetXOAuth2("user@contoso.com"), 235);

Co jest w środku

Część OAuth2 nowoczesnej poczty, zamknięta w jednym komponencie z gotowymi ustawieniami dostawcy.

Gotowe ustawienia Microsoft 365 i Gmail

Provider wybiera mopMicrosoft365 lub mopGmail z właściwymi endpointami. mopCustom przyjmuje CustomAuthURL, CustomTokenURL, CustomDeviceAuthorizationURL i CustomScope dla dowolnego innego dostawcy.

Zakresy na podstawie protokołów

Ustaw Protocols na dowolną kombinację mpSMTP, mpIMAP i mpPOP3, a komponent zażąda odpowiednich zakresów, z offline_access w Microsoft 365. GetScope pokazuje, o co zostanie poproszone.

Przeglądarka lub kod urządzenia

Flow wybiera mofAuthorizationCodePKCE (przeglądarka plus przekierowanie loopback, patrz LocalServerOptions) lub mofDeviceCode dla usług i konsol, gdzie OnDeviceCode przekazuje kod i adres URL do pokazania.

Cykl życia tokenu

AccessToken, RefreshToken i ExpiresAt są zawsze aktualne. Refresh odświeża token dostępu synchronicznie, a OnTokensChanged uruchamia się za każdym razem, więc możesz zapisać nowy token odświeżania.

Ciągi SASL gotowe do wysłania

GetXOAuth2 i GetOAuthBearer zwracają początkowe odpowiedzi Base64 dla AUTH XOAUTH2 i AUTH OAUTHBEARER. Warianty Raw i funkcje sgcGetXOAuth2 pomagają przy debugowaniu i innych źródłach tokenów.

Niezależny od transportu

Komponent nigdy nie otwiera połączenia pocztowego. Użyj Indy TIdSMTP, TIdIMAP4 lub TIdPOP3, lub dowolnej biblioteki pocztowej potrafiącej wysłać surowe polecenie SASL, z HTTPClientOptions dla TLS żądań tokenu.

Specyfikacje i odniesienia

Autorytatywne źródła dla standardów implementowanych przez ten komponent.

Dokumentacja i dema

Przejdź do dokumentacji komponentu, pobierz gotowy projekt demo i wersję próbną.

Pomoc online — TsgcMailOAuth2 Pełna dokumentacja właściwości, metod i zdarzeń, a także kroki rejestracji aplikacji w Microsoft 365 i Gmail.
Projekt demo — Demos\26.Authentication\06.Mail_OAuth2 Logowanie w przeglądarce i przez kod urządzenia, odświeżanie tokenu i testowy e-mail wysłany z AUTH XOAUTH2. Dołączony do pakietu sgcWebSockets — pobierz wersję próbną poniżej.
Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi i C++ Builder oraz odwołania do źródeł — tylko dla tego komponentu.
Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki.
Blog: Logowanie w Delphi z Passkeys, SAML SSO, LDAP i TOTP 2FA Jak sześć komponentów uwierzytelniania współpracuje w jednej aplikacji Delphi.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy na wysyłanie poczty z OAuth2?

Pobierz bezpłatną wersję próbną i zachowaj działanie funkcji pocztowych Delphi z Microsoft 365 i Gmail.