SmtpClient()允许您将附件添加到邮件中,但是如果您想在邮件打开时显示图像而不是附加图像呢?
我记得,可以用大约4行代码来完成此操作,但是我不记得怎么做,也无法在MSDN站点上找到它。
编辑:我没有使用网站或任何东西,甚至没有IP地址。图像位于硬盘驱动器上。发送后,它们应成为邮件的一部分。因此,我想我可能想使用标签…但是我不太确定,因为我的计算机没有广播。
经常提到的一种解决方案是将图像添加为Attachment邮件,然后使用引用在HTML邮件正文中对其进行cid:引用。
Attachment
cid:
但是,如果改用LinkedResources集合,则内嵌图像仍会很好显示,但不会显示为邮件的其他附件。 这就是我们想要发生的事情 ,所以这就是我在这里所做的:
LinkedResources
using (var client = new SmtpClient()) { MailMessage newMail = new MailMessage(); newMail.To.Add(new MailAddress("you@your.address")); newMail.Subject = "Test Subject"; newMail.IsBodyHtml = true; var inlineLogo = new LinkedResource(Server.MapPath("~/Path/To/YourImage.png"), "image/png"); inlineLogo.ContentId = Guid.NewGuid().ToString(); string body = string.Format(@" <p>Lorum Ipsum Blah Blah</p> <img src=""cid:{0}"" /> <p>Lorum Ipsum Blah Blah</p> ", inlineLogo.ContentId); var view = AlternateView.CreateAlternateViewFromString(body, null, "text/html"); view.LinkedResources.Add(inlineLogo); newMail.AlternateViews.Add(view); client.Send(newMail); }
注意: 此解决方案AlternateView为您MailMessage的类型添加text/html。为了完整起见,您还应该添加AlternateView类型为text/plain,其中包含用于非HTML邮件客户端的电子邮件的纯文本版本。
AlternateView
MailMessage
text/html
text/plain