Example #1
0
 private void CreateWorkItemForReply(FolderEvaluationResult result, RuleAction.Reply action, int actionIndex)
 {
     if (RuleUtil.IsSameUser(this.context, this.context.RecipientCache, this.context.Sender, this.context.Recipient))
     {
         this.context.TraceDebug("Do not generate reply to self.");
         return;
     }
     if (ObjectClass.IsDsn(this.context.Message.ClassName) || ObjectClass.IsMdn(this.context.Message.ClassName))
     {
         this.context.TraceDebug("Do not generate reply for Dsn or Mdn messages");
         return;
     }
     if ((this.context.Message.AutoResponseSuppress & AutoResponseSuppress.AutoReply) != AutoResponseSuppress.None)
     {
         this.context.TraceDebug("Do not generate reply since Auto-Reply is being suppressed on current message");
         return;
     }
     if (ObjectClass.IsApprovalMessage(this.context.Message.ClassName))
     {
         this.context.TraceDebug("Do not generate reply to approval message.");
         return;
     }
     if (this.context.LimitChecker.DoesExceedAutoReplyLimit())
     {
         return;
     }
     result.AddWorkItem(new ReplyWorkItem(this.context, action.ReplyTemplateMessageEntryID, action.ReplyTemplateGuid, action.Flags, actionIndex));
 }
Example #2
0
 private void CreateWorkItemForDelete(FolderEvaluationResult result, RuleAction.Delete action, int actionIndex)
 {
     result.ExitExecution = true;
     if (result.HasDeferredMoveOrCopy)
     {
         this.context.TraceDebug("Softly delete the message since it is moved/copied to external store");
         this.CreateWorkItemForDefer(result, action, actionIndex);
         result.TargetFolder = this.context.GetDeletedItemsFolder();
         return;
     }
     this.context.TraceDebug("Delete the message");
     result.TargetFolder = null;
     if (result.IsMessageDelegated)
     {
         this.context.TraceDebug("Message was delegated. No need to generate NRN.");
         return;
     }
     if (!this.context.Message.IsReadReceiptRequested)
     {
         this.context.TraceDebug("Read Receipt is not requested on the message.");
         return;
     }
     if (null == this.context.Message.Sender && null == this.context.Message.From && null == this.context.Message.ReadReceiptAddressee)
     {
         this.context.TraceDebug("No NRN recipient data, generation skipped.");
         return;
     }
     if (this.context.IsInternetMdnDisabled)
     {
         this.context.TraceDebug("MDNs are disabled on the mailbox, message deleted without NRN to sender.");
         return;
     }
     result.AddWorkItem(new DeleteWorkItem(this.context, actionIndex));
 }
Example #3
0
 private void CreateWorkItemForDelegate(FolderEvaluationResult result, RuleAction.Delegate action, int actionIndex)
 {
     if (RuleUtil.IsNullOrEmpty(action.Recipients))
     {
         this.context.TraceError("Delegate recipient list is empty");
         return;
     }
     result.AddWorkItem(new DelegateWorkItem(this.context, action.Recipients, actionIndex));
 }
Example #4
0
        private void CreateWorkItemForOofReply(FolderEvaluationResult result, RuleAction.OOFReply action, int actionIndex)
        {
            string className = this.context.Message.ClassName;

            if (ObjectClass.IsDsn(className) || ObjectClass.IsMdn(className))
            {
                this.context.TraceDebug("Do not generate OOF reply for Dsn or Mdn messages");
                return;
            }
            if ((this.context.Message.AutoResponseSuppress & AutoResponseSuppress.OOF) != AutoResponseSuppress.None)
            {
                this.context.TraceDebug("Do not generate OOF reply when Oof Reply is being suppressed");
                return;
            }
            if (ObjectClass.IsOfClass(className, "IPM.Note.Rules.ExternalOofTemplate.Microsoft") || ObjectClass.IsOfClass(className, "IPM.Note.Rules.OofTemplate.Microsoft"))
            {
                this.context.TraceDebug("Do not generate OOF reply for Oof Message");
                return;
            }
            if (ObjectClass.IsOutlookRecall(className) || ObjectClass.IsOfClass(className, "IPM.Recall.Report.Failure") || ObjectClass.IsOfClass(className, "IPM.Recall.Report.Success"))
            {
                this.context.TraceDebug("Do not generate OOF reply for outlook recall Message");
                return;
            }
            if (null == this.context.Message.Sender)
            {
                this.context.TraceDebug("Do not generate OOF reply for an unknown sender");
                return;
            }
            string routingType = this.context.Message.Sender.RoutingType;

            if (string.IsNullOrEmpty(routingType) || (!(routingType == "SMTP") && !(routingType == "EX") && !routingType.Equals("X400")))
            {
                this.context.TraceDebug <string>("Do not generate OOF reply for address type {0}", routingType ?? "<null>");
                return;
            }
            if (RuleUtil.IsNullOrEmpty(action.ReplyTemplateMessageEntryID))
            {
                this.context.TraceError("Replay template message id is empty");
                return;
            }
            bool?valueAsNullable = this.context.Message.GetValueAsNullable <bool>(ItemSchema.DelegatedByRule);

            if (valueAsNullable != null && valueAsNullable.Value)
            {
                this.context.TraceDebug("Do not generate OOF reply for messages delegated by rule.");
                return;
            }
            result.AddWorkItem(new OofReplyWorkItem(this.context, action.ReplyTemplateMessageEntryID, actionIndex));
        }
Example #5
0
        private DeferredActionWorkItem CreateWorkItemForDefer(FolderEvaluationResult result, RuleAction action, int actionIndex)
        {
            string provider = this.context.CurrentRule.Provider;
            DeferredActionWorkItem deferredActionWorkItem = result.GetDeferredActionWorkItem(provider);

            if (deferredActionWorkItem == null)
            {
                this.context.TraceDebug <string>("Create Deferred Action Message for provider {0}", provider);
                deferredActionWorkItem = new DeferredActionWorkItem(this.context, this.context.CurrentRule.Provider, actionIndex);
                result.AddWorkItem(deferredActionWorkItem);
            }
            deferredActionWorkItem.AddAction(action);
            return(deferredActionWorkItem);
        }
Example #6
0
        private void CreateWorkItemForInMailboxCopy(FolderEvaluationResult result, RuleAction.InMailboxCopy action, int actionIndex)
        {
            Folder folder;

            if (!this.context.TryOpenLocalStore(action.FolderEntryID, out folder))
            {
                this.context.TraceError <byte[]>("Could not bind to local folder {0}", action.FolderEntryID);
                this.context.MarkRuleInError(this.context.CurrentRule, action.ActionType, actionIndex, DeferredError.RuleError.NoFolder);
                return;
            }
            this.context.TraceDebug <string>("Copy to local folder {0}", folder.DisplayName);
            if (!result.HasCopyWorkItemTo(folder.Id))
            {
                result.AddWorkItem(new CopyWorkItem(this.context, folder, actionIndex));
                return;
            }
            this.context.TraceDebug("Duplicate copy to a folder will be ignored");
        }
Example #7
0
        private void CreateWorkItemForForward(FolderEvaluationResult result, RuleAction.Forward action, int actionIndex)
        {
            if (ObjectClass.IsDsn(this.context.Message.ClassName) || ObjectClass.IsMdn(this.context.Message.ClassName))
            {
                this.context.TraceDebug("Do not forward for Dsn or Mdn messages");
                return;
            }
            if (this.context.Message.Sensitivity == Sensitivity.Private)
            {
                this.context.TraceDebug("Do not forward private message");
                return;
            }
            object obj = this.context.Message.TryGetProperty(MessageItemSchema.RecipientReassignmentProhibited);

            if (obj is bool && (bool)obj)
            {
                this.context.TraceDebug("Do not forward message is recipient reassignment is prohibited");
                return;
            }
            if ((this.context.Message.AutoResponseSuppress & AutoResponseSuppress.AutoReply) != AutoResponseSuppress.None && RuleLoader.IsOofRule(this.context.CurrentRule))
            {
                this.context.TraceDebug("Do not forward message is auto reply is suppressed");
                return;
            }
            if (RuleUtil.IsNullOrEmpty(action.Recipients))
            {
                this.context.TraceError("Forward recipient list is empty");
                return;
            }
            if (!this.context.LimitChecker.CheckAndIncrementForwardeeCount(action.Recipients.Length))
            {
                this.context.TraceDebug(string.Concat(new object[]
                {
                    "Rule ",
                    this.context.CurrentRule.Name,
                    " is forwarding to ",
                    action.Recipients.Length,
                    " additional recipients, which reached the accumulated forwardee limit, evaluation skipped."
                }));
                return;
            }
            result.AddWorkItem(new ForwardWorkItem(this.context, action.Recipients, action.Flags, actionIndex));
        }
Example #8
0
 private void CreateWorkItemForTag(FolderEvaluationResult result, RuleAction.Tag action, int actionIndex)
 {
     result.AddWorkItem(new TagWorkItem(this.context, action.Value, actionIndex));
 }
Example #9
0
 private void CreateWorkItemForMarkAsRead(FolderEvaluationResult result, RuleAction.MarkAsRead action, int actionIndex)
 {
     result.AddWorkItem(new MarkAsReadWorkItem(this.context, actionIndex));
 }