Lettura dell'ora del server Exchange tramite MAPI
-
05-07-2019 - |
Domanda
Vorrei calcolare l'età dei messaggi in una cassetta postale di Exchange per assicurarmi che rimangano lì per almeno un minuto prima che il nostro programma (C ++, MAPI) li elabori. In questo modo il filtro antispam che utilizziamo dovrebbe avere abbastanza tempo per svolgere il suo lavoro.
Poiché l'ora sul PC in cui è in esecuzione il nostro programma potrebbe essere diversa dall'ora utilizzata dal server Exchange, il nostro programma deve leggere l'ora del server tramite MAPI.
Esiste una soluzione elegante ad esso? Un modo a cui riesco a pensare è di modificare un elemento e leggere immediatamente il suo PR_LAST_MODIFICATION_TIME , ma vorrei evitarlo.
Modifica
Il nostro programma è un processo batch che viene eseguito ogni 10 minuti e legge la cassetta postale del journal.
Soluzione
Suppongo che ricevi una notifica dell'evento MAPI quando il messaggio arriva nella cassetta postale di Exchange. Suggerirei di inserire questi messaggi in una coda e di attendere n
secondi (ad es. 60 secondi) prima di elaborare il messaggio. Poiché il tempo è relativo all'evento di notifica, non ci saranno problemi per quanto riguarda la deriva dell'orologio tra i computer.
All'avvio della tua applicazione saresti costretto a farlo di nuovo per i messaggi esistenti, ma non immaginerei che ciò possa costituire un problema.
Altri suggerimenti
Puoi utilizzare PR_MESSAGE_DELIVERY_TIME
.
Secondo MSDN :
La proprietà
PR_MESSAGE_DELIVERY_TIME
descrive l'ora in cui il messaggio è stato archiviato sul server, piuttosto che l'ora in cui il provider di trasporto ha copiato il messaggio dal server nell'archivio locale.
Diverso da quello - quando la soluzione viene eseguita sul client in ogni caso - perché non utilizzare l'ora del client in primo luogo? Orologio errato o no, per i tempi relativi (ad es. "Un minuto dopo ...") ciò non dovrebbe fare alcuna differenza.