使用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
相关产品推荐
相关产品推荐

