質問

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

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

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

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

役に立ちましたか?

解決

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

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

他のヒント

PR_MESSAGE_DELIVERY_TIME を使用できます。

MSDN

  

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top