Почтовое правило Outlook не работает правильно - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь создать пользовательское почтовое правило в Outlook.Правило перемещает почту с определенного адреса электронной почты в определенную папку.

Я делаю следующее:

public partial class Ribbon1{

    private Outlook.Folders allFolders;

    private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
    {
        Outlook.MAPIFolder inbox = ThisAddIn.app.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
        Outlook.MAPIFolder mainFolder = inbox.Parent;
        allFolders = mainFolder.Folders;
    }

    private void button2_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Rules rules = null;

        try
        {
            rules = ThisAddIn.app.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);
        rule.Name = ruleName;

        rule.Conditions.From.Recipients.Add("test12345@hotmail.com");
        rule.Conditions.From.Enabled = true;

        Outlook.MAPIFolder ruleFolder = allFolders["test1"];
        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.Когда я отправляю себя по адресу «test12345@hotmail.com», он не перемещает почту в папку «test1».

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 12 июня 2019

В целом последовательность действий / звонков выглядит хорошо.Но получатели должны быть сопоставлены с адресной книгой.И я бы рекомендовал начать с разбивки строк кода с несколькими точками.Таким образом, все базовые COM-объекты будут освобождены.Более того, это может привести к получению прав, поскольку каждый раз, вызывая одно и то же свойство, вы можете получить новый экземпляр объекта.Например:

rule.Conditions.From.Enabled = true;

Свойство Условия класса Rule возвращает объект коллекции RuleConditions, который представляет все доступные условия правила для правила.Таким образом, он должен быть выпущен мгновенно.Используйте System.Runtime.InteropServices.Marshal.ReleaseComObject , чтобы освободить объект Outlook, когда вы закончили его использовать.Затем установите переменную Nothing в Visual Basic (null в C #), чтобы освободить ссылку на объект.Подробнее об этом читайте в статье Систематическое высвобождение объектов .

Sub CreateRule()  
  Dim colRules As Outlook.Rules 
  Dim oRule As Outlook.Rule  
  Dim colRuleActions As Outlook.RuleActions  
  Dim oMoveRuleAction As Outlook.MoveOrCopyRuleAction  
  Dim oFromCondition As Outlook.ToOrFromRuleCondition  
  Dim oExceptSubject As Outlook.TextRuleCondition  
  Dim oInbox As Outlook.Folder  
  Dim oMoveTarget As Outlook.Folder 

  'Specify target folder for rule move action  
  Set oInbox = Application.Session.GetDefaultFolder(olFolderInbox)  
  'Assume that target folder already exists  
  Set oMoveTarget = oInbox.Folders("Dan")  

  'Get Rules from Session.DefaultStore object 
  Set colRules = Application.Session.DefaultStore.GetRules()  

  'Create the rule by adding a Receive Rule to Rules collection 
  Set oRule = colRules.Create("Dan's rule", olRuleReceive) 

  'Specify the condition in a ToOrFromRuleCondition object  
  'Condition is if the message is sent by "DanWilson"  
  Set oFromCondition = oRule.Conditions.From  
  With oFromCondition  
      .Enabled = True  
      .Recipients.Add ("DanWilson")  
      .Recipients.ResolveAll  
  End With 

  'Specify the action in a MoveOrCopyRuleAction object  
  'Action is to move the message to the target folder  
  Set oMoveRuleAction = oRule.Actions.MoveToFolder  
  With oMoveRuleAction 
    .Enabled = True  
    .Folder = oMoveTarget  
  End With  

  'Specify the exception condition for the subject in a TextRuleCondition object  
  'Exception condition is if the subject contains "fun" or "chat"  
   Set oExceptSubject = oRule.Exceptions.Subject 

   With oExceptSubject  
     .Enabled = True  
     .Text = Array("fun", "chat")  
   End With  

   'Update the server and display progress dialog  
   colRules.Save  
 End Sub

Кроме того, я бы порекомендовал проверить пример кода, который работает корректно для других:

...