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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top