如何检查可应用于 Outlook 中的 mailItem 的所有规则

Posted

技术标签:

【中文标题】如何检查可应用于 Outlook 中的 mailItem 的所有规则【英文标题】:How to check all rules which can be applied to a mailItem in Outlook 【发布时间】:2012-07-12 00:12:06 【问题描述】:

我正在编写一个应用程序,它必须获取可以与规则匹配的项目。

//new messages goes here
void items_ItemAdd(object Item)
    
        //all rules
        Rules rules = Application.Session.DefaultStore.GetRules();

        Outlook.MailItem mail = (Outlook.MailItem)Item;

        if (mail != null)
        
            // I need to find out if mail matches with one of the rule. And handle in an appropriate way.
        
    

【问题讨论】:

【参考方案1】:

检查哪些规则适用于哪些项目的唯一方法是为每个MailItem 手动枚举Rule Conditions和excluding rule exceptions)。规则引擎通过执行您通过 Rule.Execute 定义的每个规则来工作 - 它不提供预览受影响项目的机制。

这是一个(未测试)示例,供参考如何匹配包含主题规则 (olConditionSubject)。您还需要处理other Rule Conditions types。

if (mail != null)

    foreach (Outlook.Rule rule in rules)
    
       foreach (Outlook.RuleCondition condition in rule.Conditions)
       
         if (condition is TextRuleCondition)
         
            Outlook.TextRuleCondition trc = condition as Outlook.TextRuleCondition;
            if (trc.ConditionType == Outlook.OlRuleConditionType.olConditionSubject)
            
              // TODO: handle Rule.Exceptions conditions
              bool containsSubject = mail.Subject.Contains(trc.Text);
            
         
       
    

【讨论】:

解决Rule Conditions 的复杂性 - 您必须逐个处理要支持的每个条件。我可以添加一个示例供参考。 见上面的例子——你可能还想检查规则是否启用Rule.Enabled并遵循规则执行顺序Rule.ExecutionOrder 我可以以某种方式遍历所有 rule.Conditions 吗?或者我需要为特定情况编写大量代码。

以上是关于如何检查可应用于 Outlook 中的 mailItem 的所有规则的主要内容,如果未能解决你的问题,请参考以下文章

Outlook VBA 代码仅适用于一台计算机

如何使用自定义协议从 Android 浏览器打开 Microsoft Outlook 应用程序?

如何在 ThisAddIn 类之外访问 VSTO Outlook 加载项中的应用程序属性?

表格边框未显示在Outlook桌面应用中,但在通过浏览器打开时在gmail和Outlook中可见

MS Outlook 宏删除选定的文本

淘汰赛:如何检查绑定是不是已应用于页面区域