sgcIndy XOAuth2 Delphi

· 组件

sgcIndy 2024.5.0 起支持 XOAuth2 身份验证机制。SASL XOAUTH2 机制用于 IMAP AUTHENTICATE、POP AUTH 和 SMTP AUTH 命令。此机制允许使用 OAuth 2.0 访问令牌对用户的 Gmail 账户进行身份验证。

TIdSASLXOAuth2

TIdSASLXOAuth2 具有 OnAuthenticate 事件,该事件在授权完成之前调用。事件包含 2 个参数:


如果要使用 TIdSMTP 组件发送邮件,只需将 TIdSASLXOAuth2 组件添加为新的 SASLMechanism。
xOAuth2 := TIdSASLXOAUTH2.Create(nil);
smtp := TIdSMTP.Create(nil);
...
smtp.AuthType := satSASL;
smtp.SASLMechanisms.Clear;
smtp.SASLMechanisms.Add.SASL := xoauth2; 

配置 SMTP 和 XOAuth2 组件后,使用 SMTP 组件发送邮件,当需要授权时将调用 OnAuthenticate 事件。只需在此设置 Username 和 Access Token。

procedure OnXOAuth2Authenticate(Sender: TObject; var Username,
    Token: string);
begin
  Token := 'OAuth2 Access Token';
  Username := 'your mail account';
end; 

OAuth2 客户端

OAuth2 访问令牌可使用 sgcWebSockets 库中的 TsgcHTTP_OAuth2_Client 获取。

以下是配置 OAuth2 客户端从 Google 用户账户获取 OAuth2 访问令牌的示例。

  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; 

Delphi XOAuth2 演示

以下演示展示了使用 sgcWebSockets 库的 OAuth2 客户端通过 SMTP 协议发送邮件的 XOAuth2 组件。选择 XOAuth2 标签页使用此类认证并填写以下字段:

  1. 用户名
  2. OAuth2 客户端 ID
  3. OAuth2 客户端密钥
  4. 收件人地址