В целом последовательность действий / звонков выглядит хорошо.Но получатели должны быть сопоставлены с адресной книгой.И я бы рекомендовал начать с разбивки строк кода с несколькими точками.Таким образом, все базовые 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
Кроме того, я бы порекомендовал проверить пример кода, который работает корректно для других: