在Outlook c#中自动创建规则

本文关键字:创建 规则 Outlook | 更新日期: 2023-09-27 18:00:57

我需要通过C#在Microsoft Outlook中创建一组规则。我在网上找到了很多文档,但不幸的是,它对我不起作用

我使用以下函数创建规则:

{
           Outlook.Application  OutlookApplication = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
            Outlook.MAPIFolder OutlookInbox = (Outlook.MAPIFolder)OutlookApplication.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            Outlook.Rules rules = null;
            try
            {
                rules = OutlookApplication.Session.DefaultStore.GetRules(); //Gets list of outlook rules
            }
            catch
            {
                Debug.WriteLine("Could not obtain rules collection.");
                return;
            }
            string ruleName = "TestRule";
            Outlook.Rule rule = rules.Create(ruleName, Outlook.OlRuleType.olRuleReceive);  //Creates new rule in collection
            rule.Name = ruleName;
            //From condition
            rule.Conditions.From.Recipients.Add("allixhd@gmail.com");
            rule.Conditions.From.Enabled = true;
            //Subject condition
            rule.Conditions.Subject.Text = new string[] { "#test" };
            rule.Conditions.Subject.Enabled = true;
            //Move action   
            Outlook.MAPIFolder ruleFolder = OutlookInbox.Folders["TestFolder"]; //Gets the folder with name TestFolder
            rule.Actions.MoveToFolder.Folder = ruleFolder;
            rule.Actions.MoveToFolder.Enabled = true;
            rule.Enabled = true;
            //Save rules
            try
            {
                rules.Save(true);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

我面临的问题是在我的Outlook实例中成功创建了规则。我可以在Outlook中打开"规则"窗口,并且可以查看我的规则。当我打开规则时,所有设置都显示正确但是当我运行规则时,它不起作用。

如果我在Outlook中手动创建一个相同的规则,它确实有效。

我还发现了以下内容:-通过我的C#函数在Outlook中创建规则-在Outlook中打开规则窗口-勾选和取消勾选复选框并保存-规则运行正确。-注意:如果我只更改名称,而不是取消复选框的复选框,这是不起作用的。-我试图通过在代码中进行黑客攻击来复制这种行为,但规则没有奏效。

我想知道当你在Outlook中使用规则界面时,是否有我缺少的一些设置?

欢迎提出任何建议。

感谢

在Outlook c#中自动创建规则

我已经解决了这个问题。

发件人电子邮件地址的域位于outlook中的层次结构中,因此无法正确识别。我已经包含了用户的所有电子邮件地址,现在规则起作用了。

我建议从释放代码中的所有底层com对象开始。使用系统。运行时。InteropServices。元帅ReleaseComObject,在使用完Outlook对象后释放它。然后在Visual Basic中将变量设置为Nothing(在C#中为null(,以释放对该对象的引用。

要释放所有COM对象,您需要断开调用链,并在单独的代码行上声明每个属性和方法调用。

 OutlookApplication.Application.ActiveExplorer().Session.GetDefaultFolder

不需要调用Application类的Application属性。您已经获得了Application类的一个实例。

此外,不需要调用Application类的ActiveExplorer方法。可以使用Application类的Session属性或GetNamespace方法。查看代码并释放所有基础COM对象。

   rules.Save(true);

调用Save方法时是否出现异常?

无论如何,我建议手动创建一个规则,然后探索其属性,以编程方式创建相同的规则。