Чтение времени сервера Exchange через MAPI - PullRequest
2 голосов
/ 07 октября 2008

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

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

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

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

Ответы [ 2 ]

1 голос
/ 08 октября 2008

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

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

0 голосов
/ 07 октября 2008

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

Согласно MSDN :

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

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

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