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

PHP页面显示图片正常,如何将其正确嵌入邮件正文?

搞定邮件内嵌图片这事儿我熟,给你两种靠谱的方案,分分钟解决你的问题!

正确嵌入图片到邮件正文的两种方案

方案一:CID(Content-ID)内嵌法(推荐)

这是邮件客户端支持最广泛的标准方法,原理是把图片作为邮件的「内嵌附件」,然后用唯一的CID在HTML正文中引用它,既不会被当成普通可下载附件,又能稳定显示。

具体步骤:

  • 把图片添加为邮件的附件,但设置为内嵌资源(而非普通附件)
  • 给图片分配一个唯一的CID(格式类似 <unique-id@your-domain.com>,只要保证在当前邮件里唯一就行)
  • 在HTML邮件正文中,用 <img src="cid:your-unique-id"> 引用这张图片

代码示例(Python为例):

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

# 创建带内嵌资源的邮件对象
msg = MIMEMultipart('related')
msg['Subject'] = '带内嵌图片的测试邮件'
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'

# HTML正文,通过CID引用内嵌图片
html_content = """
<p>这是内嵌的图片:</p>
<img src="cid:my-custom-image-id" alt="我的图片">
"""
msg.attach(MIMEText(html_content, 'html'))

# 读取本地图片并添加为内嵌附件
with open('your-image-file.png', 'rb') as img_file:
    mime_img = MIMEImage(img_file.read())
    # 设置图片的Content-ID,注意要保留尖括号
    mime_img.add_header('Content-ID', '<my-custom-image-id>')
    # 标记为内嵌资源,避免被当成普通附件
    mime_img.add_header('Content-Disposition', 'inline', filename='your-image-file.png')
    msg.attach(mime_img)

# 发送邮件(根据你的SMTP服务器配置调整)
with smtplib.SMTP('smtp.example.com', 587) as server:
    server.starttls()
    server.login('your-email-username', 'your-email-password')
    server.send_message(msg)

方案二:Base64编码直接嵌入

把图片转换成Base64字符串,直接嵌入到HTML的src属性里,不需要添加附件。这种方法适合小图标之类的小体积图片,缺点是部分旧版邮件客户端(比如Outlook 2016及更早版本)支持不佳,且会直接增大邮件体积。

示例代码片段:

import base64

# 读取图片并转换为Base64字符串
with open('small-icon.png', 'rb') as img_file:
    img_base64 = base64.b64encode(img_file.read()).decode('utf-8')

# 直接在HTML中引用Base64编码内容
html_content = f"""
<p>这是Base64嵌入的小图标:</p>
<img src="data:image/png;base64,{img_base64}" alt="小图标" width="50">
"""

避坑指南:

  • 别直接引用网页图片URL:绝大多数邮件客户端会默认阻止加载外部资源,收件人大概率看不到图片
  • 优先用PNG/JPG格式:SVG等小众格式很多客户端不支持,尽量避开
  • 不同语言/库的细节:比如PHPMailer用$mail->addEmbeddedImage('path/to/image.png', 'image-cid', 'image.png');,JavaMail需要把图片放到MimeMultipart("related")容器中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:10:28