一尘不染

C#使用SmtpClient发送带有图像内联的邮件

c#

SmtpClient()允许您将附件添加到邮件中,但是如果您想在邮件打开时显示图像而不是附加图像呢?

我记得,可以用大约4行代码来完成此操作,但是我不记得怎么做,也无法在MSDN站点上找到它。

编辑:我没有使用网站或任何东西,甚至没有IP地址。图像位于硬盘驱动器上。发送后,它们应成为邮件的一部分。因此,我想我可能想使用标签…但是我不太确定,因为我的计算机没有广播。


阅读 414

收藏
2020-05-19

共1个答案

一尘不染

经常提到的一种解决方案是将图像添加为Attachment邮件,然后使用引用在HTML邮件正文中对其进行cid:引用。

但是,如果改用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邮件客户端的电子邮件的纯文本版本。

2020-05-19