【问题标题】:Automatically create rule in Outlook c#在 Outlook c# 中自动创建规则
【发布时间】:2015-07-02 13:18:13
【问题描述】:

我需要通过 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 中打开规则窗口 - 勾选和取消勾选复选框并保存 - 规则运行正确。 - 注意:如果我只更改名称,而不是取消勾选并重新勾选复选框,这将不起作用。 - 我试图通过强制这种行为的代码中的 hack 来复制它,但该规则不起作用。

我想知道您在 Outlook 中使用规则界面时是否缺少某些设置?

非常欢迎任何建议。

谢谢

【问题讨论】:

  • 也许你应该尝试反向工作......在outlook中创建一个规则,然后在c#中枚举并检查它......然后你可以看到有什么不同。
  • 嗨 - 感谢您的帮助。我已经做了这个比较,但不幸的是规则似乎是相同的。您是否知道 Outlook 规则向导本身是否可以对规则应用任何转换?两条规则中的设置似乎相同,这很奇怪。谢谢。

标签: c# email outlook


【解决方案1】:

我建议从释放代码中的所有底层 com 对象开始。使用完后,使用System.Runtime.InteropServices.Marshal.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 方法时是否出现异常?

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

【讨论】:

    【解决方案2】:

    我已经解决了这个问题。

    发件人电子邮件地址的域在 Outlook 中处于层次结构中,因此无法正确识别。我已包含用户的所有电子邮件地址,现在该规则有效。

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 2016-09-28
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多