我正在使用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”。在电子邮件源中,我看到这样的图像源链接:
因此,是否可以使用此CID URL(或其他任何内容)提取实际图像并将其保存在本地?
OS / Outlook / CDO版本的差异可能是造成混淆的原因,因此,以下是使它在WinXP / Outlook 2007 / CDO 1.21上运行的步骤:
转到C:\ Python25 \ Lib \ site-packages \ win32com \ client \目录运行以下命令:
python makepy.py
从列表中选择“ Microsoft CDO 1.21库(1.21)”,单击“确定”。
C:\ Python25 \ Lib \ site-packages \ win32com \ client> python makepy.py 生成到C:\ Python25 \ lib \ site-packages \ win32com \ gen_py \ 3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py 从类型库构建定义… 正在产生… 导入模块
检查刚刚生成的文件3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py将使您了解可用的类,方法,属性和常量。
现在我们完成了无聊的步骤,下面是有趣的部分:
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),则相同的通用方法也将起作用