Я борюсь с простой задачей, которая получает новые электронные письма в определенных папках в Exchange Online, устанавливает обработанную категорию, а затем сохраняет электронную почту.
Во-первых, я создаю разрешения для приложений следующим образом:
var app = ConfidentialClientApplicationBuilder.Create(_appConfig.ClientId)
.WithAuthority(AzureCloudInstance.AzurePublic,
_appConfig.Tenant)
.WithClientSecret(_appConfig.ClientSecret)
.Build();
AuthenticationResult authResultresult = null;
var ewsScopes = new[] {"https://outlook.office.com/.default"};
authResultresult = await app.AcquireTokenForClient(ewsScopes)
.ExecuteAsync();
затем я создаю Exchange-Client и использую созданный Oauth-Token для авторизации:
var result = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
result.KeepAlive = false;
result.DateTimePrecision = DateTimePrecision.Milliseconds;
result.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
result.UseDefaultCredentials = false;
var authResultresult = await CreateAppPermissions(_appConfig);
result.Credentials = new OAuthCredentials(authResultresult.AccessToken);
после этого я выдаю себя за SMTP-User с моей учетной записью mainSMTP
result.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _appConfig.SMTPMailAccount);
после этого я использую этот код для получения электронной почты с использованием известного идентификатора, добавляю для нее новую категорию и обновляю элемент следующим образом:
var itemsToStore = result.BindToItems(new []{newItemId}, props);
foreach (var itemToStore in itemsToStore)
{
itemToStore.Item.Categories.Add("Processed");
itemToStore.Item.Update(ConflictResolutionMode.AlwaysOverwrite, true);
}
Этот код ранее выдавал сообщение «Отказано в доступе. Проверьте учетные данные и повторите попытку. Не удается сохранить изменения, внесенные в элемент. - Исключение для Item.Update. После исследования я нашел это:
Office 365 API ErrorAccessDenied (доступ запрещен . Проверьте учетные данные и повторите попытку.)
и последовал предложенному решению, сняв флажок Иметь полный доступ к почтовому ящику пользователя.
После этого я получаю 401 несанкционированный доступ, когда звоню BindToItems. Было ли это шагом назад, чтобы убрать флажок?