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

Posted

技术标签:

【中文标题】从 Outlook 电子邮件中提取嵌入的图像【英文标题】:Extracting Embedded Images From Outlook Email 【发布时间】:2010-10-01 05:17:03 【问题描述】:

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

【问题讨论】:

【参考方案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 Library (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),同样的通用方法也可以工作

【讨论】:

我正在尝试上面代码中的那些,但它不起作用。我在附件对象中看不到该方法和属性。想法? 在上面的代码中,我在尝试调用该方法时仍然得到“AttributeError: .GetDecodedContentStream”。它也看不到 FileName 属性。关于如何从我上面的 Python 代码中使用该接口的任何提示? 更详细,完全修改的答案 - 希望它会有所帮助

以上是关于从 Outlook 电子邮件中提取嵌入的图像的主要内容,如果未能解决你的问题,请参考以下文章

逻辑应用和 Outlook 嵌入图像

如何将图像嵌入 Outlook 可接受的电子邮件中

如何在Outlook 2007电子邮件中嵌入图像或视频

是否可以像 Outlook RTF/TNEF 那样在 html 电子邮件中嵌入非图像附件?

无法在使用 python smtplib/email 发送的 Outlook 2013 电子邮件中显示嵌入图像

对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上