Mail OAuth2 pour Delphi

Microsoft 365 et Gmail n'acceptent plus un simple mot de passe pour la plupart des boîtes mail. Obtiens les jetons OAuth2, garde-les à jour, et fournis à ton client SMTP, IMAP ou POP3 exactement la chaîne SASL dont il a besoin.

TsgcMailOAuth2

Obtient et rafraîchit les jetons d'accès OAuth 2.0 pour Exchange Online et Gmail, et construit les chaînes XOAUTH2 et OAUTHBEARER. Il ne dialogue jamais directement avec le serveur mail, donc il fonctionne avec Indy TIdSMTP, TIdIMAP4, TIdPOP3 ou toute bibliothèque capable d'envoyer une commande SASL brute.

Classe du composant

TsgcMailOAuth2 (unit sgcAuth_Mail_OAuth2)

Protocole

SASL OAUTHBEARER (RFC 7628) et XOAUTH2

Plateformes

Windows, macOS, Linux, iOS, Android

Édition

Enterprise et All-Access, ainsi que le pack sgcAuth. Également disponible dans sgcWebSockets .NET.

Connecte-toi une fois, envoie des mails pendant des mois

Choisis le Provider et les Protocols, renseigne ClientId, réutilise le jeton de rafraîchissement stocké ou appelle Start, puis authentifie la session mail avec GetXOAuth2.

uses
  IdSMTP, sgcAuth_Mail_OAuth2;

// Mail est un champ du formulaire : 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;

  // réutilise le jeton de rafraîchissement stocké, ne te connecte que s'il ne fonctionne plus
  Mail.RefreshToken := LoadRefreshToken;
  if (Mail.RefreshToken = '') or not Mail.Refresh then
    Mail.Start; // ouvre le navigateur, PKCE et une redirection en boucle locale
end;

procedure TForm1.OnMailTokensChanged(Sender: TObject; const AccessToken,
  RefreshToken: String; const ExpiresAt: TDateTime);
begin
  SaveRefreshToken(RefreshToken); // chiffre-le dans ton stockage
end;

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

Ce qu'il y a à l'intérieur

La partie OAuth2 de la messagerie moderne, dans un seul composant avec les détails du fournisseur déjà renseignés.

Préréglages Microsoft 365 et Gmail

Provider sélectionne mopMicrosoft365 ou mopGmail avec les bons endpoints. mopCustom prend CustomAuthURL, CustomTokenURL, CustomDeviceAuthorizationURL et CustomScope pour tout autre fournisseur.

Scopes issus des protocoles

Définis Protocols avec n'importe quelle combinaison de mpSMTP, mpIMAP et mpPOP3 et le composant demande les scopes correspondants, avec offline_access sur Microsoft 365. GetScope montre ce qui sera demandé.

Flow choisit mofAuthorizationCodePKCE (navigateur plus redirection en boucle locale, voir LocalServerOptions) ou mofDeviceCode pour les services et consoles, où OnDeviceCode te fournit le code et l'URL à afficher.

Cycle de vie du jeton

AccessToken, RefreshToken et ExpiresAt sont toujours à jour. Refresh renouvelle le jeton d'accès de façon synchrone et OnTokensChanged se déclenche à chaque fois, pour que tu puisses conserver le nouveau jeton de rafraîchissement.

Chaînes SASL prêtes à envoyer

GetXOAuth2 et GetOAuthBearer retournent les réponses initiales en Base64 pour AUTH XOAUTH2 et AUTH OAUTHBEARER. Les variantes Raw et les fonctions sgcGetXOAuth2 aident au débogage et avec d'autres sources de jetons.

Indépendant du transport

Le composant n'ouvre jamais de connexion mail. Utilise Indy TIdSMTP, TIdIMAP4 ou TIdPOP3, ou toute bibliothèque mail capable d'envoyer une commande SASL brute, avec HTTPClientOptions pour le TLS des requêtes de jeton.

Spécifications et références

Sources faisant autorité pour les standards implémentés par ce composant.

Documentation et démos

Accès direct à la référence du composant, récupère le projet de démo prêt à l'emploi et télécharge l'essai.

Aide en ligne : TsgcMailOAuth2 Référence complète des propriétés, méthodes et événements, plus les étapes d'enregistrement de l'application chez Microsoft 365 et Gmail.
Projet de démo : Demos\26.Authentication\06.Mail_OAuth2 Connexion via navigateur et device code, rafraîchissement du jeton et un mail de test envoyé avec AUTH XOAUTH2. Livré dans le paquet sgcWebSockets, télécharge l'essai ci-dessous.
Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code pour Delphi et C++ Builder et références aux sources primaires pour ce composant uniquement.
Manuel utilisateur (PDF) Manuel complet couvrant tous les composants de la bibliothèque.
Blog : Connexion Delphi avec Passkeys, SSO SAML, LDAP et TOTP 2FA Comment les six composants d'authentification s'articulent dans une seule application Delphi.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à envoyer des mails avec OAuth2 ?

Télécharge l'essai gratuit et garde tes fonctionnalités mail Delphi opérationnelles avec Microsoft 365 et Gmail.