Se você estiver com dificuldades com o SMTP da Microsoft via OAuth 2 . . .
. . . você não está sozinho.
A Ajuda está disponível.
Isso me tomou um tempo para descobrir, e imagino que outras pessoas também possam estar enfrentando dificuldades. Eu passei por toda a parte do Entra para configurar um fluxo de client credentials para enviar e-mail através de uma conta Microsoft 365. Consegui obter meu token com sucesso, mas nunca consegui autenticar com o servidor SMTP usando a classe %Net.SMTP. Havia duas partes para resolver isso.
Primeiro, o access token do autenticador precisa ser mais do que APENAS o access token. Ele precisa ser formatado como:
set smtp.authenticator.AccessToken = "user="_emailaddress_$C(1)_"auth=Bearer "_token_$C(1,1)onde emailaddress é o endereço de e-mail de onde você está enviando e token é o token OAuth que você obteve do servidor.
Em segundo lugar, o mecanismo padrão %Net.SASL.XOAUTH2 não se comporta da forma que o servidor SMTP espera. Especificamente, ele não envia uma resposta inicial ao servidor e então inicia a autenticação, mas o servidor espera ver esse access token imediatamente. Para acomodar isso, você precisará criar uma classe que estenda %Net.SASL.XOAUTH2 e sobrescreva apenas um método simples:
Class User.MSOAUTH2 Extends %Net.SASL.XOAUTH2
{
/// Start authentication based on UserName and AccessToken using the XOAUTH2 SASL mechanism.
Method Start(ByRef response As %String) As %Boolean
{
if (..AccessToken="") quit 0
set response=..AccessToken ;in the original class, no response is sent here
set ..state=1
quit 1
}
}
Então, para usar essa classe em vez da padrão, você precisará apontar a lista de mecanismos do autenticador para ela da seguinte forma:
set smtp.authenticator.MechanismList = "XOAUTH2:MSOAUTH2"Depois de fazer esses ajustes, consegui enviar e-mails SMTP como esperado através do smtp.office365.com na porta 587, com uma configuração SSL definida. Não estou familiarizado o suficiente com o funcionamento do Email Outbound Adapter dentro de produções para dar qualquer orientação sobre como implementar essas mudanças lá.