web-dev-qa-db-fra.com

Puis-je envoyer un e-mail SMTP via la boîte aux lettres partagée Office365?

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.

  1. Existe-t-il un moyen d'envoyer via O365 avec un utilisateur sous licence? (code ci-dessus)
  2. Existe-t-il des paramètres spéciaux requis dans Exchange ou sur l'utilisateur sous licence pour que cela fonctionne? (Si la réponse à 1 est oui)
  3. Est-il possible d'envoyer des e-mails via une boîte aux lettres partagée pour laquelle l'utilisateur authentifié dispose des droits Envoyer en tant que?

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?

13
RHarris

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.

0
RHarris