我找到了这个解决方案,用于在电子邮件正文中显示图片: Add image to body of an email
它工作正常,但它也将图像添加为电子邮件的附件。
Attachment inlineLogo = new Attachment(EmailLogo.ImageUrl);
mailMsg.Attachments.Add(inlineLogo);
string contentID = "Image";
inlineLogo.ContentId = contentID;
//To make the image display as inline and not as attachment
inlineLogo.ContentDisposition.Inline = true;
inlineLogo.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
//To embed image in email
mailMsg.Body = "<htm><body> <img height=\"49\" width=\"169\" src=\"cid:" + contentID + "\"> </body></html>";
有一行代码,评论显示为内联而不是附件,但此行无法正常工作,因为图片仍会附加到电子邮件中:
//To make the image display as inline and not as attachment
inlineLogo.ContentDisposition.Inline = true;
inlineLogo.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
如何阻止图片附加到电子邮件?
答案 0 :(得分:5)
使用AlternateView存储html代码,其中嵌入的图片为LinkedResource:
string contentID = "Image";
var inlineLogo = new LinkedResource(EmailLogo.ImageUrl, "image/png");
inlineLogo.ContentId = contentID;
var htmlView = AlternateView.CreateAlternateViewFromString(
"<html><body> <img height=\"30\" width=\"30\" src=\"cid:" + contentID + "\"> </body></html>",
Encoding.UTF8, "text/html");
htmlView.TransferEncoding = TransferEncoding.QuotedPrintable;
htmlView.LinkedResources.Add(inlineLogo);
mailMsg.AlternateViews.Add(htmlView);
P.S。将图像嵌入base24字符串并不是一个好主意,因为许多邮件客户端不支持这种能力。
答案 1 :(得分:2)
如果要在电子邮件中显示图像,则必须存在于某处。它作为消息有效负载的一部分附加(无论是&#34;内联显示&#34;还是作为真正的&#34;附件&#34;) - 或者当读取器从远程Web服务器获取时阅读电子邮件(并且可选择选择&#34;查看图像&#34;)
不将图像附加到电子邮件有效负载本身:
假设您已将图像存储在Web服务器上以下URL: http://www.example.com/images/myimage.jpg
...那么您的来源应该只是改变以反映:
mailMsg.Body = "<html><body> <img height=\"49\" width=\"169\" src=\"http://www.example.com/images/myimage.jpg\"> </body></html>";
根本不需要附上它。
答案 2 :(得分:1)
可以使用的替代方法是将内嵌图像嵌入,但通常也不会被电子邮件客户端过滤(现在通常就像垃圾邮件一样)您可以使用DataURL。
<img src="data:image/<type>;base64,<string>"/>
其中<type>
是图像类型,即jpg,gif,png,并且是base64字符串。只需将图像转换为base64字符串,然后使用上面的语法将其分配给源
例如,使用jpeg ......
mailMsg.Body = "<html><body> <img height=\"49\" width=\"169\" src=\"data:image/jpg;base64,<myPictureString>"\"> </body></html>";