SmtpClient() 允许您将附件添加到您的邮件,但是如果您想在邮件打开时显示一个图像而不是附加它怎么办?
我记得,它可以用大约 4 行代码完成,但我不记得是如何实现的,而且我在 MSDN 站点上找不到它。
编辑:我没有使用网站或任何东西,甚至没有使用 IP 地址。图像位于硬盘驱动器上。发送时,它们应该是邮件的一部分。所以,我想我可能想使用标签...但我不太确定,因为我的计算机没有广播。
最佳答案
经常提到的一种解决方案是将图像作为附件
添加到邮件中,然后使用cid:
引用在HTML 邮件正文中引用它。
但是,如果您改用 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
添加到text/html
类型的MailMessage
。为了完整起见,您还应该添加 text/plain
类型的 AlternateView
,其中包含用于非 HTML 邮件客户端的电子邮件的纯文本版本。
关于C# 使用 SmtpClient 发送带有内联图像的邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1212838/