Мы подписываемся на потоковые уведомления в MS Exchange 2016 следующим способом:
service.subscribeToStreamingNotificationsOnAllFolders(EventType.Copied,EventType.Created, EventType.Deleted, EventType.Modified, EventType.Moved, EventType.NewMail);
switch (itemEvent.getEventType()) {
case Deleted:
delete(mailbox, itemEvent.getItemId());
break;
case Moved:
try {
delete(mailbox, itemIdNoChangeKey(itemEvent.getOldItemId()));
} finally {
create(mailbox, Item.bind(service, itemIdNoChangeKey(itemEvent.getItemId())));
}
break;
case Modified:
update(mailbox, Item.bind(service, itemIdNoChangeKey(itemEvent.getItemId()), itemProp()));
break;
case Copied:
case Created:
create(mailbox, Item.bind(service, itemIdNoChangeKey(itemEvent.getItemId()), itemProp()));
break;
}
Иногда вышеуказанные вызовы выполняются успешно, но чаще всего Items.bind () завершается неудачно с помощью:
"Доступ запрещен. Проверьте учетные данные и повторите попытку., Процесс не смог получить правильные свойства., ErrorCode = 'ErrorAccessDenied'"
ИЛИ
"Указанный объектне был найден в хранилище., процессу не удалось получить правильные свойства., errorCode = 'ErrorItemNotFound' "
Это не факт, что
- учетные данные действительны иможет быть успешно использован для вызова service.findFolders (WellKnownFolderName.MsgFolderRoot, folderView);
- Мы используем олицетворение Exchange. Права олицетворения были назначены для всех почтовых ящиков.
- Якорный почтовый ящик установлен: service.getHttpHeaders (). Put ("X-AnchorMailbox", почтовый ящик);
- X-PreferServerAffinity установлен: service.getHttpHeaders (). Put ("X-PreferServerAffinity "," true ");
Может кто-нибудь сообщить, почему мы будем получать ошибки ErrorAccessDenied и ErrorItemNotFound? Это связано с обработкой сообщений или папок, связанных с системой Exchange? Как мы можем обработать эти элементы или если мы не можем, как их можно пропустить, не вызывая ненужную загрузку на сервере Exchange?