Python — comtypes (рабочий) против pywin32 (не работает) — использование python для создания правил Outlook

#python #outlook #com #pywin32 #comtypes

#python #outlook #com #pywin32 #comtypes

Вопрос:

(Windows 10, Office 365, Python 3.7, Pycharm)

Я могу успешно создать правило в Outlook с помощью comtypes:

 import comtypes.client

o = comtypes.client.CreateObject("Outlook.Application")
rules = o.Session.DefaultStore.GetRules()
oRule = rules.Create("Test_Rule", 0)

condition = oRule.Conditions

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

condition.Enabled = True
root_folder = o.GetNamespace('MAPI').Folders['x@outlook.at']
dest_folder = root_folder.Folders["Posteingang"]

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

rules.Save()
  

Я не могу заставить его работать с помощью pywin32. Когда я запускаю следующий код, я получаю сообщение об ошибке, и правило не может быть создано:

 import win32com.client as win32

o = win32.Dispatch("Outlook.Application")

caiok = o.GetNamespace("MAPI").Folders['x@outlook.at']

dest_folder = caiok.Folders["Posteingang"]
colRules = o.Session.DefaultStore.GetRules()
oRule = colRules.Create("New Rule10", 0)

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

oMoveRuleAction = oRule.Actions.MoveToFolder
oMoveRuleAction.Enabled=True
oMoveRuleAction.Folder=dest_folder

colRules.Save()
  

Ошибка:

 Traceback (most recent call last):
  File "D:/wwo/scrapbookIII.py", line 20, in <module>
    colRules.Save()
  File "<COMObject GetRules>", line 2, in Save
pywintypes.com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (4096, 'Microsoft Outlook', 'Mindestens eine Regel kann aufgrund von ungültigen Aktionen oder Bedingungen nicht gespeichert werden.', None, 0, -2147467259), None)
  

Что я делаю не так?

Ответ №1:

Python требует, чтобы скобки вызывали функцию. Итак, это ничего не дает:

 oFromCondition.Recipients.ResolveAll
  

Вам нужно:

 oFromCondition.Recipients.ResolveAll()
  

Комментарии:

1. Привет, Тим! Спасибо за информацию, но в рабочем примере мне не нужны были скобки.