如何使用.NET中嵌入多个图像的电子邮件正文 [英] How to embed multiple images in email body using .NET
问题描述
我写嵌入在电子邮件正文(HTML),发送电子邮件到用户与多个图像(图表)程序
I'm writing a program that sends emails to users with multiple images (charts) embedded in the Email message body (HTML).
当我尝试了样品位于here..which运作良好时,我不得不仅嵌入一个图像
http://www.systemnetmail.com/faq/4.4.aspx 。
When I tried the sample located here..which worked well when I have to embed only one image http://www.systemnetmail.com/faq/4.4.aspx.
但是,当我尝试使用下面的code嵌入多个图像,没有任何图像被嵌入,而是被作为附件发送。
But, when i tried to embed multiple images using the below code, none of the images are being embedded , instead they are sent as attachments.
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源代码如下所示:
Any clues as what I'm missing? I checked the .htm file which is also sent as attachment with the email, and html source looks as follows:
<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>
所以,Q是如何在HTML正文发送多张图片,而不是作为附件。
So the Q is how to send multiple images in the html body , not as attachment.
推荐答案
所以,我觉得想通了实际的问题是什么
它在这行
So, I think figured out what the actual problem is Its in this line
// Alternate view for embedded images
AlternateView avText = AlternateView.CreateAlternateViewFromString(metric.Name, null, MediaTypeNames.Text.Html);
AlternateView avImages = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
正如你所看到的,我的意见被指定为Text.Html,所以第一次一个覆盖下一个,所以我只能看到文字和图片作为附件发送
As you can see, both my views are specified as Text.Html, so the the 1st one is overriding the next one and so I only see text and images are sent as attachments
我做了如下的变化和它的工作如预期
I made the following change and it worked as expected
AlternateView avText = AlternateView.CreateAlternateViewFromString(metric.Name, null, **MediaTypeNames.Text.Plain**);
AlternateView avImages = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
这篇关于如何使用.NET中嵌入多个图像的电子邮件正文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!