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

标签 c# inline smtpclient

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/

相关文章:

c# - 查找不同的二维数组对

c# - 使用C#的指纹读取器软件

javascript - 内联 javascript firefox 错误?

html - 为什么我的代码没有显示我选择的字体和位置?我刷新并显示了一秒钟

c# - Gmail SMTP 客户端在 Azure 上失败

c# - Windows Phone 8 - 在项目中的现有 txt 文件中读写

c# - 我们如何在 MVVM 模式中为 WPF 和 SL 实现更改通知传播?

C++ _inline 在单例中被忽略并出现在我的探查器中。怎么会?

c# - 我可以在调用 client.Send() 之前测试 SmtpClient 吗?

c# - 无法通过 GoDaddy SMTP 发送电子邮件