从Outlook电子邮件中提取嵌入图像

时间:2009-01-13 19:15:03

标签: python email outlook cdo.message

我正在使用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(或其他任何内容)来提取实际图像并将其保存在本地?

1 个答案:

答案 0 :(得分:5)

OS / Outlook / CDO版本的差异可能是导致混淆的原因,因此以下是使其适用于WinXP / Outlook 2007 / CDO 1.21的步骤:

  • 安装CDO 1.21
  • 安装win32com.client
  • 转到C:\ Python25 \ Lib \ site-packages \ win32com \ client \目录运行以下命令:
python makepy.py
  • 从列表中选择“Microsoft CDO 1.21 Library(1.21)”,单击“确定”
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
  • 检查刚刚生成的文件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)

,那么同样的通用方法也会有效