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

HTML邮件图片无法显示,如何通过Python代码正确嵌入图片发送?

解决HTML邮件中图片无法显示的问题

问题原因

你当前HTML里用的是相对路径mysite/logo.svg,邮件客户端无法解析该路径;即使换成绝对URL,部分邮件服务商(比如Gmail)会自动代理图片,若图片权限受限或加载不稳定,仍可能显示异常。更可靠的解决方式是内联嵌入图片,或者使用可公开访问的完整绝对URL。

方案1:内联嵌入图片(推荐)

将图片作为邮件附件嵌入,通过cid标识在HTML中引用,步骤如下:

  1. 修改Python发送代码,添加图片附件并设置Content-ID:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()

try:
    server.login(EMAIL_BOT, PASSWORD_BOT)
    
    msg = MIMEMultipart('related')  # 需使用related类型关联HTML与内联资源
    msg['From'] = EMAIL_BOT
    msg['To'] = email
    msg["Subject"] = name

    # 编写HTML内容,用cid引用图片
    html_content = """
    <div class="header__container ">
      <img src="cid:logo_image" alt="logo" class="header_img">
    </div>
    """
    part1 = MIMEText(html_content, 'html')
    msg.attach(part1)

    # 读取本地图片文件,创建MIMEImage对象并绑定cid
    with open("logo.svg", "rb") as img_file:
        img = MIMEImage(img_file.read())
        img.add_header('Content-ID', '<logo_image>')  # cid需与HTML中的标识对应
        msg.attach(img)
    
    server.sendmail(EMAIL_BOT, email, msg.as_string())
    
except Exception as ex:
    print(ex)
  1. 注意事项:
  • 确保图片文件路径正确,可使用绝对路径避免目录问题。
  • MIMEMultipart的类型必须设为related,才能让HTML与内联图片建立关联。
  • HTML中src的cid:logo_image需与Content-ID的<logo_image>对应(去掉尖括号)。

方案2:使用公开可访问的绝对URL

若图片存放在公开服务器上,直接使用完整HTTPS路径:

<div class="header__container ">
  <img src="https://sherf201.pythonanywhere.com/logo.svg" alt="logo" class="header_img">
</div>

需注意:

  • 确保该URL无权限限制,可被公开访问。
  • 部分邮件客户端默认屏蔽外部图片,需收件人手动开启显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:30:52