向System.Net.Mail消息中添加图片我的解决方案是将一些图片存储在Resources.resx文件中。我想在我的电子邮件中使用这些图片。我已将图像加载到一个变量中:BitmapmyImage=newBitmap(Resources.Image);现在我想把它放在我用来创建HTML电子邮件的AlternateView字符串的HTML中。只是需要一些帮助。这是HTML字符串(部分):body+="任何帮助将不胜感激谢谢!编辑:这是整个代码块。我想我已经接近它了,只是缺乏经验阻碍了这里:)我试着把它转换成某种东西就像建议的字节让我更进一步。仍然没有渲染图像。我在这里没有做一些事情。非常感谢大家的帮助!这是代码(图像所需的HTML在字符串body=代码的3行中):if(emailTo!=null){BitmapmyImage=newBitmap(Resources.comcastHeader);ImageConverteric=newImageConverter();Byte[]ba=(Byte[])ic.ConvertTo(myImage,typeof(Byte[]));MemoryStreamimage1=newMemoryStream(ba);LinkedResourceheaderImage=newLinkedResource(image1,"image/jpeg");headerImage.ContentId="companyLogo";System.Net.Mail.MailMessage消息=newSystem.Net.Mail.MailMessage();message.To.Add(""+emailTo+"");message.Subject=""+customer+"您的订单正在处理中...";message.From=newSystem.Net.Mail.MailAddress("noreply@https://stackoverflow.com/questions/19910871/adding-image-to-system-net-mail-message/stormcopper.com");字符串主体=“”;身体+=“”;body+="您好"+客户+",感谢您在https://stackoverflow.com/questions/19910871/adding-image-to-system-net-mail-message/"+store+"购物。您的订单正在处理并将运送给您很快。我们想借此机会感谢您选择StormCopperComponents,我们希望您对您的购买完全满意。请检查您的信息并确保所有信息正确无误。如果您的订单有任何错误,请立即在这里联系我们。";body+="这是您的订单信息:";body+="联系信息姓名:"+customer+"地址:"+street+""+city+","+state+""+zip+"Email:"+emailTo+"Phone:"+phone+"";body+="ProductsOrdered"+productInformation+"";body+="PricingInformation小计:$"+subTotal+"Shipping:$"+shippingInfo+"Tax:$"+taxInfo+"Total:$"+total+"";body+="Thankyouforshoppingwithus!StormCopperComponents";body+="这是一封由storecopper发送的自动生成的电子邮件。如果您回复此邮件,您的电子邮件将不会发送到StormCopperComponents。如果您需要更改任何信息,或有任何疑问有关您的订单的信息,请使用此电子邮件中提供的信息与我们联系。”;ContentTypemimeType=newSystem.Net.Mime.ContentType("text/html");AlternateViewalternate=AlternateView.CreateAlternateViewFromString(body,mimeType);message.AlternateViews.Add(alternate);System.Net.Mail.SmtpClientsmtp=newSystem.Net.Mail.SmtpClient("########");smtp.Send(message);}你需要通过它们作为CID/链接资源添加到电子邮件中??这是我之前使用过的一些代码,它们运行良好。我希望这会给你一些指导:创建一个AlternateView:AlternateViewav=AlternateView.CreateAlternateViewFromString(body,null,isHTML?System.Net.Mime.MediaTypeNames.Text.Html:System.Net.Mime.MediaTypeNames.Text.Plain)创建链接资源:LinkedResourcelogo=newLinkedResource("SomeRandomValue",System.Net.Mime.MediaTypeNames.Image.Jpeg);logo.ContentId=currentLinkedResource.Key;logo.ContentType=newSystem.Net.Mime.ContentType("图片/jpg");//将其添加到备用视图av.LinkedResources.Add(logo);//最后在邮件中添加alternateview:msg.AlternateView.Add(av);这里有一些文档可以帮助您了解AlternativeView和LinkedResources是什么以及它是如何工作的:http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews(v=vs.110).aspxhttp://msdn.microsoft.com/en-us/library/system.net.mail.linkedresource(v=vs.110).aspxhttp://msdn.microsoft.com/en-us/library/ms144669(v=vs.110).aspx在HTML本身中,您需要执行以下操作:"";请注意,CID后跟字符串格式{0}-然后我用它来替换随机值。UPDATE回去评论海报评论……这是海报的工作解决方案:stringbody="blahblahblah...bodygoesherewiththeimagetag:";byte[]reader=File.ReadAllBytes("E:\TestImage.jpg");MemoryStreamimage1=newMemoryStream(阅读器);AlternateViewav=AlternateView.CreateAlternateViewFromString(body,null,System.Net.Mime.MediaTypeNames.Text.Html);LinkedResourceheaderImage=newLinkedResource(image1,System.Net.Mime.MediaTypeNames.Image.Jpeg);headerImage.ContentId="companyLogo";headerImage.ContentType=newContentType("图片/jpg");av.LinkedResources.Add(headerImage);System.Net.Mail.MailMessage消息=newSystem.Net.Mail.MailMessage();message.AlternateViews.Add(av);message.To.Add(emailTo);message.Subject="您的订单正在处理中...";message.From=newSystem.Net.Mail.MailAddress("xxx@example.com");ContentTypemimeType=newSystem.Net.Mime.ContentType("text/html");AlternateView替代=AlternateView.CreateAlternateViewFromString(正文,mimeType);message.AlternateViews.Add(备用);//然后发送消息!一种选择是将图像放在主机中,并将url放在src中,例如“src='http://www.host/myImage.jpg'”这样您就不必在每个邮件,更敏捷如果它对任何人有帮助,这里有一个基于Ahmedilyas非常有用的答案的版本,它将实际的位图传递到内存流,并包括一个为各种对象实现IDisposable的使用块-publicvoidSendMailExample(stringemailAddressTo,stringhexColour){//为LinkedResource提供一个ID,该ID应传递到标签的“cid”中-varlinkedResourceId="mylogo";varsb=newStringBuilder("");sb.Append("这是带有img标签的HTML邮件正文...");sb.Append($"");sb.Append("");varemailBodyHtml=sb.ToString();varemailBodyPlain="这是纯文本电子邮件正文";使用(varmessage=newMailMessage())使用(varlogoMemStream=newMemoryStream())使用(varaltViewHtml=AlternateView.CreateAlternateViewFromString(emailBodyHtml,null,System.Net.Mime.MediaTypeNames.Text.Html))使用(varaltViewPlainText=AlternateView.CreateAlternateViewFromString(emailBodyPlain,null,System.Net.Mime.MediaTypeNames.Text.Plain))使用(varclient=newSystem.Net.Mail.SmtpClient(_smtpServer){Port=25,DeliveryMethod=System.Net.Mail.SmtpDeliveryMethod.Network,UseDefaultCredentials=false,EnableSsl=false}){message.To.Add(emailAddressTo);message.From=newMailAddress(_emailAddressFrom);message.Subject="这是邮件主题";//假设GetLogo()只返回一个位图(对于我的特殊问题,我必须返回指定颜色的徽标,因此hexColour参数!)BitmaplogoBitmap=GetLogo(hexColour);logoBitmap.Save(logoMemStream,System.Drawing.Imaging.ImageFormat.Png);logoMemStream.Position=0;使用(LinkedResourcelogoLinkedResource=newLinkedResource(logoMemStream)){logoLinkedResource.ContentId=linkedResourceId;logoLinkedResource.ContentType=newContentType("image/png");altViewHtml.LinkedResources.Add(logoLinkedResource);message.AlternateViews.Add(altViewHtml);message.AlternateViews.Add(altViewPlainText);客户端。发送(消息);我知道这是一篇旧文章,但如果有人仍在寻找答案(就像我一样),那么我有一个更简单的答案您可以使用直接将文件路径作为参数的LinkedResource对象的简单重载。所以不需要显式地将图像加载到内存流中。当然,此示例假设您可以访问磁盘上的图像-这是对我有用的完整功能代码-publicSystem.Net.Mail.AlternateViewGetAlternateView(stringMessageText,stringLogoPath,boolbSilent){try{MessageText+="";System.Net.Mail.AlternateViewview=System.Net.Mail.AlternateView.CreateAlternateViewFromString(MessageText,null,"text/html");System.Net.Mail.LinkedResourcelinked=newSystem.Net.Mail.LinkedResource(HttpContext.Current.Request.PhysicalApplicationPath+LogoPath);linked.ContentId="SystemEmail_HTMLLogoPath";查看.LinkedResources.Add(链接);返回视图;您不应将Bitmap对象分配给标记,因为它需要图像路径。替换成:body+="有以下几点:以上就是C#学习教程:为System.Net.Mail消息分享添加图片的全部内容。如果对大家有用,还需要详细了解一下C#学习教程,希望大家多多关注—body+=》本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
