Ab sgcIndy 2024.5.0 wird der XOAuth2-Authentifizierungsmechanismus unterstützt. Der SASL-XOAUTH2-Mechanismus für die IMAP-AUTHENTICATE-, POP-AUTH- und SMTP-AUTH-Befehle. Dieser Mechanismus erlaubt z. B. die Verwendung von OAuth-2.0-Access-Tokens, um sich am Gmail-Konto eines Nutzers zu authentifizieren.
TIdSASLXOAuth2
Die TIdSASLXOAuth2 verfügt über das Ereignis OnAuthenticate, das vor der Autorisierung aufgerufen wird. Das Ereignis hat 2 Parameter:
- Username: der Benutzername des Kontos, das die E-Mail versendet
- Token: das OAuth2-Token. Dieses muss über eine Drittkomponente wie TsgcHTTP_OAuth2_Client aus der sgcWebSockets-Bibliothek beschafft werden.
Wenn du eine E-Mail mit der TIdSMTP-Komponente senden möchtest, füge einfach die Komponente TIdSASLXOAuth2 als neuen SASLMechanism hinzu.
xOAuth2 := TIdSASLXOAUTH2.Create(nil); smtp := TIdSMTP.Create(nil); ... smtp.AuthType := satSASL; smtp.SASLMechanisms.Clear; smtp.SASLMechanisms.Add.SASL := xoauth2;
Nachdem du die SMTP- und XOAuth2-Komponenten konfiguriert hast, sende eine E-Mail über die SMTP-Komponente; wenn die Autorisierung erforderlich ist, wird das Ereignis OnAuthenticate aufgerufen. Setze dort einfach Username und Access Token.
procedure OnXOAuth2Authenticate(Sender: TObject; var Username,
Token: string);
begin
Token := 'OAuth2 Access Token';
Username := 'your mail account';
end;
OAuth2-Client
Das OAuth2-Access-Token kann mit dem TsgcHTTP_OAuth2_Client aus der sgcWebSockets-Bibliothek bezogen werden.
Unten findest du ein Beispiel, wie der OAuth2-Client konfiguriert wird, um ein OAuth2-Access-Token von deinem Google-Konto zu erhalten.
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
Unten findest du eine Demo, die die XOAuth2-Komponente zusammen mit dem OAuth2-Client aus der sgcWebSockets-Bibliothek zeigt, um eine E-Mail über das SMTP-Protokoll zu versenden. Wähle den Tab XOAuth2, um diese Art der Authentifizierung zu nutzen, und fülle die Felder aus:
- Username
- OAuth2 Client Id
- OAuth2 Client Secret
- Adresse, an die die E-Mail gesendet wird
