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

使用C# MailKit发送含嵌入图片的HTML模板邮件问题咨询

正确实现MailKit发送含嵌入图片的HTML邮件

你的核心问题是HTML模板无法直接识别C#变量,需要将生成的图片CID(内容ID)动态替换到HTML内容中。以下是修正后的实现步骤:

1. 修改HTML模板,添加占位符

将HTML里的图片引用改为带占位符的格式,方便后续替换:

<div style="background-color:#000000;padding:1em;width:50%">
    <center><img src='cid:{ImageCID}' /></center>
</div>

2. 调整C#代码,动态替换占位符

读取HTML模板后,将占位符替换为实际生成的图片CID:

var email = new MimeMessage();
var bodyBuilder = new BodyBuilder();

// 添加图片并生成合规的CID
var image = bodyBuilder.LinkedResources.Add(@"E:\Hicham\MIMNESTHelper\image.jpg");
// MimeUtils.GenerateMessageId()默认生成带尖括号的ID,需去除后作为ContentId
image.ContentId = MimeUtils.GenerateMessageId().Trim('<', '>');

// 读取HTML模板并替换占位符
using (var sourceReader = System.IO.File.OpenText("E:\\Hicham\\MIMNESTHelper\\EmailTemplate.html"))
{
    var htmlTemplate = sourceReader.ReadToEnd();
    // 将模板中的{ImageCID}替换为实际的图片CID
    bodyBuilder.HtmlBody = htmlTemplate.Replace("{ImageCID}", image.ContentId);
}

email.Body = bodyBuilder.ToMessageBody();

关键说明

  • CID格式要求:HTML中引用嵌入图片必须使用cid:xxx格式,其中xxx是LinkedResource的ContentId值,注意不能包含尖括号。
  • 模板占位符替换:直接在HTML中写C#变量名无法被解析,必须通过字符串替换将动态生成的CID注入到HTML内容中。
  • LinkedResources作用:通过bodyBuilder.LinkedResources.Add添加的图片会被标记为“嵌入资源”,与邮件主体绑定,不会作为独立附件显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:45:33