Python调用Outlook发送嵌入PNG图片的邮件图片无法加载求助
问题排查
- 语法错误:原代码中
<br>直接写在Python代码行末尾属于无效语法,循环for i in range(1,5)末尾缺失冒号,message.Send是调用方法需要加括号message.Send()否则不会实际执行发送动作 - 遍历范围错误:
range(1,5)生成的是1-4的整数,你的5.png不会被加入邮件内容 - 图片引用逻辑错误:直接把本地图片名写在HTML的
src属性里,邮件客户端无法读取你本地的文件路径,必须将图片作为隐藏附件添加到邮件,再通过cid(内容ID)在HTML中引用 - 标签写法错误:HTML标准图片标签为
<img>,不是<image>
修正后实现方案
该方案不影响你插入DataFrame的需求,直接将DataFrame转成HTML字符串拼入message_string即可正常显示。
import win32com.client as client import os # 替换为你本地存放1.png-5.png的文件夹路径 img_root = r"C:\你的图片存放目录" message_string = 'This is my string<br>' outlook = client.Dispatch('Outlook.Application') message = outlook.CreateItem(0) message.To = 'testemail@test.com.au' message.Subject = 'this is my test email' for i in range(1, 6): img_path = os.path.join(img_root, f"{i}.png") # 添加图片为邮件附件 attach = message.Attachments.Add(img_path) # 为附件设置唯一的内容ID,用于HTML内引用 cid = f"pic_{i}" attach.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", cid) # 拼接图片到HTML内容中 message_string += f'<br><img src="cid:{cid}" alt="图片{i}"><br>' # 此处可以拼接你的DataFrame转HTML结果,示例: # import pandas as pd # df = pd.DataFrame({'测试列1':[1,2,3], '测试列2':[4,5,6]}) # message_string += df.to_html(index=False) message.HTMLBody = message_string message.Send()
内容的提问来源于stack exchange,提问作者mhooper
相关产品推荐
相关产品推荐

