【发布时间】:2021-04-21 16:15:36
【问题描述】:
我的目标是使用 Python 将图像(来自本地 .png 文件)添加到 Outlook MailItem。
我已经阅读了关于 SO(主要使用 VBA)的类似问题的答案,但我遇到的问题是邮件在发送之前看起来很好(我可以看到图像)(以及当我查看我的已发送邮件文件夹时) ),但是当在另一端接收时,图像就坏了。
如果我在邮件中手动插入图像(使用 Outlook 菜单中的“插入/图片/来自此设备”),电子邮件会正常到达,并显示图像。
这是我正在使用的基本代码(主要基于 VBA 示例):
import win32com.client as wc
def main():
outlook = wc.Dispatch("Outlook.Application")
#Create a new mail item
msg = outlook.CreateItem(0)
#Set some properties
msg.BodyFormat = 2
msg.Subject = 'Here is my chart'
msg.Recipients.Add('xxx@yyy.com')
#Add an attachment, with position 0
imageFile = 'C:\\Temp\\myplot.png'
ats = msg.Attachments
att = ats.Add(imageFile,1,0)
#Set the HTMLBody
msg.HTMLBody = '<img src="cid:{0:}" width=200 height=200>'.format(att.FileName)
#Send
msg.Send()
main()
这是我在“已发送邮件”文件夹中看到的内容:
我发送的项目中的 HTML(使用查看源代码)是这样的:
<img src="cid:myplot.png" width=200 height=200>
但这就是结果:
目标正文中的 HTML 是这样的:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<img src="cid:AD1B7014D243624CA83F873A11053F18@GBRP123.PROD.OUTLOOK.COM" width="200" height="200">
</body>
</html>
当我手动插入图片时,收到的 HTML 会长得多(所以我不会在这里全部包含),但这里有“img”标签(这与已发送邮件文件夹中的内容相匹配):
<img width="614" height="461" style="width:6.3958in;height:4.802in" id="Picture_x0020_1" src="cid:image001.png@01D736CD.72206440" alt="Chart, line chart Description automatically generated">
我将不胜感激任何对此的见解! (遗憾的是,Outlook 不允许我录制宏来查看手动过程在做什么)。我见过一个示例(来自 C#),其中在 MailItem 上使用 SetProperty() 方法来添加不在 Outlook 对象模型中的其他项目(模式、上下文 id)以及新创建的 Guid,但这真的是有必要吗?
使用 Microsoft 365、Outlook 版本 2105、Beta 通道
【问题讨论】: