#c #exchange-server #mapi
Вопрос:
Я хотел бы рассчитать возраст сообщений в почтовом ящике Exchange, чтобы убедиться, что они пролежат там не менее минуты, прежде чем наша программа (C , MAPI) обработает их. Таким образом, у спам-фильтра, который мы используем, должно быть достаточно времени, чтобы выполнить свою работу.
Поскольку время на компьютере, на котором работает наша программа, может отличаться от времени, используемого сервером Exchange, наша программа должна считывать время сервера через MAPI.
Есть ли для этого элегантное решение? Один из способов, который я могу придумать, — это изменить какой-то элемент и немедленно прочитать его PR_LAST_MODIFICATION_TIME, но я бы хотел этого избежать.
Редактировать:
Наша программа представляет собой пакетное задание, которое выполняется каждые 10 минут и считывает почтовый ящик журнала.
Ответ №1:
Я предполагаю, что вы получаете уведомление о событии MAPI, когда сообщение поступает в почтовый ящик Exchange. Я бы предложил поместить эти сообщения в очередь и подождать n
несколько секунд (например, 60 секунд) перед обработкой сообщения. Поскольку время зависит от события уведомления, не будет никаких проблем с перемещением часов между компьютерами.
При запуске вашего приложения вы будете вынуждены сделать это снова для существующих сообщений, но я бы не подумал, что это создаст проблему.
Ответ №2:
Вы можете использовать PR_MESSAGE_DELIVERY_TIME
.
Согласно MSDN:
PR_MESSAGE_DELIVERY_TIME
Свойство описывает время хранения сообщения на сервере, а не время загрузки, когда поставщик транспорта скопировал сообщение с сервера в локальное хранилище.
Кроме того, если ваше решение все равно работает на клиенте, почему бы в первую очередь не использовать время клиента? Неправильные часы или нет, для относительного времени (например, «через минуту после …») это не должно иметь значения.