2

プログラム (C++、MAPI) がメッセージを処理する前に、Exchange メールボックス内のメッセージの経過時間を計算して、メッセージが少なくとも 1 分間そこに留まっていることを確認したいと考えています。このようにして、私たちが使用するスパム フィルターは、その仕事をするのに十分な時間を確保する必要があります。

プログラムを実行する PC の時刻は、Exchange サーバーが使用する時刻と異なる場合があるため、プログラムは MAPI を介してサーバー時刻を読み取る必要があります。

それに対するエレガントな解決策はありますか?私が考えることができる1つの方法は、一部のアイテムを変更してすぐにそのPR_LAST_MODIFICATION_TIMEを読み取ることですが、それは避けたいと思います。

編集:
私たちのプログラムは、10 分ごとに実行され、ジャーナル メールボックスを読み取るバッチ ジョブです。

4

2 に答える 2

1

メッセージが Exchange メールボックスに到着すると、MAPI イベント通知を受け取っていると思います。これらのメッセージをキューにプッシュし、n数秒 (たとえば 60 秒) 待ってからメッセージを処理することをお勧めします。時間は通知イベントに関連しているため、コンピュータ間のクロック ドリフトに関して問題はありません。

アプリケーションの起動時に、既存のメッセージに対してこれを再度行う必要がありますが、これが問題になるとは思いません。

于 2008-10-08T01:01:32.600 に答える
0

使用できますPR_MESSAGE_DELIVERY_TIME

MSDNによると:

このPR_MESSAGE_DELIVERY_TIMEプロパティは、トランスポート プロバイダーがメッセージをサーバーからローカル ストアにコピーしたときのダウンロード時間ではなく、メッセージがサーバーに格納された時間を示します。

それ以外に、とにかくソリューションがクライアントで実行される場合、最初にクライアント時間を使用しないのはなぜですか? 時計が正しくないかどうかに関係なく、相対時間 (たとえば、「1 分後 ...」) については、違いはありません。

于 2008-10-07T12:25:37.323 に答える