c# - 如何使用 .NET 在电子邮件正文中嵌入多个图像

标签 c# image system.net.mail

我正在编写一个程序,向用户发送电子邮件正文 (HTML) 中嵌入的多个图像(图表)。

当我尝试位于此处的示例时..当我只需要嵌入一张图片时效果很好 http://www.systemnetmail.com/faq/4.4.aspx .

但是,当我尝试使用以下代码嵌入多个图像时,没有图像被嵌入,而是作为附件发送。

public MailMessage MailMessage(Metric metric, DateTime date)
{
    MailMessage msg = new MailMessage();
    msg.From = new MailAddress("test@gmail.com", "User1");
    msg.To.Add(new MailAddress("test@gmail.com"));
    msg.Subject = "Trend for metric: " + metric.Name;
    msg.IsBodyHtml = true;

    // Generate the charts for the given metric
    var charts = this.GenerateCharts(metric, date);
    int i = 0;
    string htmlBody = "<html><body>";
    List<LinkedResource> resources = new List<LinkedResource>();
    foreach (var chart in charts)
    {
        string imageTag = string.Format("<img src=cid:chart{0} /><br>", i);
        htmlBody += imageTag;
        LinkedResource graph = new LinkedResource(chart.Value, "image/jpeg");
        graph.ContentId = "chart" + i;
        resources.Add(graph);
        i++;
    }

    htmlBody += "</body></html>";

    // Alternate view for embedded images
    AlternateView avText = AlternateView.CreateAlternateViewFromString(metric.Name, null, MediaTypeNames.Text.Html);
    AlternateView avImages = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);

    // Add all the images as linked resources
    resources.ForEach(x => avImages.LinkedResources.Add(x));

    // Add the views for image
    msg.AlternateViews.Add(avText);
    msg.AlternateViews.Add(avImages);


    return msg;
}

有什么线索是我遗漏的吗? 我检查了也作为电子邮件附件发送的 .htm 文件,html 源代码如下:

<html>><body><img src=cid:chart0 /><br><img src=cid:chart1 /><br><img src=cid:chart2/><br><img src=cid:chart3 /><br><img src=cid:chart4 /><br></body></html>

所以问题是如何在 html 正文中发送多个图像,而不是作为附件。

最佳答案

使用 System.Net.Mail 时在电子邮件中嵌入图像的另一种方法是

将本地驱动器中的图像附加到电子邮件,并为其分配一个 contentID,稍后在图像 URL 中使用此 contentID

这可以通过以下方式完成:

var contentID = "Image";
var inlineLogo = new Attachment(@"C:\Desktop\Image.jpg");
inlineLogo.ContentId = contentID;
inlineLogo.ContentDisposition.Inline = true;
inlineLogo.ContentDisposition.DispositionType = DispositionTypeNames.Inline;

msg.IsBodyHtml = true;
msg.Attachments.Add(inlineLogo);
msg.Body = "<htm><body> <img src=\"cid:" + contentID + "\"> </body></html>";

关于c# - 如何使用 .NET 在电子邮件正文中嵌入多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048758/

相关文章:

c# - 如何从数组创建字典

c# - 从 .ai 文件导出 Adob​​e Illustrator 图像

c# - 无法在 Roslyn 的新 nuget 中获取方法 SyntaxTree.ParseFile?

css - 如何在图像旁边流动文本

c# - Datagridview 上 ComboBoxColumn 中的 "SelectedIndexChanged"事件

CSS 表格单元格,中间有图像,然后在单元格底部有文本

android - 在android中以编程方式将图像转换为卡通和油画图像

c# - 来自 MemoryStream 的电子邮件附件为空

c# - 通过 Exchange Online (Office 365) 使用 System.Net.Mail 发送 SMTP 电子邮件