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);
        }