À partir de sgcIndy 2024.5.0, le mécanisme d'authentification XOAuth2 est pris en charge. Le mécanisme SASL XOAUTH2 est utilisé avec les commandes IMAP AUTHENTICATE, POP AUTH et SMTP AUTH. Ce mécanisme permet d'utiliser des jetons d'accès OAuth 2.0 pour s'authentifier auprès d'un compte Gmail par exemple.
TIdSASLXOAuth2
Le composant TIdSASLXOAuth2 dispose de l'événement OnAuthenticate, appelé avant l'autorisation. L'événement a 2 paramètres :
- Username : le nom d'utilisateur du compte qui envoie l'e-mail
- Token : le jeton OAuth2. Il doit être obtenu via un composant tiers comme TsgcHTTP_OAuth2_Client de la bibliothèque sgcWebSockets.
Si tu veux envoyer un e-mail avec le composant TIdSMTP, ajoute simplement le composant TIdSASLXOAuth2 comme nouveau SASLMechanism.
xOAuth2 := TIdSASLXOAUTH2.Create(nil); smtp := TIdSMTP.Create(nil); ... smtp.AuthType := satSASL; smtp.SASLMechanisms.Clear; smtp.SASLMechanisms.Add.SASL := xoauth2;
Après avoir configuré les composants SMTP et XOAuth2, envoie un e-mail avec le composant SMTP ; lorsque l'autorisation est requise, l'événement OnAuthenticate est appelé. Définis simplement le Username et l'Access Token ici.
procedure OnXOAuth2Authenticate(Sender: TObject; var Username,
Token: string);
begin
Token := 'OAuth2 Access Token';
Username := 'your mail account';
end;
Client OAuth2
Le jeton d'accès OAuth2 peut être obtenu avec TsgcHTTP_OAuth2_Client de la bibliothèque sgcWebSockets.
Tu trouveras ci-dessous un exemple de configuration du client OAuth2 pour obtenir un jeton d'accès OAuth2 depuis ton compte utilisateur Google.
OAuth2 := TsgcHTTP_OAuth2_Client.Create(nil);
OAuth2.OnAfterAccessToken := OnOAuth2AfterAccessTokenEvent;
OAuth2.OAuth2Options.GrantType := auth2CodePKCE;
OAuth2.LocalServerOptions.IP := '127.0.0.1';
OAuth2.LocalServerOptions.Port := 0;
OAuth2.AuthorizationServerOptions.AuthURL := 'https://accounts.google.com/o/oauth2/auth';
OAuth2.AuthorizationServerOptions.TokenURL := 'https://accounts.google.com/o/oauth2/token';
OAuth2.AuthorizationServerOptions.Scope.Text := 'https://mail.google.com/';
OAuth2.OAuth2Options.ClientId := '<your oauth2 client id>';
OAuth2.OAuth2Options.ClientSecret := '<your oauth2 client secret>';
OAuth2.Start;
procedure OnOAuth2AfterAccessTokenEvent(Sender: TObject; const
Access_Token, Token_Type, Expires_In, Refresh_Token, Scope, RawParams:
String; var Handled: Boolean);
begin
ShowMessage(Access_Token);
end;
Démo Delphi XOAuth2
Tu trouveras ci-dessous une démo qui présente le composant XOAuth2 avec le client OAuth2 de la bibliothèque sgcWebSockets pour envoyer un e-mail via le protocole SMTP. Sélectionne l'onglet XOAuth2 pour utiliser ce type d'authentification et remplis les champs :
- Username
- OAuth2 Client Id
- OAuth2 Client Secret
- Adresse d'envoi de l'e-mail
