小编典典

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

python

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


阅读 148

收藏
2021-01-20

共1个答案

小编典典

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库(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),则相同的通用方法也将起作用

2021-01-20