使用c #windows应用程序在电子邮件正文中添加多个图像(内联)

我搜索了几次并找到了解决方案,但都只支持一个图像。最后我使用了这个代码。 但问题是,如果html包含多个图像,则只有一个图像显示在正文中,其他图像将作为附件出现。

string inputHtmlContent = htmlbody; string outputHtmlContent = string.Empty; var myResources = new List(); if ((!string.IsNullOrEmpty(inputHtmlContent))) { var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(inputHtmlContent); HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//img"); if (nodes !=null) { foreach (HtmlNode node in nodes) { if (node.Attributes.Contains("src")) { string data = node.Attributes["src"].Value; string imgPath = Application.StartupPath+"\\"+data; var imgLogo = new LinkedResource(imgPath); imgLogo.ContentId = Guid.NewGuid().ToString(); imgLogo.ContentType = new ContentType("image/jpeg"); myResources.Add(imgLogo); node.Attributes["src"].Value = string.Format("cid:{0}", imgLogo.ContentId); outputHtmlContent = doc.DocumentNode.OuterHtml; } } } else { outputHtmlContent = inputHtmlContent; } AlternateView av2 = AlternateView.CreateAlternateViewFromString(outputHtmlContent, null, MediaTypeNames.Text.Html); foreach (LinkedResource linkedResource in myResources) { av2.LinkedResources.Add(linkedResource); } msg.AlternateViews.Add(av2); 

请帮我解决一下,如何在电子邮件正文中显示所有图片?…

你可以将图像附加到邮件,然后放入img标签,并以这种方式使用附件的ContentId作为src

 private void denMailButton_Click(object sender, EventArgs e) { string subject = "Subject"; string body = @"Image 1:  
Image 2:
Some Other Content"; MailMessage mail = new MailMessage(); mail.From = new MailAddress("from@example.com"); mail.To.Add(new MailAddress("to@example.com")); mail.Subject = subject; mail.Body = body; mail.Priority = MailPriority.Normal; string contentID1 = Guid.NewGuid().ToString().Replace("-", ""); string contentID2 = Guid.NewGuid().ToString().Replace("-", ""); body = body.Replace("$CONTENTID1$", "cid:" + contentID1); body = body.Replace("$CONTENTID2$", "cid:" + contentID2); AlternateView htmlView = AlternateView.CreateAlternateViewFromString(body, null, "text/html"); //path of image or stream LinkedResource imagelink1 = new LinkedResource(@"D:\1.png", "image/png"); imagelink1.ContentId = contentID1; imagelink1.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; htmlView.LinkedResources.Add(imagelink1); LinkedResource imagelink2 = new LinkedResource(@"D:\2.png", "image/png"); imagelink2.ContentId = contentID2; imagelink2.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; htmlView.LinkedResources.Add(imagelink2); mail.AlternateViews.Add(htmlView); SmtpClient client = new SmtpClient(); client.Host = "mail.example.com"; client.Credentials = new NetworkCredential("from@example.com", "password"); client.Send(mail); }

这是截图:

在此处输入图像描述

试试这个代码。 这将为excel,csv,pdf和内联附件生成附件,即在png格式的图像的电子邮件正文中。 对于png格式,多个图像将通过GetEmbeddedImage方法一个接一个地嵌入内联 。 您可以根据您的要求进行自定义。

 SmtpClient smtpServer = new SmtpClient(smtpServerName); smtpServer.Port = 25; smtpServer.Credentials = new System.Net.NetworkCredential(userName, password); //smtpServer.EnableSsl = true; MailMessage smtpEmail = new MailMessage(); string messageBodyImage = @""; toAddressList = toAddress.Split(';'); foreach (string toEmail in toAddressList) smtpEmail.To.Add(toEmail); smtpEmail.From = new MailAddress(fromAddress); smtpEmail.Body = messageBody; smtpEmail.Subject = subject; foreach (string format in fileExtension) { switch (format) { case "PNG": smtpEmail.IsBodyHtml = true; smtpEmail.AlternateViews.Add(GetEmbeddedImage(reportByteStream, messageBodyImage, format)); break; case "CSV": smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, "text/csv")); break; case "XLS": smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, "application/vnd.ms-excel")); break; default: // For PDF smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, MediaTypeNames.Application.Pdf)); break; } } 

嵌入多个图像的方法。

  private AlternateView GetEmbeddedImage(Dictionary streamAttachment, string msgTemplate, string fileFormat) { LinkedResource imageFile = null; AlternateView alternateView = null; string msgBody = string.Empty; try { List imageFiles = new List(); for (int page = 0; page < streamAttachment[fileFormat].Length; page++) { imageFile = new LinkedResource(new MemoryStream(streamAttachment[fileFormat][page])); imageFile.ContentId = Guid.NewGuid().ToString(); msgBody = msgBody + "
" + string.Format(msgTemplate, imageFile.ContentId); imageFiles.Add(imageFile); } alternateView = AlternateView.CreateAlternateViewFromString(msgBody, null, MediaTypeNames.Text.Html); imageFiles.ForEach(img => alternateView.LinkedResources.Add(img)); } catch (Exception Ex) { } return alternateView; }