C# MailKit电子邮件不';t在Gmail上显示内联图像
我正在使用MailKit在C#ASP.NET MVC Framework 4.8应用程序中发送电子邮件。发送到桌面Outlook的HTML电子邮件可以显示内嵌图像。但是,当发送到Gmail web时,内联图像会附加到消息中,并显示C# MailKit电子邮件不';t在Gmail上显示内联图像,c#,mailkit,C#,Mailkit,我正在使用MailKit在C#ASP.NET MVC Framework 4.8应用程序中发送电子邮件。发送到桌面Outlook的HTML电子邮件可以显示内嵌图像。但是,当发送到Gmail web时,内联图像会附加到消息中,并显示alt文本。以下是简化的代码: var builder = new BodyBuilder (); var pathImage = Path.Combine (Misc.GetPathOfExecutingAssembly (), "Image.png&quo
alt
文本。以下是简化的代码:
var builder = new BodyBuilder ();
var pathImage = Path.Combine (Misc.GetPathOfExecutingAssembly (), "Image.png");
var image = builder.LinkedResources.Add (pathLogoFile);
image.ContentId = MimeUtils.GenerateMessageId ();
builder.HtmlBody = string.Format (@"<p>Hey!</p><img src=""cid:{0}"">", image.ContentId);
message.Body = builder.ToMessageBody ();
var builder=new BodyBuilder();
var pathImage=Path.Combine(Misc.GetPathOfExecutingAssembly(),“Image.png”);
var image=builder.LinkedResources.Add(pathLogoFile);
image.ContentId=MimeUtils.GenerateMessageId();
builder.HtmlBody=string.Format(@“Hey!”,image.ContentId);
message.Body=builder.ToMessageBody();
根据人们的说法(例如),它需要一个备选视图
,在MailKit
(示例)中变成MultipartAlternative
。但是如何处理LinkedResources
,它仅在BodyBuilder
对象上受支持
谢谢。这里是工作解决方案和评论;希望这能帮助下一个人
// Using HtmlAgilityPack
var doc = new HtmlDocument();
doc.LoadHtml(Body); // Load your html text here
// Loop over the img tags in html doc
foreach (var node in doc.DocumentNode.SelectNodes("//img"))
{
// File path to the image. We get the src attribute off the current node for the file name.
var file = Path.Combine(ImagesRootPath, node.GetAttributeValue("src", ""));
if (!File.Exists(file))
{
continue;
}
// Set content type to the current image's extension, such as "png" or "jpg"
var contentType = new ContentType("image", Path.GetExtension(file));
var contentId = MimeKit.Utils.MimeUtils.GenerateMessageId();
var image = (MimePart) bodyBuilder.LinkedResources.Add(file, contentType);
image.ContentTransferEncoding = ContentEncoding.Base64;
image.ContentId = contentId;
// Set the current image's src attriubte to "cid:<content-id>"
node.SetAttributeValue("src", $"cid:" + contentId);
}
bodyBuilder.HtmlBody = doc.DocumentNode.OuterHtml;
//使用HtmlAgilityPack
var doc=新的HtmlDocument();
doc.LoadHtml(正文);//在此处加载html文本
//在html文档中循环img标记
foreach(doc.DocumentNode.SelectNodes(“//img”)中的var节点)
{
//我们从当前节点获取文件名的src属性。
var file=Path.Combine(ImagesRootPath,node.GetAttributeValue(“src”,下称“));
如果(!File.Exists(File))
{
继续;
}
//将内容类型设置为当前图像的扩展名,例如“png”或“jpg”
var contentType=new contentType(“image”,Path.GetExtension(file));
var contentId=MimeKit.Utils.MimeUtils.GenerateMessageId();
var image=(MimePart)bodyBuilder.LinkedResources.Add(文件,contentType);
image.ContentTransferEncoding=ContentEncoding.Base64;
image.ContentId=ContentId;
//将当前映像的src属性设置为“cid:”
SetAttributeValue(“src”,“$”cid:“+contentId”);
}
bodyBuilder.HtmlBody=doc.DocumentNode.OuterHtml;
从两篇文章的组合中: