Используйте python для создания правила в Outlook из адреса электронной почты отправителя. - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь создать правила для перемещения писем из длинного списка отправителей в определенные папки.Например, если я получаю электронное письмо от john@email.com, я хочу, чтобы оно было перемещено из «Входящих» в «workstuff \ John» (john - подпапка workstuff).

Я использую для этого comtypes.clients и python, потому что я нашел похожий пост ( Установка свойства с помощью win32com ), в котором один из ответов использует comtypes.clients в python,Я также использую https://docs.microsoft.com/en-us/office/vba/outlook/how-to/rules/create-a-rule-to-move-specific-e-mails-to-a-folder в качестве ориентира.

import comtypes.client

o = comtypes.client.CreateObject("Outlook.Application")
rules = o.Session.DefaultStore.GetRules()
rule = rules.Create("Test", 0)
condition = rule.Conditions
condition.From.Recipients.Add(str("fabracht"))
condition.From.Recipients.ResolveAll

#.From.Recipients("fabracht@gmail.com")
condition.Enabled = True
root_folder = o.GetNamespace('MAPI').Folders.Item(1)
dest_folder = root_folder.Folders["Evergreen1"].Folders["Chemistry"]

move = rule.Actions.MoveToFolder
move.__MoveOrCopyRuleAction__com__set_Enabled(True)
move.__MoveOrCopyRuleAction__com__set_Folder(dest_folder)

rules.Save()

Мне удалось создать правило, которое отображается в перспективе.Но в правиле отсутствует часть «от».В основном это говорит:

«Применить это правило после прибытия сообщения. Переместить его в папку john».

Я ожидал, что правило будет:

"Применить это правило послесообщение приходит от john@email.com Переместить его в папку john "

1 Ответ

1 голос
/ 11 июля 2019

Статья , упомянутая в вашем сообщении, содержит следующий код для обработки части From:

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

Код должен выглядеть следующим образом:

import comtypes.client

o = comtypes.client.CreateObject("Outlook.Application")
rules = o.Session.DefaultStore.GetRules()
rule = rules.Create("Test", 0)
condition = rule.Conditions
condition.From.Recipients.Add(str("fabracht"))
condition.From.Recipients.ResolveAll

oFromCondition = oRule.Conditions.From 
oFromCondition.Enabled = True 
oFromCondition.Recipients.Add("john@email.com") 
oFromCondition.Recipients.ResolveAll 

#.From.Recipients("fabracht@gmail.com")
condition.Enabled = True
root_folder = o.GetNamespace('MAPI').Folders.Item(1)
dest_folder = root_folder.Folders["Evergreen1"].Folders["Chemistry"]

move = rule.Actions.MoveToFolder
move.__MoveOrCopyRuleAction__com__set_Enabled(True)
move.__MoveOrCopyRuleAction__com__set_Folder(dest_folder)

rules.Save()

...