myItem.Id, это уникальный для всех систем - PullRequest
0 голосов
/ 29 марта 2020

Я использую часть C# кода в этой ссылке для доступа к моему серверу Exchange 2010 через EWS API 2.0. Теперь мы переносим почтовый ящик в облако и все электронные письма в папке «Входящие» и подпапках вместе с ним.

Мой вопрос: когда это произойдет, останется ли значение myItem.Id одинаковым для каждого письма? Администратор Exchange говорит, что он будет уникальным для всех серверов Exchange. Но я не нашел доказательств этого из тех испытаний, которые я провел до сих пор. Эти электронные письма поступают в базу данных, и когда почтовый ящик переносится в облако, приложение, которое обрабатывает эти электронные письма, будет видеть их как новые электронные письма, поскольку myItem.Id не является уникальным для обеих систем из-за миграции.

1 Ответ

0 голосов
/ 30 марта 2020

Мой вопрос: когда это произойдет, останется ли значение myItem.Id одинаковым для каждого письма?

Нет, не будет, если сообщение просто перемещается между папками, Id изменится. EWSid основан на базовом Exchange LongTermId https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcdata/8796d8f9-0052-4a5a-ab8e-e780b9c8a6bb. Таким образом, он содержит информацию как FolderId, так и MessageId (здесь задействовано значение глобального счетчика) и некоторые EWS, указывающие c флаги. По сути, это локатор, поэтому он должен быть глобально уникальным, но в Office365 меняется основная информация о хранилище (которая влияет на часть FolderId этого идентификатора), поэтому также изменяется и ewsId. Office365 предлагает immutableid https://docs.microsoft.com/en-us/graph/outlook-immutable-id, но вам нужно использовать API Graph, чтобы они не перенесли их обратно в EWS.

Для вашей миграции вы можете рассмотреть возможность создания собственного настраиваемого свойства для элементов так что вы все равно можете найти их после миграции с помощью поиска (или использовать существующее свойство, такое как InternetMessageId или PidtagSearchkey)

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