Несколько неизменяемых идентификаторов для одного и того же почтового сообщения? - PullRequest
0 голосов
/ 07 октября 2019

Я пишу надстройку Office Outlook, которая имеет внешний интерфейс React и внутренний компонент ядра Dotnet. Я настроил подписку, используя Graph API для получения уведомлений, когда в папке SentItems появляется новое электронное письмо. Я хочу сопоставить электронное письмо из уведомления с информацией, которую я сохранил в базе данных.

К сожалению, идентификатор элемента изменяется при отправке электронного письма и перемещается из папки «Черновики» в SentItems, поэтому он не подходит для сопоставления. .

Существует новый ImmutableId, который не изменяется при перемещении электронной почты между папками. Мне не удалось получить библиотеку Office.js для создания ImmutableId, но существует метод translateExchangeIds , который при получении идентификатора элемента электронной почты возвращает неизменный идентификатор.

// convert to immutable
var translateRequest = new {
    inputIds = new string [] { mailMessage.ItemId },
    targetIdType = "restImmutableEntryId",
    sourceIdType = "restId"
};
var immutableResponse = await graphClient.PostAsJsonAsync("me/translateExchangeIds", translateRequest);
var immutableId = await immutableResponse.Content.ReadAsStringAsync();

Я могу использовать этот неизменяемый идентификатор для получения сообщения электронной почты, используя запрос графика:

await graphClient.GetAsync($"Users/cccccccc-dddd-eeee-ffff-ba0c52e56d99/Messages/AAkALgAAAAAAHYQDEapmEc2byACqAC-EWg0AQ-irLc2NFESKcGAhz1k_GBBDB5JMOwAA/

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

Есть ли лучший способ решения этой проблемы?

Обновление: моя теория заключается в том, что разница возникает из-за того, что неизменный идентификатор получен, когда элемент находится в разных папках? При преобразовании идентификатора элемента в неизменяемый идентификатор элемент все еще находится в папке «Черновики». Когда появляется уведомление о подписке, элемент находится в папке «Отправленные». Следующие ответы были получены на основе запросов, использующих разные неизменяемые идентификаторы, но идентифицирующих одно и то же сообщение - GUID myId - это пользовательское свойство, присоединенное к сообщению и используемое для сопоставления уведомления с информацией сообщения, хранящейся в локальной базе данных.

\"id\":\"AAkALgAAAAAAHYQDEapmEc2byACqAC-EWg0AQ-irLc2NFESKcGAhz1k_GAADB4INPAAA\",...,\"myId\":\"8baa904f-cf64-437c-878c-be4f71714aee\"

\"id\":\"AAkALgAAAAAAHYQDEapmEc2byACqAC-EWg0AQ-irLc2NFESKcGAhz1k_GAADB4INLwAA\",...,\"myId\":\"8baa904f-cf64-437c-878c-be4f71714aee\"

1 Ответ

0 голосов
/ 09 октября 2019

В Exchange Online черновик сообщения не совпадает с отправленным сообщением. Черновик сообщения после отправки не сохраняется обратно в почтовый ящик. После отправки сообщения Exchange создает копию доставленного сообщения обратно в отправленные элементы.

Поскольку это не то же самое сообщение, ImmutableId изменяется, и это ожидаемое поведение.

Для вашего сценария использование настраиваемого свойства - путь.

...