protected override void InternalProcessRecord() { TaskLogger.LogEnter(); try { base.InternalProcessRecord(); if (!base.HasErrors) { ADUser user = this.DataObject as ADUser; ExchangePrincipal mailboxOwner = ExchangePrincipal.FromADUser(base.SessionSettings, user); using (MailboxSession mailboxSession = MailboxSession.OpenAsAdmin(mailboxOwner, CultureInfo.InvariantCulture, "Client=Management;Action=Disable-ServiceEmailChannel")) { using (Folder folder = Folder.Bind(mailboxSession, DefaultFolderType.Root)) { StoreObjectId receiveFolder = mailboxSession.GetReceiveFolder("IPM.Note.Custom.ServiceEmail"); mailboxSession.ClearReceiveFolder("IPM.Note.Custom.ServiceEmail"); StoreObjectId receiveFolder2 = mailboxSession.GetReceiveFolder("IPM.Note.Custom.ServiceEmail"); if (receiveFolder != null && (receiveFolder2 == null || !receiveFolder2.Equals(receiveFolder))) { using (Folder folder2 = Folder.Bind(folder.Session, receiveFolder)) { if ((string)folder2[StoreObjectSchema.DisplayName] != null && (string)folder2[StoreObjectSchema.DisplayName] == "Service E-Mail") { folder.DeleteObjects(DeleteItemFlags.HardDelete, new StoreId[] { receiveFolder }); } } } } } } } catch (StorageTransientException ex) { TaskLogger.LogError(ex); base.WriteError(ex, ErrorCategory.ReadError, this.DataObject); } catch (StoragePermanentException ex2) { TaskLogger.LogError(ex2); base.WriteError(ex2, ErrorCategory.InvalidOperation, this.DataObject); } finally { TaskLogger.LogExit(); } }
private RuleEvaluationContext CreateEvaluationContext(StoreDriverDeliveryEventArgsImpl deliveryEventArguments) { MailboxSession mailboxSession = deliveryEventArguments.MailboxSession; string className = deliveryEventArguments.ReplayItem.ClassName; StoreObjectId storeObjectId = mailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox); bool flag = deliveryEventArguments.DeliverToFolder != null; if (!string.IsNullOrEmpty(className)) { StoreObjectId receiveFolder = mailboxSession.GetReceiveFolder(className); if (receiveFolder != null && !receiveFolder.Equals(storeObjectId)) { deliveryEventArguments.ShouldRunMailboxRulesBasedOnDeliveryFolder = true; deliveryEventArguments.DeliverToFolder = receiveFolder; } } bool flag2 = false; if (deliveryEventArguments.ShouldRunMailboxRulesBasedOnDeliveryFolder && deliveryEventArguments.DeliverToFolder != null && !deliveryEventArguments.DeliverToFolder.Equals(storeObjectId)) { flag2 = true; storeObjectId = StoreId.GetStoreObjectId(deliveryEventArguments.DeliverToFolder); } bool processingTestMessage = this.testMessageConfig.ReportToAddress.IsValidAddress && (this.testMessageConfig.LogTypes & LogTypesEnum.InboxRules) != LogTypesEnum.None; long mimeStreamLength = deliveryEventArguments.MailItem.MimeStreamLength; Folder folder = null; RuleEvaluationContext ruleEvaluationContext = null; try { folder = Folder.Bind(mailboxSession, storeObjectId, RuleEvaluationContextBase.AdditionalFolderProperties); ruleEvaluationContext = RuleEvaluationContext.Create(this.server, folder, deliveryEventArguments.ReplayItem, mailboxSession, (string)deliveryEventArguments.MailRecipient.Email, deliveryEventArguments.ADRecipientCache, mimeStreamLength, processingTestMessage, this.testMessageConfig.ShouldExecuteDisabledAndInErrorRules, deliveryEventArguments.MailItemDeliver); ruleEvaluationContext.TraceDebug(string.Format("Initial folder name: {0}, ID: {1}, requested by previous agent: {2}, overridden by receive-folder table: {3}", new object[] { folder.DisplayName, folder.Id, flag, flag2 })); } finally { if (ruleEvaluationContext == null && folder != null) { folder.Dispose(); folder = null; } } return(ruleEvaluationContext); }