Escrito por

Artigo Evandro Wendt · 3 h atrás 2m read

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á.