我需要通过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中使用规则界面时是否存在我缺少的设置?
非常欢迎任何建议。
由于
答案 0 :(得分:0)
我建议从释放代码中的所有底层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方法时会出现异常吗?
无论如何,我建议手动创建规则,然后探索其属性以编程方式创建相同的规则。
答案 1 :(得分:0)
我已经解决了这个问题。
From电子邮件地址的域位于outlook的层次结构中,因此无法正确识别。我已经包含了用户的所有电子邮件地址,现在该规则有效。