从Outlook Emai中提取嵌入图像

2024-05-17 17:49:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Microsoft的CDO(协作数据对象)以编程方式从Outlook邮箱读取邮件并保存嵌入的图像附件。我正试图从Python使用Win32扩展来实现这一点,但是任何使用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(或其他任何东西)来提取实际的图像并将其保存在本地?


Tags: 图像名称message附件attachmentsessionchart邮件
1条回答
网友
1楼 · 发布于 2024-05-17 17:49:37

OS/Outlook/CDO版本的不同可能是造成混淆的原因,下面是使其在WinXP/Outlook 2007/CDO 1.21上工作的步骤:

  • 安装CDO 1.21
  • 安装win32com.client
  • 转到C:\Python25\Lib\site packages\win32com\client\directory运行以下命令:
python makepy.py
  • 从列表中选择“Microsoft CDO 1.21库(1.21)”,单击“确定”
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),同样的通用方法也可以工作

相关问题 更多 >