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 イベントが呼び出されます。ここでユーザー名とアクセストークンを設定してください。

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

OAuth2 Client

OAuth2 アクセストークンは、sgcWebSockets ライブラリの TsgcHTTP_OAuth2_Client を使用して取得できます。

以下は、Google ユーザーアカウントから OAuth2 アクセストークンを取得するための 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 Demo

以下は、sgcWebSockets ライブラリの OAuth2 クライアントと XOAuth2 コンポーネントを使用して SMTP プロトコルでメールを送信するデモです。XOAuth2 タブを選択してこの認証方式を使用し、以下のフィールドを入力してください:

  1. ユーザー名
  2. OAuth2 クライアント ID
  3. OAuth2 クライアントシークレット
  4. メール送信先アドレス
});