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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top