我试图从 Outlook 下载满足特定主题的附件,但我得到了一个例外,不知道如何从下面更正我的代码是我的代码:
import win32com.client
import os
get_path = os.getcwd()
outlook = win32com.client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message2 = messages.GetLast()
subject = message2.Subject
body = message2.body
sender = message2.Sender
attachments = message2.Attachments
for m in messages:
if m.Subject == "Test Mail":
for x in message2.Attachments:
x.SaveASFile(os.path.join(get_path,x.FileName))
print "successfully downloaded attachments"
这就是问题所在:
Traceback (most recent call last):
File "C:/Users/LENOVO USER/PycharmProjects/FlaskProject/EmailFilter/TestFile.py", line 4, in <module>
outlook = win32com.client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
File "C:Python27libsite-packageswin32comclient__init__.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "C:Python27libsite-packageswin32comclientdynamic.py", line 114, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:Python27libsite-packageswin32comclientdynamic.py", line 91, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)
如回溯所示,错误位于定义outlook
的行。实际上,GetNamespace
没有大写的 S,因此请将此行替换为:
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
但是会发生其他错误,在定义body
的行中,属性必须使用上限,例如body = message2.Body
,以及x.SaveASFile
中的另一个上限问题,应该x.SaveAsFile
最后,我不确定您的代码是否会按照您的描述进行操作,因为您尝试下载message2
的附件,这是您的最后一条消息,而您遍历messages
,我不明白这一点。
如果您需要更多帮助或我误解了您的问题,请告诉我。