4

我正在使用 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”。在电子邮件源中,我看到这样的图像源链接: <IMG src="cid:zesjvqeqcb_chart_0">

那么,是否可以使用此 CID URL(或其他任何内容)来提取实际图像并将其保存在本地?

4

1 回答 1

5

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

  • 安装CDO 1.21
  • 安装 win32com.client
  • 转到 C:\Python25\Lib\site-packages\win32com\client\ 目录运行以下命令:
蟒蛇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),同样的通用方法也可以使用

于 2009-01-13T20:08:27.620 回答