当前位置: 首页 > 编程语言 > C#

发送包含嵌入图像和纯文本的html电子邮件,其中包含与C#中的附件相同的图像分享

时间:2023-04-11 11:56:44 C#

C#学习教程:在C#中发送带有与附件相同图像的嵌入图像和纯文本的html电子邮件带有纯文本和HTML版本的电子邮件。电子邮件需要一张图片(不是我可以在其他地方托管的图片),如果客户端以html格式查看它并附加到纯文本视图,则应该将其嵌入。这可能适用于所有普通客户吗?我最接近的做法是将图像创建为附件(而不是链接资源),然后使用cid:filename.jpg在html中引用它。但这在gmail中不起作用(它不显示html中的图像)。此代码片段适用于Outlook2010和gmail。我通过将纯文本部分临时放在电子邮件中来测试纯文本邮件,这使gmail可以使用它。它还演示了一些其他很酷的东西,例如电子邮件模板和选项卡替换。publicvoidSendEmailWithPicture(stringemail,byte[]image){stringfilename="AttachmentName.jpg";LinkedResourcelinkedResource=newLinkedResource(newMemoryStream(image),"image/jpg");linkedResource.ContentId=文件名;linkedResource.ContentType.Name=文件名;this.Send(EmailTemplates.sendpicture,this.Subjects.SendPicture,newList(){email},this.ReplyTo,tagValues:newDictionary(){{"ImageAttachmentName","cid:"+filename}},htmlLinkedResources:新的列表(){链接资源});}privatevoidSend(EmailTemplatestemplate,stringsubject,Listto,stringreplyTo,DictionarytagValues=null,Listattachments=null,ListhtmlLinkedResources=null){try{MailMessagemailMessage=newMailMessage();//设置电子邮件标题。to.ForEach(t=>mailMessage.To.Add(newMailAddress(t)));mailMessage.ReplyToList.Add(新邮件地址(replyTo));mailMessage.Subject=主题;字符串fullTemplatePath=Path.Combine(this.TemplatePath,EMAIL_TEMPLATE_PATH);//加载邮件正文varhtmlBody=File.ReadAllText(Path.Combine(fullTemplatePath,Path.ChangeExtension(template.ToString(),"html")));vartextBody=File.ReadAllText(Path.Combine(fullTemplatePath,Path.ChangeExtension(template.ToString(),"txt")));//替换邮件中的标签if(tagValues!=null){foreach(varentryintagValues){stringtag="{{"+entry.Key+"}}";htmlBody=htmlBody.Replace(tag,entry.Value);textBody=textBody.Replace(tag,entry.Value);}}//创建纯文本替代视图stringbaseTxtTemplate=File.ReadAllText(Path.Combine(fullTemplatePath,TXT_BASE_TEMPLATE));textBody=baseTxtTemplate.Replace(TAG_CONTENT,textBody);AlternateViewtextView=AlternateView.CreateAlternateViewFromString(textBody,newSystem.Net.Mime.ContentType("text/plain"));//创建html替代视图stringbaseHtmlTemplate=File.ReadAllText(Path.Combine(fullTemplatePath,HTML_BASE_TEMPLATE));HTmlBody=baseHtmlTemplate.Replace(TAG_CONTENT,htmlBody);AlternateViewhtmlView=AlternateView.CreateAlternateViewFromString(htmlBody,newSystem.Net.Mime.ContentType("text/html"));//添加任何html链接资源if(htmlLinkedResources!=null){htmlLinkedResources.ForEach(lr=>htmlView.LinkedResources.Add(lr));htmlLinkedResources.ForEach(lr=>textView.LinkedResources.Add(lr));}//添加两个视图(如果最后添加,gmail将始终显示纯文本版本)mailMessage.AlternateViews.Add(textView);mailMessage.AlternateViews.Add(htmlView);//添加任何附件if(attachments!=null){attachments.ForEach(a=>mailMessage.Attachments.Add(a));}//发送邮件.SmtpClientsmtp=newSmtpClient();smtp.发送(邮件消息);}catch(Exceptionex){thrownewException(String.Format("发送电子邮件时出错(to:{0},replyto:{1})",String.Join(",",to),replyTo),ex);纯文本视图就是这样,它是纯文本,没有图像可见。您可以附上照片,但不能让他们查看。查看Outlook发送的原始电子邮件,了解如何显示内嵌附件的示例。例如,其他人编写了一些代码:http://blog.devexperience.net/en/12/Send_an_Email_in_CSharp_with_Inline_attachments.aspx-显然上面的链接不再有效-快速谷歌提供了以下示例来内联图像以上是C#学习教程:发送嵌入图片和纯文本的html邮件,里面包含的图片和C#中的附件一样分享所有内容,如果对你有用,需要了解更多C#学习教程,希望大家付费更多关注——stringhtmlBody="Picture";AlternateViewavHtml=AlternateView.CreateAlternateViewFromString(htmlBody,null,MediaTypeNames.Text.Html);//为每个嵌入的图像创建一个LinkedResource对象LinkedResourcepic1=newLinkedResource("pic.jpg",MediaTypeNames.Image.Jpeg);pic1.ContentId="图片1";avHtml.LinkedResources.Add(pic1);//添加备用视图而不是使用MailMessage.BodyMailMessagem=newMailMessage();m.AlternateViews.Add(avHtml);//地址并发送消息m.From=newMailAddress("email1@host.com","Fromguy");m.To.Add(newMailAddress("email2@host.com","Toguy"));m.Subject="使用替代视图的图片";SmtpClient客户端=newSmtpClient("mysmtphost.com");client.Send(m);本文收集自网络,不代表立场,如涉及侵权,请点击维权联系管理员删除,如需转载请注明来源:

最新推荐
猜你喜欢