Как я могу получить доступ к сообщению Outlook, используя уникальный и стабильный идентификатор? - PullRequest
4 голосов
/ 26 июня 2010

Я создаю приложение, которое анализирует почтовые сообщения Outlook, сохраняет проанализированную информацию, а затем позволяет пользователю открывать сообщения, соответствующие определенным критериям.

Я ожидал, что извлеку идентификатор сообщения из каждого электронного письма, сохраню его в своей базе данных, а затем попрослю Outlook открыть сообщение, предоставив ему идентификатор сообщения на более позднем этапе. Однако может показаться, что я что-то упустил.

Через API взаимодействия с Outlook я могу получить EntryID, но, насколько я могу судить, EntryID гарантированно стабилен только в пределах определенной папки (или, возможно, данного хранилища). Если сообщение перемещено в другую папку, EntryID может измениться. Кроме того, API требуют предоставления StoreID при поиске сообщения по EntryID. Опять же, если сообщение перемещается между хранилищами, эта информация предположительно будет недействительной.

Я видел множество продуктов, связанных с Office, которые, кажется, работают примерно так, как я описал выше. Как я могу сделать эффективный поиск сообщения, которое доступно для Outlook, независимо от магазинов и т. Д.? 1007

В настоящее время мой план резервного копирования заключается в том, чтобы хранить информацию EntryID и StoreID для каждого сканируемого идентификатора Message, а затем пробовать все различные комбинации EntryID / StoreID, которые я записал для данного MessageID, до тех пор, пока одно из них не будет успешным. Но это похоже на работу, которую Outlook уже должен знать, как выполнить для меня.

Спасибо

-Patrick

1 Ответ

2 голосов
/ 26 июня 2010

«Но это похоже на работу, которую Outlook уже должен знать, как выполнить для меня»

Должен. Но это не так. По крайней мере, когда я использовал API, я не нашел ни одного очевидного. Возможно, причина довольно проста: Message-ID не имеет смысла для самого Outlook, поэтому сохранение его как свойства никогда не было реализовано в продукте.

Теперь, я думаю, самый очевидный способ - это делать то, что вы уже делаете, т.е. хранение связей между Message-ID и StoreID - парами EntryID. Это позволит вам быстро получить доступ к нужной электронной почте, не просматривая список каждой сохраненной почты. Теперь вы, очевидно, должны проверить, является ли идентификатор сообщения все еще правильным, а если нет - циклически проходить по каждой почте.

Кстати, я не очень хорошо понимаю, почему вы храните несколько пар StoreID - EntryID для каждого Message-ID. Я полагаю, что почта будет храниться только один раз в Outlook, поэтому достаточно одной пары на Message-ID. Если эта пара устарела (почта перемещена в другую папку / хранилище), вы просто обновляете ее.

Примечание: не будет ли проще и быстрее получить доступ к свойствам CreationTime и MailItem.SenderEmailAddress? Было бы странно видеть две разные почты, разделяющие эти свойства, так что это какой-то способ уникальной идентификации почты, без необходимости вручную извлекать ID сообщения.

...