代码之家  ›  专栏  ›  技术社区  ›  Corey Goldberg

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

  •  4
  • Corey Goldberg  · 技术社区  · 17 年前

    到目前为止,我在这里。。。

    以下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”>

    1 回复  |  直到 9 年前
        1
  •  5
  •   Sergey Golovchenko    17 年前

    OS/Outlook/CDO版本的差异可能是造成混淆的原因,因此以下是使其在WinXP/Outlook 2007/CDO 1.21上运行的步骤:

    python makepy.py
    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),同样的通用方法也可以使用

    推荐文章