我正在研究win32com.client模块并制作了一个小脚本,可以将我的Outlook收件箱中的所有pdf附件下载到C盘。这是我的代码:
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
ext = 'jpg'
for message in messages:
attachments = message.attachments
for attachment in attachments:
if attachment.filename[-3:] == ext:
attachment.SaveASFile("C:/PDF/" + attachment.filename)
print(attachment.filename)
然后我浏览了makepy.py类型库并导入了" Microsoft Outlook 15.0对象库(9.5),我的代码不再有效了。我得到的错误如下:
AttributeError: '<win32com.gen_py.Microsoft Outlook 15.0 Object Library._MailItem instance at 0x58180464>' object has no attribute 'attachments'
是否有撤消导入类型库时所做的更改?我尝试用pip3卸载/安装pywin32,但它不会改变情况。
我正在运行Windows 10。
答案 0 :(得分:0)
此属性错误的主要原因是因为您的COM服务器已从后期绑定(动态)更改为早期绑定(静态)。
有两种方法可以解决此问题:
使用动态模块来强制您的代码以面向后期的方式工作。使用示例:
"win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()"
使用面向驼峰的敏感关键字作为面向早期绑定的方式。使用示例:
"excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"
在您的情况下使用:
"message.Attachments" instead of "message.attachments"
此外,更改:
"attachment.SaveAsFile" instead of "attachment.SaveASFile"