我正在使用Microsoft的CDO(协作数据对象)以编程方式从Outlook邮箱中读取邮件并保存嵌入的图像附件。我正在尝试使用Win32扩展从Python执行此操作,但使用CDO的任何语言的示例都会有所帮助。
到目前为止,我在这里......
以下Python代码将读取我邮箱中的最后一封电子邮件,打印附件的名称,并打印邮件正文:
from win32com.client import Dispatch
session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nbar');
inbox = session.Inbox
message = inbox.Messages.Item(inbox.Messages.Count)
for attachment in message.Attachments:
print attachment
print message.Text
session.Logoff()
但是,附件名称类似于:“zesjvqeqcb_chart_0”。在电子邮件源中,我看到像这样的图像源链接: < IMG src =“cid:zesjvqeqcb_chart_0”>
那么,是否可以使用此CID URL(或其他任何内容)来提取实际图像并将其保存在本地?
答案 0 :(得分:5)
OS / Outlook / CDO版本的差异可能是导致混淆的原因,因此以下是使其适用于WinXP / Outlook 2007 / CDO 1.21的步骤:
python makepy.py
C:\Python25\Lib\site-packages\win32com\client>python makepy.py Generating to C:\Python25\lib\site-packages\win32com\gen_py\3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py Building definitions from type library... Generating... Importing module
现在我们已经完成了无聊的步骤,这是有趣的部分:
import win32com.client
from win32com.client import Dispatch
session = Dispatch('MAPI.session')
session.Logon ('Outlook') # this is profile name
inbox = session.Inbox
messages = session.Inbox.Messages
message = inbox.Messages.GetFirst()
if(message):
attachments = message.Attachments
for i in range(attachments.Count):
attachment = attachments.Item(i + 1) # yep, indexes are 1 based
filename = "c:\\tmpfile" + str(i)
attachment.WriteToFile(FileName=filename)
session.Logoff()
如果你有旧版本的CDO(win2k的CDO)
,那么同样的通用方法也会有效