Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MailKit电子邮件不';t在Gmail上显示内联图像_C#_Mailkit - Fatal编程技术网

C# MailKit电子邮件不';t在Gmail上显示内联图像

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

我正在使用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");
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;
从两篇文章的组合中: