Mail OAuth2 para Delphi

Microsoft 365 y Gmail ya no aceptan una contraseña en texto plano para la mayoría de los buzones. Obtén los tokens OAuth2, mantenlos actualizados y entrega a tu cliente SMTP, IMAP o POP3 exactamente la cadena SASL que necesita.

TsgcMailOAuth2

Obtiene y renueva los access tokens de OAuth 2.0 para Exchange Online y Gmail, y construye las cadenas XOAUTH2 y OAUTHBEARER. Nunca habla con el servidor de correo, por lo que funciona con Indy TIdSMTP, TIdIMAP4, TIdPOP3 o cualquier biblioteca capaz de enviar un comando SASL en bruto.

Clase del componente

TsgcMailOAuth2 (unidad sgcAuth_Mail_OAuth2)

Protocolo

SASL OAUTHBEARER (RFC 7628) y XOAUTH2

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Enterprise

Inicia sesión una vez, envía correo durante meses

Elige el Provider y los Protocols, configura ClientId, reutiliza el refresh token guardado o llama a Start, y luego autentica la sesión de correo con GetXOAuth2.

uses
  IdSMTP, sgcAuth_Mail_OAuth2;

// Mail is a form field: Mail: TsgcMailOAuth2;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Mail := TsgcMailOAuth2.Create(Self);
  Mail.Provider := mopMicrosoft365;
  Mail.Protocols := [mpSMTP];
  Mail.TenantId := 'contoso.onmicrosoft.com';
  Mail.ClientId := 'your-application-id';
  Mail.OnTokensChanged := OnMailTokensChanged;

  // reuse the stored refresh token, sign in only when it no longer works
  Mail.RefreshToken := LoadRefreshToken;
  if (Mail.RefreshToken = '') or not Mail.Refresh then
    Mail.Start; // opens the browser, PKCE and a loopback redirect
end;

procedure TForm1.OnMailTokensChanged(Sender: TObject; const AccessToken,
  RefreshToken: String; const ExpiresAt: TDateTime);
begin
  SaveRefreshToken(RefreshToken); // encrypt it in your store
end;

// TIdSMTP with UseTLS = utUseExplicitTLS and AuthType = satNone
procedure TForm1.Authenticate(aSMTP: TIdSMTP);
begin
  aSMTP.Connect; // EHLO and STARTTLS
  aSMTP.SendCmd('AUTH XOAUTH2 ' + Mail.GetXOAuth2('user@contoso.com'), 235);
end;
// uses: IdSMTP, sgcAuth_Mail_OAuth2
TsgcMailOAuth2 *Mail = new TsgcMailOAuth2(this);
Mail->Provider = mopMicrosoft365;
Mail->Protocols = TsgcMailOAuth2Protocols() << mpSMTP;
Mail->TenantId = "contoso.onmicrosoft.com";
Mail->ClientId = "your-application-id";
Mail->OnTokensChanged = OnMailTokensChanged;

Mail->RefreshToken = LoadRefreshToken();
if (Mail->RefreshToken.IsEmpty() || !Mail->Refresh())
  Mail->Start();

IdSMTP1->Connect();
IdSMTP1->SendCmd("AUTH XOAUTH2 " + Mail->GetXOAuth2("user@contoso.com"), 235);

Qué incluye

La parte de OAuth2 del correo moderno, resuelta en un solo componente con los detalles del proveedor ya configurados.

Preajustes de Microsoft 365 y Gmail

Provider selecciona mopMicrosoft365 o mopGmail con los endpoints correctos. mopCustom admite CustomAuthURL, CustomTokenURL, CustomDeviceAuthorizationURL y CustomScope para cualquier otro proveedor.

Scopes según los protocolos

Configura Protocols con cualquier combinación de mpSMTP, mpIMAP y mpPOP3 y el componente solicita los scopes correspondientes, con offline_access en Microsoft 365. GetScope muestra lo que se pedirá.

Flow elige entre mofAuthorizationCodePKCE (navegador más redirección loopback, consulta LocalServerOptions) o mofDeviceCode para servicios y consolas, donde OnDeviceCode entrega el código y la URL que debes mostrar.

Ciclo de vida del token

AccessToken, RefreshToken y ExpiresAt están siempre actualizados. Refresh renueva el access token de forma síncrona y OnTokensChanged se dispara cada vez, para que puedas guardar el nuevo refresh token.

Cadenas SASL listas para enviar

GetXOAuth2 y GetOAuthBearer devuelven las respuestas iniciales en Base64 para AUTH XOAUTH2 y AUTH OAUTHBEARER. Las variantes Raw y las funciones sgcGetXOAuth2 ayudan con la depuración y con otras fuentes de tokens.

Independiente del transporte

El componente nunca abre una conexión de correo. Use Indy TIdSMTP, TIdIMAP4 o TIdPOP3, o cualquier biblioteca de correo capaz de enviar un comando SASL en bruto, con HTTPClientOptions para el TLS de las peticiones de token.

Especificaciones y referencias

Fuentes autorizadas de los estándares que implementa este componente.

Documentación y Demos

Enlace directo a la referencia del componente, descarga el proyecto demo listo para ejecutar y la prueba gratuita.

Online Help — TsgcMailOAuth2 Referencia completa de propiedades, métodos y eventos de este componente.
Demo Project — Demos\26.Authentication\06.Mail_OAuth2 Proyecto de ejemplo listo para ejecutar. Se incluye en el paquete sgcWebSockets, descarga la prueba gratuita más abajo.
Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi y C++ Builder y referencias de fuentes primarias, solo este componente.
Manual de usuario (PDF) Manual completo que cubre todos los componentes de la biblioteca.
Blog: Inicio de sesión en Delphi con Passkeys, SAML SSO, LDAP y TOTP 2FA Cómo encajan los seis componentes de autenticación en una misma aplicación Delphi.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para enviar correo con OAuth2?

Descarga la prueba gratuita y mantén en funcionamiento las funciones de correo de tu aplicación Delphi con Microsoft 365 y Gmail.