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

.NET 5发送邮件时内嵌base64 Logo部署后不显示问题

问题根因

直接在HTML中使用data:image/xxx;base64,xxx格式的Data URI嵌入图片,本身就不符合邮件生态的通用兼容规范。本地调试时能正常显示,是因为本地预览用的浏览器/调试组件没有施加邮件场景的安全限制;部署到托管站点后出现图片不显示,通常是两类原因:一是托管平台的出站邮件网关会自动过滤剥离HTML中的Data URI资源,二是收件端的邮件客户端默认拦截这种非规范嵌入的资源,防止恶意内容加载。

修复方案

你当前使用的MailKit组件本身原生支持邮件内嵌图片的标准实现,不需要手动拼接base64到img标签,通过关联资源+CID引用的方式嵌入图片,是全邮件客户端兼容的标准方案,不会被拦截。

  • 提前将base64格式的图片字符串转换为字节数组,注意剔除前缀data:image/jpeg;base64,
  • 调用BodyBuilder.LinkedResources.Add()方法将图片作为内嵌资源加入邮件内容,获取该资源对应的Content-ID
  • HTML模板中的img标签src属性使用cid:{对应Content-ID}的格式引用资源,不要直接写入base64字符串

修正后的可运行代码如下:

MimeMessage emailMessage = new MimeMessage();

MailboxAddress emailFrom = new MailboxAddress("Title", "info@testing.com");
emailMessage.From.Add(emailFrom);
MailboxAddress emailTo = new MailboxAddress(emailData.EmailToName, emailData.EmailToId);
emailMessage.To.Add(emailTo);
emailMessage.Subject = emailData.EmailSubject;

BodyBuilder emailBodyBuilder = new BodyBuilder();

// 提取纯base64内容,剔除data URI前缀
string logoBase64 = "/9j4AAQSkZJRgABAgEASABIAAD/4QqCRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodpAAQAAAABAAAAnAAAAMgAAABIAAAAAQAAAEgAAAABQWRvYmUAwMDP";
byte[] logoBytes = Convert.FromBase64String(logoBase64);

// 添加内嵌图片资源,指定正确的MIME类型
var logoResource = emailBodyBuilder.LinkedResources.Add("logo.jpg", logoBytes, new ContentType("image", "jpeg"));
string logoContentId = logoResource.ContentId;

// 通过cid引用内嵌资源
var htmlData = @"<table style='padding-left:25px;width:100%;'><tbody><tr style='line-height:0px;'><td>" +
    $"<img src='cid:{logoContentId}'/>" + 
    "</td></tr></tbody></table>";

emailBodyBuilder.HtmlBody = htmlData;
emailMessage.Body = emailBodyBuilder.ToMessageBody();

SmtpClient emailClient = new SmtpClient();
emailClient.Connect("smtp.domain.com", 465, true);  
emailClient.Authenticate("companyemail@abc.com", "password");  
emailClient.Send(emailMessage);  
emailClient.Disconnect(true); 
emailClient.Dispose();

注意事项

  • 内嵌Logo建议提前压缩体积,控制在100KB以内,过大的内嵌资源容易触发邮件网关的垃圾邮件判定规则
  • LinkedResources添加的资源默认是内嵌展示模式,不会出现在邮件的附件列表中,不需要额外调整配置
  • 该方案兼容Outlook、Gmail、企业微信邮箱、QQ邮箱、网易邮箱等所有主流邮件客户端,不存在Data URI的兼容问题

内容的提问来源于stack exchange,提问作者omi.iqb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:01:02