You need to enable JavaScript to run this app. 如何使用Python email库通过SMTP发送含内嵌图片的HTML格式邮件
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python email库通过SMTP发送含内嵌图片的HTML格式邮件

Python SMTP发送含内嵌图片HTML邮件的正确实现

内嵌图片通过CID(内容ID)关联HTML内容和邮件资源,正确实现代码如下:

import smtplib
from email.message import EmailMessage
from email.utils import make_msgid

# 初始化邮件对象,配置基础信息
msg = EmailMessage()
msg['Subject'] = '带内嵌图片的测试邮件'
msg['From'] = '发件人邮箱@xxx.com'
msg['To'] = '收件人邮箱@xxx.com'

# 生成图片唯一CID标识
asparagus_cid = make_msgid()

# 配置纯文本备选内容,兼容不支持HTML的邮件客户端
msg.set_content('这是纯文本备选内容,仅在客户端不支持HTML时展示')

# 添加HTML正文内容,CID需要移除make_msgid返回值首尾的尖括号
msg.add_alternative(f"""\
<html>
  <head></head>
  <body>
    <p>您好!</p>
    <p>这是一份带内嵌图片的测试邮件</p>
    <img src="cid:{asparagus_cid[1:-1]}" alt="图片描述"/>
  </body>
</html>
""", subtype='html')

# 关联本地图片资源到对应CID
with open("roasted-asparagus.jpg", 'rb') as img:
    # 直接取HTML部分的payload,无需硬编码索引,兼容性更高
    msg.get_payload()[1].add_related(img.read(), 'image', 'jpeg', cid=asparagus_cid)

# 连接SMTP服务发送邮件,此处以QQ邮箱为例,其他服务商替换对应SMTP地址和端口即可
with smtplib.SMTP_SSL('smtp.qq.com', 465) as smtp:
    smtp.login('发件人邮箱@xxx.com', '邮箱SMTP授权码')
    smtp.send_message(msg)

注意事项

  • 授权码说明:SMTP登录使用的授权码不是邮箱登录密码,需要在对应邮箱的设置页面开启SMTP服务后单独获取
  • 多图适配:如果需要嵌入多张图片,为每张图片生成独立的CID,分别关联对应图片资源即可
  • 格式适配:如果嵌入的是png、gif等其他格式图片,将add_related方法中的jpeg参数修改为对应格式标识即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:03:03