我有以下python代码
o = win32com.client.Dispatch("Outlook.Application")
ns = o.GetNamespace("MAPI")
profile = ns.Folders.Item("Profile Name")
tasks = profile.Folders.Item("Tasks")
print tasks.Items
当我运行它时,脚本崩溃并出现此错误:
Traceback (most recent call last):
File "start.py", line 47, in <module>
o = win32com.client.Dispatch("Outlook.Application")
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2146959355, 'Server execution failed', None, None)
我也尝试过:
win32com.client.gencache.EnsureDispatch("Outlook.Application")
不确定该怎么做以及问题是什么
更新:仅当Outlook正在运行时才会发生这种情况,但是发出getActiveObject会因“操作不可用”而崩溃
答案 0 :(得分:7)
错误是CO_E_SERVER_EXEC_FAILURE,这很可能意味着Outlook在与您的进程不同的安全上下文中运行。应用程序是否以提升的权限运行(以管理员身份运行)?
您的代码何时以及如何运行?
2016年6月17日更新: 只需将评论中提到的解决方案发布为更多可见,使用普通用户或使用管理员用户同时运行outlook和python代码。
答案 1 :(得分:2)
我有同样的问题,我使用64位安装的Python 2.7。我重新安装了32位版本的Python 2.7,我能够使用客户端调度调用。
答案 2 :(得分:1)
尝试将脚本移动到另一个目录并从那里执行。当我遇到问题时,这解决了这个问题,虽然我不确定问题的根本原因(似乎是一个模糊的bug,如winon API,如Nuno建议的那样)。
答案 3 :(得分:0)
当我尝试获取Windows Server上配置的Outlook邮件时,当我未能“允许”访问Outlook中出现的安全提示以允许第三者程序读取邮件时,出现此错误。
答案 4 :(得分:0)
我也遇到了同样的错误,
其背后的原因是该应用程序上次调用com,但未正确退出或因某些错误而退出。因此,下一次您将无法调用它。
我已经关闭并重新打开了Outlook,并重新运行了我的py代码,现在效果很好。
使用这段代码来避免将来出现此错误
fx = win32com.client.Dispatch('CimplicityME.Application')
try:
# do stuff
except:
fx.Quit()
参考:https://www.mail-archive.com/python-win32@python.org/msg11258.html