quinta-feira, 18 de outubro de 2012

Removendo-mail de entrada no MS Exchange, C # Exemplo


O objetivo de um de nossos projetos foi manipulador MS Exchange para o processamento de e-mail de entrada.

A fonte básica de conhecimento era este artigo "Desenvolvimento de Coletores de eventos gerenciados / Ganchos para o Exchange Server usando loja C #" por Logu Krishnan, publicado para o endereço [http://www.codeproject.com/csharp/CsManagedEventSinksHooks.asp], e também exemplos de Microsoft Exchange SDK.

Utilizamos eventos síncronos e criou o manipulador, que é acionado em caso OnSyncSave. O manipulador cria registro de atividade no Microsoft CRM e, em seguida, remove a mensagem no banco de dados do Exchange antes do compromisso:

public void OnSyncSave (IExStoreEventInfo pEventInfo, string bstrURLItem, iFlags int) {
try {
if (iFlags == ((int) EVT_SINK_FLAGS.EVT_SYNC_COMMITTED + (int) EVT_SINK_FLAGS.EVT_IS_DELIVERED)) {

ProcessMessage (pEventInfo, bstrURLItem, iFlags);

}

}

catch (Exception ex) {

log.Debug (ex.Message + "\ n" ex.StackTrace +);

}

finally {

LogManager.Shutdown ();

}
}

Para depuração manipuladores de câmbio - é o conveniente extremamente usar log4net sistema em RollingLogFileAppender ou RemoteAppender modos (por exemplo múltiplo de objetos COM +). Você pode ler mais sobre este assunto aqui http://logging.apache.org/log4net/
Para que a remoção de correio manipulador de entrada, é necessário dar direitos apropriados para o usuário, em que conta a aplicação COM + executa o manipulador. Estes são direitos sobre a mudança da informação em caixas de utilizador para quem está registrado (Windows Server 2003: Active Directory Usuários e Computadores -> Usuários -> Propriedades (por conta de aplicação COM +) -> Exchange avançadas -> Direitos caixa de correio ). E agora o código:

private void DeleteMessage (string bstrURLItem) {
try {

ADODB.Connection OCN = ADODB.Connection nova ();

oCn.Provider = "exoledb.datasource";

oCn.Open (bstrURLItem, "", "", -1);

if (oCn.State == 1) {

log.Debug ("Conexão bom");

}

else {

log.Debug ("Bad Connection");

}

ADODB.Record rec = new ADODB.Record ();

rec.Open (bstrURLItem, OCN,

ADODB.ConnectModeEnum.adModeReadWrite,

ADODB.RecordCreateOptionsEnum.adFailIfNotExists,

ADODB.RecordOpenOptionsEnum.adOpenSource,

"", "");

rec.DeleteRecord (bstrURLItem, false);

rec.Close ();

oCn.Close ();

rec = null;

OCN = null;

}

catch (Exception ex) {

log.Debug (ex.Message + "\ n" ex.StackTrace +);

}
}

Feliz de personalização!
Boris Makushkin...

Nenhum comentário:

Postar um comentário