如何将wwwroot文件夹中的图片添加至邮件模板?
解决邮件模板中无法加载wwwroot图片的问题
问题原因
邮件客户端无法解析网站的相对路径(如/assets/icon-positive-vote-1.png),因为邮件的渲染环境和你的网站上下文完全独立,没有默认的基URL指向你的服务器,所以相对路径无法定位到图片资源。
解决方案
方案1:替换为绝对URL
直接将相对路径替换为包含域名的完整绝对URL,让邮件客户端能通过公网访问图片:
修改代码中的替换逻辑:
// 替换为你的实际域名,或者动态生成基URL .Replace("[PICTURE1]", "https://your-domain.com/assets/icon-positive-vote-1.png")
如果是ASP.NET Core项目,推荐动态生成基URL避免硬编码(需要注入HttpContext或IWebHostEnvironment):
// 从HttpContext获取当前请求的协议和域名 var baseUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}"; .Replace("[PICTURE1]", $"{baseUrl}/assets/icon-positive-vote-1.png")
方案2:将图片内嵌为邮件附件(无外部依赖)
如果图片无法通过公网访问,或者不想依赖外部链接,可以把图片作为内嵌附件加入邮件,通过CID(Content-ID)引用:
- 读取wwwroot中的图片文件,添加为内嵌附件:
// 注入IWebHostEnvironment获取wwwroot路径 var imageFullPath = Path.Combine(_webHostEnvironment.WebRootPath, "assets/icon-positive-vote-1.png"); var imageStream = new FileStream(imageFullPath, FileMode.Open); // 以System.Net.Mail为例,创建内嵌附件 var inlineAttachment = new Attachment(imageStream, "icon-positive-vote-1.png", "image/png"); inlineAttachment.ContentId = "picture1_cid"; // 自定义唯一CID值 inlineAttachment.ContentDisposition.Inline = true; // 设置为内嵌显示 // 将附件添加到邮件对象 mailMessage.Attachments.Add(inlineAttachment);
- 修改模板替换逻辑,使用CID引用:
.Replace("[PICTURE1]", "cid:picture1_cid")
内容的提问来源于stack exchange,提问作者Jiddo
相关产品推荐
相关产品推荐

