首页 > 其他 > 详细

通过代码在邮件中嵌入图片

时间:2015-12-31 19:02:49      阅读:1600      评论:0      收藏:0      [点我收藏+]

在一个开发需求中需要将一张图片嵌入邮件中并发送出去。

正常的邮件发送代码(c#)如下:

MailMessage mail = new MailMessage(from, to, subject, emailBody);

如果需要邮件支持Html,需要将IsBodyHtml设置成true:mail.IsBodyHtml = true;

1.第一个想到的方式是在emailBody中添加<img scr="">标签,但如果收到邮件的用户无法访问scr中的资源链接,将会导致图片无法访问。

2.找到的第二种方式是data:image/png;base64,emailBody中的图片在浏览器中可以展示,但在outlook被屏蔽,无法查看。代码如下:

<img src="data:image/png;base64,RAAAtuhhx4dbgYKAAA7...more data....." alt="test">
string base64Str = Convert.ToBase64String(File.ReadAllBytes(@"C:\Temp\test.png"));

3.第三种方式,是使用“cid:”,基本可以满足需求。代码如下:

LinkedResource inline = new LinkedResource(@“C:\Temp\test.png”, MediaTypeNames.Image.Jpeg);
inline.ContentId = Guid.NewGuid().ToString();
string htmlBody = @"<img src=‘cid:" + inline.ContentId + @"‘ />";
AlternateView alternateView = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
alternateView.LinkedResources.Add(inline);

MailMessage mail = new MailMessage(from, to);
mail.Subject = "subject";
mail.IsBodyHtml = true;
mail.AlternateViews.Add(alternateView);

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

实现中多出了两个概念LinkedResource和AlternateView。

LinkResouce表示电子邮件附件中嵌入的外部资源,比如图片。但此类资源不是以附件形式展示在邮件中。如需附件需要使用Attachment

AlternateView可以指定一个电子邮件的不同格式副本。

参考:

http://stackoverflow.com/questions/18358534/send-inline-image-in-email

https://sendgrid.com/blog/embedding-images-emails-facts/

通过代码在邮件中嵌入图片

原文:http://www.cnblogs.com/dingtingli/p/5092500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!