Delphi Mail OAuth2

Microsoft 365 und Gmail akzeptieren für die meisten Postfächer kein einfaches Kennwort mehr. Holen Sie die OAuth2-Token, halten Sie sie aktuell und übergeben Sie Ihrem SMTP-, IMAP- oder POP3-Client genau den SASL-String, den er benötigt.

TsgcMailOAuth2

Ruft die OAuth-2.0-Access-Token für Exchange Online und Gmail ab, erneuert sie und erstellt die XOAUTH2- und OAUTHBEARER-Strings. Die Komponente spricht nie direkt mit dem Mailserver und funktioniert daher mit Indy TIdSMTP, TIdIMAP4, TIdPOP3 oder jeder Bibliothek, die einen rohen SASL-Befehl senden kann.

Komponentenklasse

TsgcMailOAuth2 (Unit sgcAuth_Mail_OAuth2)

Protokoll

SASL OAUTHBEARER (RFC 7628) und XOAUTH2

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Enterprise

Einmal anmelden, monatelang Mails senden

Wählen Sie Provider und Protocols, setzen Sie ClientId, verwenden Sie das gespeicherte Refresh Token wieder oder rufen Sie Start auf, und authentifizieren Sie die Mail-Sitzung anschließend mit GetXOAuth2.

uses
  IdSMTP, sgcAuth_Mail_OAuth2;

// Mail is a form field: 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;

  // reuse the stored refresh token, sign in only when it no longer works
  Mail.RefreshToken := LoadRefreshToken;
  if (Mail.RefreshToken = '') or not Mail.Refresh then
    Mail.Start; // opens the browser, PKCE and a loopback redirect
end;

procedure TForm1.OnMailTokensChanged(Sender: TObject; const AccessToken,
  RefreshToken: String; const ExpiresAt: TDateTime);
begin
  SaveRefreshToken(RefreshToken); // encrypt it in your store
end;

// TIdSMTP with UseTLS = utUseExplicitTLS and AuthType = satNone
procedure TForm1.Authenticate(aSMTP: TIdSMTP);
begin
  aSMTP.Connect; // EHLO and 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);

Was steckt drin

Der OAuth2-Teil moderner Mail-Anmeldung, verpackt in einer Komponente mit bereits hinterlegten Provider-Details.

Presets für Microsoft 365 und Gmail

Provider wählt mopMicrosoft365 oder mopGmail mit den passenden Endpunkten. mopCustom nimmt CustomAuthURL, CustomTokenURL, CustomDeviceAuthorizationURL und CustomScope für jeden anderen Provider entgegen.

Scopes aus den Protokollen

Setzen Sie Protocols auf eine beliebige Kombination aus mpSMTP, mpIMAP und mpPOP3, und die Komponente fordert die passenden Scopes an, bei Microsoft 365 inklusive offline_access. GetScope zeigt, was angefragt wird.

Browser oder Device Code

Flow wählt mofAuthorizationCodePKCE (Browser plus Loopback-Redirect, siehe LocalServerOptions) oder mofDeviceCode für Dienste und Konsolen, wobei OnDeviceCode Ihnen den anzuzeigenden Code und die URL übergibt.

Token-Lebenszyklus

AccessToken, RefreshToken und ExpiresAt sind stets aktuell. Refresh erneuert das Access Token synchron, und OnTokensChanged feuert bei jeder Änderung, sodass Sie das neue Refresh Token speichern können.

Versandfertige SASL-Strings

GetXOAuth2 und GetOAuthBearer liefern die Base64-Initialantworten für AUTH XOAUTH2 und AUTH OAUTHBEARER. Die Raw-Varianten und die sgcGetXOAuth2-Funktionen helfen beim Debugging und mit anderen Token-Quellen.

Transportunabhängig

Die Komponente öffnet selbst nie eine Mailverbindung. Verwenden Sie Indy TIdSMTP, TIdIMAP4 oder TIdPOP3, oder jede Mail-Bibliothek, die einen rohen SASL-Befehl senden kann, mit HTTPClientOptions für das TLS der Token-Anfragen.

Spezifikationen und Referenzen

Maßgebliche Quellen für die Standards, die diese Komponente implementiert.

Dokumentation & Demos

Springe direkt zur Komponentenreferenz, lade das einsatzbereite Demo-Projekt herunter und teste die Testversion.

Online-Hilfe — TsgcMailOAuth2 Vollständige Eigenschaften-, Methoden- und Ereignisreferenz sowie die Schritte zur App-Registrierung für Microsoft 365 und Gmail.
Demo-Projekt — Demos\26.Authentication\06.Mail_OAuth2 Anmeldung per Browser und Device Code, Token-Erneuerung und eine Testmail, versendet mit AUTH XOAUTH2. Im sgcWebSockets-Paket enthalten — lade unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Codebeispiele für Delphi & C++ Builder und Primärquellenreferenzen — nur für diese Komponente.
Benutzerhandbuch (PDF) Umfassendes Handbuch zu jeder Komponente der Bibliothek.
Blog: Delphi-Login mit Passkeys, SAML SSO, LDAP und TOTP 2FA Wie die sechs Authentifizierungskomponenten in einer Delphi-Anwendung zusammenspielen.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, Mails mit OAuth2 zu versenden?

Laden Sie die kostenlose Testversion herunter und halten Sie Ihre Delphi-Mailfunktionen mit Microsoft 365 und Gmail funktionsfähig.