Nous envisageons de passer à O365; cependant, nous avons développé un logiciel qui utilise notre serveur Exchange actuel pour envoyer des courriers électroniques à la fois aux utilisateurs externes et à une boîte de support lorsque des erreurs se produisent.
J'ai testé cela pour m'assurer que le code que nous avons en place continuera à fonctionner avec O365 mais jusqu'à présent, je n'ai pas eu beaucoup de succès.
J'ai essayé d'utiliser SmtpClient de .Net ainsi que SmtpClient de MailKit et aucun ne semble fonctionner. Je reçois toujours une erreur (c'est l'erreur de MailKit - l'erreur .Net est similaire)
"AuthenticationInvalidCredentials: 5.7.3 Authentification infructueuse [* .prod.exchangelabs.com]"
Je peux utiliser les informations d'identification que j'ai dans mon code pour me connecter à OWA - donc je sais que les informations d'identification sont valides. N'est-il pas possible d'envoyer des e-mails via O356? Existe-t-il une configuration spéciale qui doit se produire dans Exchange pour rendre cela possible?
Voici ce que j'ai essayé jusqu'à présent:
MailKit
var msg = new MimeMessage();
msg.From.Add(new MailboxAddress("Support","[email protected]"));
msg.To.Add(new MailboxAddress("Me","[email protected]"));
msg.To.Add(new MailboxAddress("External User","[email protected]"));
msg.Subject = "Test";
msg.Body = new TextPart("plain"){
Text = "Here is a message for you"
};
using(var client = new SmtpClient()){
client.ServerCertificateValidationCallback = (s,c,h,e) => true;
client.AuthenticationMechanisms.Remove("XOAUTH2"); //Not sure what this does. Have tried with and without
client.Connect("smtp.office365.com", 587, MailKit.Security.SecureSocketOptions.StartTls);
client.Authenticate(new NetworkCredential("[email protected]", "supportPwd"));
client.Send(msg);
client.Disconnect(true);
}
Le code .Net SmtpClient ressemblait beaucoup au code MailKit.
Mettre à jour
J'obtiens toujours le même message d'erreur. Nous avons activé MFA pour nos utilisateurs de domaine. Cependant, nous avons une stratégie qui n'exige pas d'authentification MFA pour les utilisateurs lorsqu'ils se connectent à partir d'un emplacement approuvé (l'adresse IP de notre organisation). J'ai également répertorié notre adresse IP en tant qu'IP de confiance. Dans mon esprit, la MFA ne devrait pas être le problème ici.
Je sais que les informations d'identification sont correctes. Je les ai copiés à partir du code et les ai collés dans l'écran de connexion lors de la connexion à M365 - et je me suis bien débrouillé.
Qu'est-ce que je fais mal?
Pour tous ceux qui rencontrent des problèmes similaires, j'ai trouvé que mon problème était une politique d'accès conditionnel. Microsoft fournit un Baseline Policy: Block Legacy Authentication
- qui avait été activé dans notre AAD.
En examinant la stratégie, elle est conçue pour BLOQUER tous les mécanismes d'authentification qui ne nécessitent pas d'authentification MFA. Cela inclut des éléments tels que POP et SMTP. Une fois que j'ai désactivé cette politique, le code ci-dessus fonctionnait très bien.