【问题标题】:Making Outlook server side rule using C#使用 C# 制作 Outlook 服务器端规则
【发布时间】:2019-12-03 08:38:42
【问题描述】:

我有一个奇怪的问题。我为 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# vsto outlook-addin rules


    【解决方案1】:

    您需要为服务器调用更新。 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

    【讨论】:

    • 我不明白它是如何工作的。有关于 C++ 的资料。但是如何在 C# 中实现它?我正在尝试这种方式ExchangeService.UpdateInboxRules(IEnumerable<CreateRuleOperation>, false); 但我认为我不明白它。并出现错误:`严重性代码描述项目文件行抑制状态抑制状态错误 CS0119 IEnumerable 是一种类型,在给定上下文中无效`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2019-08-28
    • 2021-07-29
    相关资源
    最近更新 更多