web-dev-qa-db-fra.com

API du service Web Exchange et exception non autorisée 401

Lorsque j'essaie d'envoyer des e-mails à l'aide de l'API EWS, j'obtiens l'erreur suivante: (dans message.Send();)

La demande a échoué. Le serveur distant a renvoyé une erreur: (401) Non autorisé.

Mon code est le suivant:

ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

//WebService Uri
try
{
    exchangeService.Url = new Uri("https://exchangeserver/ews/exchange.asmx");
}
catch (Exception ex)
{
    throw new Exception(string.Format("WebService Uri:" + ex));
}

//Credentials
try
{
    exchangeService.Credentials = new WebCredentials("user@domain", "pwd", "domain");
}
catch (Exception ex)
{
    throw new Exception(string.Format("Credentials:" +  ex));
}

//Send a mail
try
{
    EmailMessage message = new EmailMessage(exchangeService);
    message.Subject = "Test";
    message.Body = "Test";
    message.ToRecipients.Add("destination@domain");
    message.Save();
    message.Send();
}
catch (Exception ex)
{
    throw ex;
}

J'ai lu d'autres articles sur ce site concernant ce problème, mais ils n'ont pas pu résoudre mon problème.

25
GwenGuts

Essayez de changer ceci:

 exchangeService.Credentials = new WebCredentials("user@domain", "pwd", "domain");

en cela:

 exchangeService.Credentials = new WebCredentials("user", "pwd", "domain");

Parfois, les informations d'identification de connexion dépendent de la façon dont Exchange/Active Directory est configuré. Il peut s'agir de l'utilisateur @ domaine ou de domaine\utilisateur

38
Carlos Landeras

Il m'a fallu beaucoup de temps pour trouver une solution au même problème. Dans mon cas, je devais ajouter au répertoire virtuel EWS sous le site IIS la liste des URL autorisées. Accédez à la gestion IIS, cliquez sur l'EWS sous le site Web par défaut, puis double-cliquez sur le filtrage des demandes. Accédez à l'onglet URL et, à droite, cliquez sur Autoriser l'URL. Entrez les URL par lesquelles vous invoquerez le service, par exemple example.com/ews/ ou server.example.com/ews/

De plus, en raison de problèmes similaires, j'avais besoin d'ajouter tous les hôtes (*) à l'hôte de confiance winrm (par défaut, il n'avait que l'IP locale répertoriée).

HTH.

2
KirilStankov