从 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:以上是关于从 Outlook 电子邮件中提取嵌入的图像的主要内容,如果未能解决你的问题,请参考以下文章
是否可以像 Outlook RTF/TNEF 那样在 html 电子邮件中嵌入非图像附件?