Mail OAuth2 em Delphi

O Microsoft 365 e o Gmail não aceitam mais uma senha simples para a maioria das caixas de e-mail. Obtenha os tokens OAuth2, mantenha-os atualizados, e entregue ao seu cliente SMTP, IMAP ou POP3 exatamente a string SASL que ele precisa.

TsgcMailOAuth2

Obtém e renova os access tokens OAuth 2.0 para Exchange Online e Gmail, e constrói as strings XOAUTH2 e OAUTHBEARER. Ele nunca fala com o servidor de e-mail, então funciona com o Indy TIdSMTP, TIdIMAP4, TIdPOP3 ou qualquer biblioteca que consiga enviar um comando SASL bruto.

Classe do componente

TsgcMailOAuth2 (unit sgcAuth_Mail_OAuth2)

Protocolo

SASL OAUTHBEARER (RFC 7628) e XOAUTH2

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise e All-Access, além do pacote sgcAuth. Também disponível no sgcWebSockets .NET.

Faça login uma vez, envie e-mail por meses

Escolha o Provider e os Protocols, defina ClientId, reaproveite o refresh token armazenado ou chame Start, e depois autentique a sessão de e-mail com GetXOAuth2.

uses
  IdSMTP, sgcAuth_Mail_OAuth2;

// Mail é um campo do formulário: 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;

  // reaproveita o refresh token armazenado, só faz login quando ele não funciona mais
  Mail.RefreshToken := LoadRefreshToken;
  if (Mail.RefreshToken = '') or not Mail.Refresh then
    Mail.Start; // abre o navegador, PKCE e um redirecionamento loopback
end;

procedure TForm1.OnMailTokensChanged(Sender: TObject; const AccessToken,
  RefreshToken: String; const ExpiresAt: TDateTime);
begin
  SaveRefreshToken(RefreshToken); // criptografe-o no seu armazenamento
end;

// TIdSMTP com UseTLS = utUseExplicitTLS e AuthType = satNone
procedure TForm1.Authenticate(aSMTP: TIdSMTP);
begin
  aSMTP.Connect; // EHLO e 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);

O que está incluído

A parte OAuth2 do e-mail moderno, embrulhada em um único componente com os detalhes do provedor já preenchidos.

Predefinições Microsoft 365 e Gmail

Provider seleciona mopMicrosoft365 ou mopGmail com os endpoints corretos. mopCustom aceita CustomAuthURL, CustomTokenURL, CustomDeviceAuthorizationURL e CustomScope para qualquer outro provedor.

Escopos a partir dos protocolos

Defina Protocols com qualquer combinação de mpSMTP, mpIMAP e mpPOP3 e o componente solicita os escopos correspondentes, com offline_access no Microsoft 365. GetScope mostra o que será solicitado.

Flow escolhe mofAuthorizationCodePKCE (navegador mais redirecionamento loopback, veja LocalServerOptions) ou mofDeviceCode para serviços e consoles, onde OnDeviceCode entrega o código e a URL a exibir.

Ciclo de vida do token

AccessToken, RefreshToken e ExpiresAt estão sempre atualizados. Refresh renova o access token de forma síncrona e OnTokensChanged dispara toda vez, para que você possa persistir o novo refresh token.

Strings SASL prontas para enviar

GetXOAuth2 e GetOAuthBearer retornam as respostas iniciais em Base64 para AUTH XOAUTH2 e AUTH OAUTHBEARER. As variantes Raw e as funções sgcGetXOAuth2 ajudam na depuração e com outras fontes de token.

Independente de transporte

O componente nunca abre uma conexão de e-mail. Use o Indy TIdSMTP, TIdIMAP4 ou TIdPOP3, ou qualquer biblioteca de e-mail que consiga enviar um comando SASL bruto, com HTTPClientOptions para o TLS das requisições de token.

Especificações & referências

Fontes oficiais dos padrões implementados por este componente.

Documentação & Demos

Acesse a referência do componente, obtenha o projeto de demo pronto para executar e baixe o trial.

Ajuda Online — TsgcMailOAuth2 Referência completa de propriedades, métodos e eventos, mais os passos de registro do aplicativo no Microsoft 365 e no Gmail.
Projeto de Demo — Demos\26.Authentication\06.Mail_OAuth2 Login por navegador e por device code, renovação de token e um e-mail de teste enviado com AUTH XOAUTH2. Incluído no pacote sgcWebSockets — baixe o trial abaixo.
Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente.
Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.
Blog: Login em Delphi com Passkeys, SAML SSO, LDAP e TOTP 2FA Como os seis componentes de autenticação se encaixam em uma única aplicação Delphi.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para Enviar E-mail com OAuth2?

Baixe o trial gratuito e mantenha seus recursos de e-mail em Delphi funcionando com Microsoft 365 e Gmail.