Python-comtypes有效与pywin32无效-使用python创建Outlook规则

问题描述

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

我能够使用Comtype在Outlook中成功创建规则:

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,-2147467259),None)

我在做什么错了?

解决方法

Python需要括号来调用函数。所以,这什么也没做:

oFromCondition.Recipients.ResolveAll

您需要:

oFromCondition.Recipients.ResolveAll()