Майкрософт.График.ServiceException Код: MailboxNotEnabledForRESTAPI

#graph #microsoft-graph-api #microsoft-graph-sdks #microsoft-graph-mail

#График #microsoft-graph-api #microsoft-graph-sdks #microsoft-graph-mail

Вопрос:

Может успешно получать электронные письма пользователя с помощью Graph Explorer или DeviceCodeProvider. DeviceCodeProvider

 IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
        .Create(clientId)
        .Build();

  Func<DeviceCodeResult, Task> deviceCodeReadyCallback = async dcr => await Console.Out.WriteLineAsync(dcr.Message);

  DeviceCodeProvider authProvider = new DeviceCodeProvider(publicClientApplication, scopes, deviceCodeReadyCallback);

  GraphServiceClient graphClient = new GraphServiceClient(authProvider);

  var messages = await graphClient.Me.Messages
    .Request()
    .Select("sender,subject")
    .GetAsync();
 

Не удалось получить электронные письма того же пользователя при использовании PublicClientApplicationBuilder с UsernamePasswordProvider или ConfidentialClientApplicationBuilder. Возврат графического API

Произошло исключение: CLR / Microsoft.График.ServiceException Исключение типа ‘Microsoft.График.В системе произошло исключение ServiceException.Частное.CoreLib.dll но не был обработан в пользовательском коде: ‘Code: MailboxNotEnabledForRESTAPI Сообщение: REST API еще не поддерживается для этого почтового ящика.

UsernamePasswordProvider

 IPublicClientApplication clientApp = PublicClientApplicationBuilder.Create(clientId)
    .WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
    .Build();
  UsernamePasswordProvider authProvider = new UsernamePasswordProvider(clientApp, scopes);
  GraphServiceClient graphClient = new GraphServiceClient(authProvider);
  String password = userPassword;
  System.Security.SecureString sec_pass = new System.Security.SecureString();
  Array.ForEach(password.ToArray(), sec_pass.AppendChar);
  sec_pass.MakeReadOnly();
  var me = await graphClient.Me.Messages.Request()
                  .WithUsernamePassword(userPrincipalName, sec_pass)
                  .Select("sender,subject")
                  .GetAsync();
 

ConfidentialClientApplicationBuilder

 var scopes = new[] { "https://graph.microsoft.com/.default" };

  var authority = $"https://login.microsoftonline.com/{tenantId}";
  var app = ConfidentialClientApplicationBuilder
      .Create(clientId)
      .WithClientSecret(clientSecret)
      .WithAuthority(new Uri(authority))
      .Build();

  var authenticationProvider = new ClientCredentialProvider(app);
  var graphClient = new GraphServiceClient(authenticationProvider);

  var user = await graphClient.Users[userPrincipalName].Request().GetAsync();
  var mailFolders = await graphClient.Users[user.Id].Messages.Request().GetAsync();
 

Созданная служба выполняется в серверной части. Из-за этого следует избегать всплывающего входа в систему. Что я сделал не так?пожалуйста, помогите. Заранее спасибо

Комментарии:

1. Вы уверены, что учетная запись, которую вы используете для входа в Graph Explorer, совпадает с учетной записью, используемой в UsernamePasswordProvider? Это рабочая учетная запись (учетная запись O365 или AAD) или личная учетная запись ( MSA )?

2. Используется та же учетная запись O365, что и tester@cortex8.onmicrosoft.com

3. Можете ли вы получить доступ к электронной почте этого почтового ящика с помощью Microsoft Graph Explorer или по-прежнему получаете ту же ошибку?

4. Я столкнулся с той же проблемой. Я пробовал много способов получить доступ: имя пользователя / пароль, поставщик кода устройства. Каждый раз я выполняю следующий код:<br/> await graphClient.Me.Events.Request().GetAsync(); <br/> Я столкнулся с этой проблемой.<br/> Я также пытался получить доступ к приложению. В этом случае я вижу только ошибку отказа в доступе. Но через Graph Explorer все работает отлично. Так что это должно быть несоответствие конфигурации.