首页 > 解决方案 > 使用 C# 制作 Outlook 服务器端规则

问题描述

我有一个奇怪的问题。我为 Outlook 制定了规则。这是非常简单的规则。如果主题中有特定单词,则将电子邮件移动到另一个文件夹。我们也有 Exchange 服务器。我希望这条规则在服务器端起作用。问题是,当我手动创建相同的规则时,它会到达服务器。但是,如果我以编程方式创建此规则,那么 OWA 会告诉我这是 Outlook 规则(并且当 Outlook 关闭时它不起作用)。但是,如果我将转到 Outlooks 规则并按下以编程方式创建的规则(更改>完成>应用),那么服务器将取消它作为服务器端。如何以编程方式按下“应用”按钮(就像我会手动操作一样)?因为似乎只有应用按钮告诉服务器它可以是服务器端规则。所以代码是:

ruleName = FolderName;
                    session = app.Session;
                    store = session.DefaultStore;
                    rules = store.GetRules();

                    if (!RuleExist(ruleName, rules))
                    {
                        rule = rules.Create(ruleName, Outlook.OlRuleType.olRuleReceive);
                        ruleConditions = rule.Conditions;
                        subjectTextRuleCondition = ruleConditions.Subject;
                        subjectTextRuleCondition.Text = new string[] { "TEST" };
                        subjectTextRuleCondition.Enabled = true;
                        ruleActions = rule.Actions;
                        moveRuleAction = ruleActions.MoveToFolder;
                        moveRuleAction.Folder = INPRIS1_2;
                        moveRuleAction.Enabled = true;

                        //ruleActions.DesktopAlert.Enabled = true;

                        rules.Save(true);

提前谢谢。

经过大量测试后,我发现如果我将文件夹创建和规则创建分开,那么规则将在服务器端创建。它是怎么回事:我创建了新的 Outlook 文件夹,然后在同一个按钮中添加了规则。在那之后,规则只有 Outlook 方面。现在情况如何:首先我创建文件夹(带有第一个按钮)。然后第二个我正在创建规则。然后 srever 看到他们在服务器端。

标签: c#vstooutlook-addinrules

解决方案


您需要为服务器调用更新。ExchangeService.UpdateInboxRules(IEnumereable<RuleOperation>, bool) 但请注意:

当您调用 UpdateInboxRules 方法时,EWS 会删除客户端发送规则。客户端发送规则存储在客户端上的规则文件夹关联信息 (FAI) 消息中,其他任何地方都没有。EWS 默认删除此规则 FAI 消息,基于 Outlook 将重新创建它的预期。但是,Outlook 无法重新创建不作为扩展规则存在的规则,并且客户端发送规则也不作为扩展规则存在。结果,这些规则丢失了。我们建议您在设计解决方案时考虑这一点。

来源:https ://docs.microsoft.com/en-gb/dotnet/api/microsoft.exchange.webservices.data.exchangeservice.updateinboxrules?view=exchange-ews-api


推荐阅读