【问题标题】:Extracting Embedded Images From Outlook Email从 Outlook 电子邮件中提取嵌入的图像
【发布时间】: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(或其他任何内容)来提取实际图像并保存在本地?

【问题讨论】:

    标签: python email outlook cdo.message


    【解决方案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 代码中使用该接口的任何提示?
    • 更详细,完全修改的答案 - 希望它会有所帮助
    猜你喜欢
    • 2022-09-25
    • 2010-11-18
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2015-07-09
    • 2011-12-17
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多