sgcIndy 2024.5.0 より XOAuth2 認証メカニズムがサポートされました。SASL XOAUTH2 メカニズムは、IMAP AUTHENTICATE、POP AUTH、SMTP AUTH コマンドで使用します。このメカニズムにより、OAuth 2.0 アクセストークンを使用してユーザーの Gmail アカウントへ認証することができます。
TIdSASLXOAuth2
TIdSASLXOAuth2 には、認証が行われる前に呼び出される OnAuthenticate イベントがあります。このイベントには 2 つのパラメーターがあります:
- Username: メールを送信するアカウントのユーザー名
- Token: OAuth2 トークン。sgcWebSockets ライブラリの TsgcHTTP_OAuth2_Client などのサードパーティコンポーネントを使用して取得する必要があります。
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 タブを選択してこの認証方式を使用し、以下のフィールドを入力してください:
- ユーザー名
- OAuth2 クライアント ID
- OAuth2 クライアントシークレット
- メール送信先アドレス
