2008-10-07 3 views
2

Я хотел бы рассчитать возраст сообщений в почтовом ящике Exchange, чтобы убедиться, что они сидят там, по крайней мере, за минуту до того, как наша программа (C++, MAPI) обработает их. Таким образом, у spam filter we use должно быть достаточно времени для выполнения своей работы.Чтение времени сервера Exchange с помощью MAPI

Поскольку время на ПК, где выполняется наша программа, может отличаться от времени, используемого сервером Exchange, наша программа должна читать время сервера через MAPI.

Есть ли элегантное решение? Один из способов, я могу подумать, - это изменить какой-то элемент и сразу же прочитать его PR_LAST_MODIFICATION_TIME, но я бы хотел этого избежать.

Edit:
Наша программа представляет собой пакетное задание, которое работает через каждые 10 минут и читает почтовый ящик журнала.

ответ

1

Я предполагаю, что вы получаете уведомление о событии MAPI, когда сообщение прибывает в почтовый ящик Exchange. Я бы предложил нажать эти сообщения в очередь и ждать n секунд (например, 60 секунд) перед обработкой сообщения. Поскольку время относительно события уведомления не будет проблемой в отношении дрейфа часов между компьютерами.

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

0

Вы можете использовать PR_MESSAGE_DELIVERY_TIME.

По MSDN:

Свойство PR_MESSAGE_DELIVERY_TIME описывает время сообщения хранилось на сервере, а не время загрузки, когда поставщик транспорта скопированного сообщения от сервера на локальное хранилище.

Кроме этого - когда ваше решение работает на клиенте в любом случае - почему бы не использовать время клиента в первую очередь? Неправильные часы или нет, для относительных времен (например, «через минуту после ...») это не должно иметь никакого значения.