如何在邮件代码中嵌入Content文件夹内的本地图片?
要在邮件正文中嵌入图片,首先得把邮件切换成HTML格式——纯文本模式根本没法展示图片,这是核心前提。接下来我给你一步步改代码,实现你的需求:
核心步骤说明
- 开启邮件的HTML正文模式
- 把邮件内容重构为HTML格式,用
<img>标签通过**Content ID(CID)**引用图片 - 将本地图片作为
LinkedResource添加到邮件中,关联对应的CID
修改后的完整代码示例
假设你用的是.NET的System.Net.Mail类库(从你的代码风格看大概率是),代码调整如下:
mm.Subject = "CompanyName "; // 构建HTML格式的邮件正文,注意img标签里的cid:companyLogo对应后面的ContentId string body = $@" <p>Dear {CustomerMasterObj.CustomerName},</p> <p> </p> <p>{EmailTemplateObj.EmailMsg}</p> <p><a href=""{Userurl}"">{Userurl}</a></p> <p>Thank you in advance.</p> <p> </p> <p>Yours sincerely,</p> <p> </p> <p>John Doe</p> <!-- 嵌入Content文件夹里的图片 --> <p><img src=""cid:companyLogo"" alt=""Company Image"" style=""max-width: 200px;""></p>"; // 开启HTML正文模式 mm.IsBodyHtml = true; mm.Body = body; // 获取Content文件夹里图片的绝对路径(根据你的项目类型调整路径获取方式) // 如果是Web项目,用 Server.MapPath("~/Content/your-image-file.png") // 如果是桌面项目,用 Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content", "your-image-file.png") string imageAbsolutePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content", "your-image.png"); // 创建LinkedResource关联图片,设置ContentId和MIME类型 LinkedResource embeddedImage = new LinkedResource(imageAbsolutePath, "image/png"); embeddedImage.ContentId = "companyLogo"; // 必须和HTML里cid:后面的内容完全一致 // 创建HTML视图并添加嵌入资源 AlternateView htmlMailView = AlternateView.CreateAlternateViewFromString(body, null, "text/html"); htmlMailView.LinkedResources.Add(embeddedImage); mm.AlternateViews.Add(htmlMailView);
关键注意事项
- 路径正确性:一定要确保获取到图片的绝对路径,相对路径在邮件发送时会找不到文件
- CID一致性:HTML中
cid:后面的ID必须和LinkedResource.ContentId完全匹配,大小写敏感 - MIME类型匹配:根据你的图片格式设置正确的MIME类型,比如jpg用
image/jpeg,gif用image/gif - 备用文本:给
<img>添加alt属性,避免图片加载失败时用户看不到提示信息
如果你的项目不是.NET,核心逻辑也是类似的:开启HTML邮件,将图片作为内嵌资源添加,通过CID在HTML中引用即可。
内容的提问来源于stack exchange,提问作者Programmeurwonder
相关产品推荐
相关产品推荐

