You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python指定图片宽高后Outlook邮件无法显示图片的问题咨询

解决方案

问题根因

  • Outlook使用老旧的Word引擎解析邮件HTML,对不规范语法兼容性极差,你的原代码存在多处不规范写法:
    1. img标签属性名和属性值之间加了多余空格(height = "500"),无法被引擎正确识别
    2. src属性的值没有加双引号包裹,解析时容易逻辑异常
    3. 额外加了</img>闭合标签,img是自闭合标签不需要单独闭合
  • 直接用本地图片路径作为src仅能在你自己本地预览时临时显示,发送后所有收件人都无法看到图片,需要将图片作为内嵌附件添加到邮件中,用CID方式引用。

修改后的完整代码

import os
import win32com.client as client
from PIL import ImageGrab

workbook_path = r'C:\path\to\excel\excel.xlsx'
# 用绝对路径定义图片保存位置,避免路径识别错误
image_path = os.path.join(os.getcwd(), 'paste.png')

# 截取Excel指定区域图片
excel = client.Dispatch('Excel.Application')
wb = excel.Workbooks.Open(workbook_path)
sheet = wb.Worksheets['Sheet1']
excel.Visible = True
copyrange = sheet.Range('A1:AA132')
copyrange.CopyPicture(Appearance=1, Format=2)
ImageGrab.grabclipboard().save(image_path)
excel.Quit()

# 修正后的邮件HTML模板,使用CID引用内嵌图片
html_body = """
<div>
    <p>Hi All, </p>
    <p> text </p>
</div>
<div>
    <img src="cid:paste_excel_img" height="500" width="600">
</div>
"""

# 构造Outlook邮件
outlook = client.Dispatch('Outlook.Application')
message = outlook.CreateItem(0)
message.To = 'to address'
message.Subject = 'subject '
message.HTMLBody = html_body

# 添加图片为内嵌附件,绑定CID标识
attachment = message.Attachments.Add(image_path)
PR_ATTACH_CONTENT_ID = "http://schemas.microsoft.com/mapi/proptag/0x3712001F"
attachment.PropertyAccessor.SetProperty(PR_ATTACH_CONTENT_ID, "paste_excel_img")

message.Display()
# message.Send()

# 可选:发送后自动删除本地临时图片
os.remove(image_path)

效果说明

修改后可直接调整height和width的数值自定义图片尺寸,不会出现图片消失的问题,同时收件人收到邮件也能正常显示图片,不会出现红叉占位符。

内容的提问来源于stack exchange,提问作者william_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:05