Écrit par

Associate professor at Igor Sikorsky Kyiv Polytechnic Institute
Article Iryna Mykhailova · 2 h il y a 2m read

Si vous rencontrez des difficultés avec Microsoft SMTP via OAuth 2...

. . . vous n’êtes pas seul.

De l’aide est disponible.

Cela m’a pris un certain temps à comprendre, et je suppose que d’autres rencontrent les mêmes difficultés. J’ai parcouru toute la configuration Entra pour mettre en place un flux « client credentials » afin d’envoyer des e-mails via un compte Microsoft 365. J’ai réussi à récupérer mon token, mais je n’arrivais jamais à m’authentifier auprès du serveur SMTP avec la classe %Net.SMTP. La solution comportait deux éléments.

Premièrement, le jeton d’accès de l’authentificateur doit être plus que JUSTE le jeton d’accès. Il doit être formaté comme suit :

set smtp.authenticator.AccessToken = "user="_email_address_$C(1)_"auth=Bearer "_token_$C(1,1)

où email_address est l’adresse e-mail d’envoi et token est le jeton OAuth récupéré depuis le serveur.

Deuxièmement, le mécanisme par défaut %Net.SASL.XOAUTH2 ne se comporte pas comme attendu par le serveur SMTP. Plus précisément, il n’envoie aucune réponse initiale au serveur puis commence l’authentification, alors que le serveur attend de recevoir immédiatement ce jeton d’accès. Pour corriger cela, vous devez créer une classe qui étend %Net.SASL.XOAUTH2 et surcharge une seule méthode simple :

Class User.MSOAUTH2 Extends %Net.SASL.XOAUTH2
{

/// Démarre l’authentification basée sur UserName et AccessToken en utilisant le mécanisme SASL XOAUTH2.
Method Start(ByRef response As %String) As %Boolean
{
 if (..AccessToken="") quit 0
 set response=..AccessToken		;dans la classe d’origine, aucune réponse n’est envoyée ici
 set ..state=1
 quit 1
}

}

Ensuite, pour utiliser cette classe à la place de celle par défaut, vous devez configurer la liste des mécanismes de l’authentificateur comme suit :

set smtp.authenticator.MechanismList = "XOAUTH2:MSOAUTH2"

Après ces ajustements, j’ai pu envoyer des e-mails SMTP comme prévu via smtp.office365.com sur le port 587 avec une configuration SSL en place. Je ne suis pas suffisamment familier avec le fonctionnement de l’Email Outbound Adapter dans les productions pour donner des conseils sur la mise en œuvre de ces changements dans ce contexte.