Использование Microsoft Graph для получения локальной почты с использованием C # - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь получить почту на месте, используя GraphServiceClient. Я получаю токен из сетевой учетной записи Microsoft, а затем использую этот токен для получения своих электронных писем. Но поскольку мои письма находятся в помещении, я не могу получить к ним доступ, так как он выдает следующий код ошибки: «ResourceNotFound», «message»: «Ресурс не может быть обнаружен». Итак, как я могу изменить свой код, чтобы использовать тот же токен, который я получаю из Интернета и в локальной почте, используя GraphServiceClient (если это возможно).

public async Task<ActionResult> Inbox()
{
            string token = await GetAccessToken();
            if (string.IsNullOrEmpty(token))
            {
                // If there's no token in the session, redirect to Home
                return Redirect("/");
            }

            GraphServiceClient client = new GraphServiceClient(
                new DelegateAuthenticationProvider(
                    (requestMessage) =>
                    {
                        requestMessage.Headers.Authorization =
                            new AuthenticationHeaderValue("Bearer", token);

                        return Task.FromResult(0);
                    }));

                    var mailResults = await 
                     client.Me.MailFolders.Inbox.Messages.Request()
                                    .OrderBy("receivedDateTime DESC")
                                    .Select("subject,receivedDateTime,from")
                                    .Top(10)
                                    .GetAsync();

    return View(mailResults.CurrentPage);

}


public async Task<string> GetAccessToken()
        {
            string accessToken = null;

            // Load the app config from web.config
            string appId = ConfigurationManager.AppSettings["ida:AppId"];
            string appPassword = ConfigurationManager.AppSettings["ida:AppPassword"];
            string redirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"];
            string[] scopes = ConfigurationManager.AppSettings["ida:AppScopes"]
                .Replace(' ', ',').Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

            // Get the current user's ID
            string userId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;

            if (!string.IsNullOrEmpty(userId))
            {
                // Get the user's token cache
                SessionTokenCache tokenCache = new SessionTokenCache(userId, HttpContext);

                ConfidentialClientApplication cca = new ConfidentialClientApplication(
                    appId, redirectUri, new ClientCredential(appPassword), tokenCache.GetMsalCacheInstance(), null);

                // Call AcquireTokenSilentAsync, which will return the cached
                // access token if it has not expired. If it has expired, it will
                // handle using the refresh token to get a new one.
                IEnumerable<IAccount> accounts = await cca.GetAccountsAsync();
                IAccount fisrtAccount = accounts.FirstOrDefault();
                AuthenticationResult result = await cca.AcquireTokenSilentAsync(scopes, fisrtAccount);

                accessToken = result.AccessToken;
            }

            return accessToken;
}

1 Ответ

0 голосов
/ 15 января 2019

По умолчанию вы не можете получить доступ к любой предварительной информации с помощью Microsoft Graph. Единственным исключением является функция предварительного просмотра в Exchange 2016, которая позволяет прозрачно получать доступ к элементам календаря, почты и контактов.

Эта функция имеет ряд предварительных требований к инфраструктуре , поэтому я предлагаю вам сначала связаться с вашей командой по инфраструктуре, чтобы проверить их. После того, как эти предварительные условия созданы, вам не нужно менять какой-либо код с точки зрения приложения для доступа к контенту. Помните, что это функция предварительного просмотра, поэтому она не поддерживается для рабочих нагрузок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...