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

