Lendo a hora do servidor Exchange via MAPI
-
05-07-2019 - |
Pergunta
Eu gostaria de calcular a idade das mensagens em uma caixa de correio do Exchange para se certificar que ficar lá por pelo menos um minuto antes de nosso programa (C ++, MAPI) processa-los. Desta forma, o filtro de spam usamos deve ter tempo suficiente para fazer seu trabalho.
Como o tempo no PC onde nossos dirige o programa pode ser diferente do tempo utilizado pelo servidor Exchange, o nosso programa tem de ler o tempo servidor via MAPI.
Existe uma solução elegante para isso? Uma maneira que eu posso pensar é para modificar algum item e imediatamente ler a sua PR_LAST_MODIFICATION_TIME , mas eu gostaria de evitar isso.
Editar:
Nosso programa é um trabalho em lotes que é executado a cada 10 minutos e lê a caixa de correio diário.
Solução
Eu presumo que você está recebendo uma notificação de eventos MAPI quando a mensagem chega na caixa de correio do Exchange. Eu sugeriria empurrando essas mensagens em uma fila e esperando segundos n
(por exemplo 60s) antes de processar a mensagem. Desde o tempo é relativo ao evento de notificação não haverá problema com respeito à deriva relógio entre os computadores.
No arranque da sua aplicação, você seria obrigado a fazer isso por mensagens existente novamente, mas eu não poderia imaginar que isso iria representar um problema.
Outras dicas
Você pode usar PR_MESSAGE_DELIVERY_TIME
.
De acordo com MSDN :
A propriedade
PR_MESSAGE_DELIVERY_TIME
descreve o tempo que a mensagem foi armazenada no servidor, em vez do tempo de download quando o provedor de transporte copiou a mensagem do servidor para a loja local.
Outras que - quando suas corridas solução no cliente de qualquer maneira - por que não usar o horário do cliente em primeiro lugar? relógio incorreto ou não, por vezes relativos (por exemplo "um minuto depois ...") isso deve fazer nenhuma diferença.