Python用win32com操作Outlook新邮件时本地图片设置宽高失败如何解决
问题根因
直接使用本地文件系统路径作为邮件HTML内<img>标签的src属性,本身不符合HTML邮件的通用规范。Outlook对本地文件资源的加载有严格的安全限制,未设置宽高属性时的正常显示仅属于本地预览时的临时放行特例,添加width/height属性后触发了更严格的资源校验逻辑,直接拦截了本地图片加载。而网络图片属于Outlook允许加载的资源类型,因此添加宽高属性后仍可正常显示。
解决方案
要实现本地图片在Outlook邮件中正常显示且可自定义宽高的标准做法,是将图片作为内嵌附件添加到邮件中,再通过cid:协议引用图片,示例代码如下:
import os import win32com.client as client outlook = client.Dispatch('Outlook.Application') mail = outlook.CreateItem(0) icon_path = os.getcwd() + '\\test.jpg' # 将本地图片添加为邮件内嵌附件 attachment = mail.Attachments.Add(icon_path) # 给附件设置唯一的ContentID,用于HTML中cid引用 attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", "test_img") html_body = f''' <img src="cid:test_img" width="100" height="200"> ''' mail.To = '' mail.CC = '' mail.Subject = '' mail.HTMLBody = html_body mail.Save()
注意事项
- 不要直接在邮件HTML中使用本地绝对路径引用图片:这种写法仅在你本地预览时可能偶尔生效,收件人打开邮件时必然无法加载图片,同时也会频繁出现加载异常问题。
cid引用的名称需要和附件设置的ContentID完全一致,不要包含空格或特殊字符,避免引用失效。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

