mardi 23 octobre 2012
Suppression de courrier entrant dans MS Exchange, C # Exemple
Le but de l'un de nos projets était MS Exchange gestionnaire pour traiter le courrier entrant.
La principale source de connaissance était présent article «Développer Récepteurs d'événements gérés / Crochets pour magasin Exchange Server en utilisant C #" par Logu Krishnan, publié à l'adresse [http://www.codeproject.com/csharp/CsManagedEventSinksHooks.asp], et aussi exemples de Microsoft Exchange SDK.
Nous avons utilisé événements synchrones et créé le gestionnaire, qui tire sur l'événement OnSyncSave. Le gestionnaire crée enregistrement d'activité dans Microsoft CRM, puis supprime le message dans la base de données Exchange avant l'engagement:
public void OnSyncSave (IExStoreEventInfo pEventInfo, chaîne 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 ();
}
}
Pour Exchange gestionnaires de débogage - c'est la pratique d'utiliser log4net extrêmement système en mode RollingLogFileAppender ou RemoteAppender (par exemple multiple de COM + objets). Vous pouvez en lire plus à ce sujet ici http://logging.apache.org/log4net/
Pour permettre l'évacuation gestionnaire de messagerie entrant, il est nécessaire de donner des droits propres à l'utilisateur, le compte sous lequel l'application COM + exécute le gestionnaire. Ce sont des droits sur le changement de l'information dans les boîtes utilisateur pour lesquels elle est enregistrée (Windows 2003 Server: Utilisateurs et ordinateurs Active Directory -> Utilisateurs -> Propriétés (pour le compte de l'application COM +) -> Avancé - Échange des droits de boîte aux lettres> ). Et maintenant le code:
private void DeleteMessage (chaîne bstrURLItem) {
try {
ADODB.Connection = new ADODB.Connection OCN ();
oCn.Provider = "exoledb.datasource";
oCn.Open (bstrURLItem, "", "", -1);
if (oCn.State == 1) {
Log.DEBUG («bonne connexion");
}
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 +);
}
}
Bonne personnalisation!
Boris Makushkin...
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire