C# 发送包含内嵌图片的 HTML 邮件详解

陆景行
陆景行
发布时间:2026-10-14| 3人浏览过
原创

在开发需要发送通知的应用时,往往希望邮件内容图文并茂。本方案演示如何在 C# 中使用 System.Net.Mail 组件构建 HTML 邮件正文,并通过 Content-ID (CID) 机制将本地图片“内嵌”到邮件中,从而在 Outlook、Gmail 等主流客户端中直接展示图片,而非作为普通附件下载。

核心原理与准备

要实现图片和正文合一的效果,关键在于使用 AlternateView 定义邮件的内容结构,并利用 LinkedResource 绑定图片。HTML 正文中的 <img> 标签需引用由 LinkedResource.ContentId 生成的 ID(通常写法为 cid:ImageName)。

第1步:配置基础邮件信息

首先实例化 MailMessage 对象,设定发件人、收件人及主题。这一步确立邮件的基本骨架。

第2步:构建 HTML 视图并绑定图片

这是实现内嵌图片的关键环节。我们需要创建一个 HTML 格式的 AlternateView,并在其中插入指向图片 CID 的标签。

  1. 编写 HTML 主体:在 HTML 字符串中使用 <img src="cid:Pic1"> 引用图片。
  2. 创建资源关联:实例化 LinkedResource 指定本地图片路径(如 pic.jpg),并将其 ContentId 设为与 HTML 中一致的值(如 "Pic1")。
  3. 添加链接:将 LinkedResource 添加到 AlternateView.LinkedResources 集合中。
  4. 附加纯文本备选:为了兼容不支持 HTML 的旧式邮箱客户端,建议同时添加一个纯文本版本的 AlternateView。

第3步:发送邮件

实例化 SmtpClient 并配置 SMTP 服务器地址(如 smtp.example.com),调用 Send 方法完成投递。

代码实现示例

以下是完整的 C# 代码片段,展示了如何设置上述参数:

using System.Net;
using System.Net.Mail;

// 1. 创建邮件消息对象
MailMessage m = new MailMessage();
m.From = new MailAddress("sender@example.com", "发件人名称");
m.To.Add(new MailAddress("receiver@example.com", "收件人名称"));
m.Subject = "测试HTML邮件与内嵌图片";

// 2. 创建 HTML 视图
// 注意:src 属性必须写成 "cid:Pic1",其中 Pic1 对应下方 LinkedResource 的 ContentId
string htmlBody = "<html><body><h1>图片展示</h1>" +
                  "<p>这是一张内嵌图片:</p>" +
                  "<img src=\"cid:Pic1\">" +
                  "</body></html>";

AlternateView avHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);

// 3. 创建并关联图片资源
// 确保 pic.jpg 文件存在于程序运行目录下,或填写完整路径
LinkedResource pic1 = new LinkedResource("pic.jpg", MediaTypeNames.Image.Jpeg);
pic1.ContentId = "Pic1"; // 必须与 HTML 中的 cid 值一致
avHtml.LinkedResources.Add(pic1);

// 4. 添加纯文本备用视图(重要:兼容不支持HTML的客户端)
string textBody = "您的邮件客户端不支持HTML显示,请升级或查看附件。";
AlternateView avText = AlternateView.CreateAlternateViewFromString(textBody, null, MediaTypeNames.Text.Plain);

// 5. 将所有视图加入邮件
m.AlternativeViews.Add(avHtml);
m.AlternativeViews.Add(avText);

// 6. 配置SMTP并发送
SmtpClient client = new SmtpClient("smtp.example.com");
// 若需认证,可在此处设置 Credentials 属性
// client.Credentials = new NetworkCredential("user", "pwd");
client.Send(m);

常见问题排查

  • 图片未显示/显示红叉:检查 LinkedResource 的 ContentId 是否与 HTML 中 cid: 后的字符串完全一致(区分大小写)。确保图片文件路径正确且存在。
  • 被归类为垃圾邮件:大量内嵌小图片或缺少 SPF/DKIM 验证可能导致邮箱服务拦截。建议尽量使用外链图片URL(<img src="http://...">)而非内嵌,或通过邮件服务商模板中心发送。
  • 兼容性:Outlook 对内嵌图片支持较好,但某些 Webmail 客户端出于安全考虑默认不加载图片,会提示用户手动允许。

以上就是 C# 发送包含内嵌图片的 HTML 邮件的详细内容,更多关于 C# 电子邮件编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。