GMail没有显示内联图像(cid)我正在使用System.Net.Mail发送

当我通过outlook或gmail向gmail电子邮件地址发送电子邮件时,我可以添加直接显示在gmail web界面中的内嵌图像:

GMail web界面与工作内联图像

工作电子邮件的相关原始邮件标题和原始正文部分:

--089e0158b6909948880520cef593 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 
Image there?

=E2=80=8BHope so!
--089e0158b6909948880520cef593-- --089e0158b69099488c0520cef594 Content-Type: image/png; name="test.png" Content-Disposition: inline; filename="test.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_if3zqhar0_15014363be0a41b2 iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAADFJREFUeNpi+A8BDCf/wwDD/1VIbBABIudDmAchokwgag9QAiwHVcsM Z/5fCdYJEGAAuthJ+AVi5KgAAAAASUVORK5CYII= --089e0158b69099488c0520cef594--

完整的原始电子邮件: 工作原始电子邮件 。

但是,当我从.NET通过System.Net.Mail发送此类电子邮件时,它不能在gmail Web界面中工作,而是在任何其他电子邮件客户端(outlook,iphone等):

GMail web界面,没有工作的内嵌图像

非工作电子邮件的相关原始邮件头和原始部分:

 ----boundary_3_6a0761ee-57e2-4bdd-b1f1-7302b3c8a7a1 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable Image there?
Hope so! ----boundary_3_6a0761ee-57e2-4bdd-b1f1-7302b3c8a7a1-- ----boundary_5_979e00c0-3fb9-46a0-b25c-1cee82cc15eb Content-Type: image/png; name=test.png Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=test.png Content-ID: iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAAGXRFWHRTb2Z0d2FyZQBB ZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpi+A8BDCf/wwDD/1VIbBABIudDmAch okwgag9QAiwHVcsMZ/5fCdYJEGAAuthJ+AVi5KgAAAAASUVORK5CYII= ----boundary_5_979e00c0-3fb9-46a0-b25c-1cee82cc15eb--

完整的非工作原始电子邮件: 非工作原始电子邮件 。

这是我发送内联图片的代码:

 SmtpClient client = new SmtpClient("real.server.on.the.internet"); MailMessage mail = new MailMessage("Flattiverse ", "Ghostie "); mail.BodyEncoding = System.Text.Encoding.UTF8; mail.SubjectEncoding = System.Text.Encoding.UTF8; AlternateView plainView = AlternateView.CreateAlternateViewFromString("Please view as HTML-Mail.", System.Text.Encoding.UTF8, "text/plain"); plainView.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable; AlternateView htmlView = AlternateView.CreateAlternateViewFromString("Image there?

Hope so!", System.Text.Encoding.UTF8, "text/html"); htmlView.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable; mail.AlternateViews.Add(plainView); mail.AlternateViews.Add(htmlView); mail.Subject = "7"; Attachment attachment = new Attachment("test.png", "image/png"); attachment.ContentId = "test.png@71236720.91827344"; attachment.ContentDisposition.Inline = true; attachment.ContentDisposition.DispositionType = "inline; filename=test.png"; mail.Attachments.Add(attachment); client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("working_username", "working_password"); client.Send(mail);

我还尝试了GMail格式的cid(例如ii_012345678_9abcdef0123456789 )以及其他相关问题中陈述的许多其他内容。 (在邮件正文中使用’代替’等)

问题:我怎么办错误,GMail不显示我的内联图像? 我如何更改代码? 也许用System.Net.Mail无法实现我想要的东西?

当作为附件添加时,GMail Web界面中会忽略内联图像。 将图像添加为备用视图时,Outlook会忽略它。

要添加与GMail Web界面和Outlook(以及iPhone邮件客户端)兼容的内嵌图像,您必须将其添加为LinkedResource

问题中的示例代码必须修复如下:

 SmtpClient client = new SmtpClient("real.server.on.the.internet"); MailMessage mail = new MailMessage("Flattiverse ", "Ghostie "); mail.BodyEncoding = System.Text.Encoding.UTF8; mail.SubjectEncoding = System.Text.Encoding.UTF8; LinkedResource image = new LinkedResource("test.png", "image/png"); image.ContentId = "test.png@71236720.91827344"; image.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; image.ContentType.Name = "test.png@71236720.91827344"; image.ContentLink = new Uri("cid:test.png@71236720.91827344"); AlternateView plainView = AlternateView.CreateAlternateViewFromString("Please view as HTML-Mail.", System.Text.Encoding.UTF8, "text/plain"); plainView.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable; AlternateView htmlView = AlternateView.CreateAlternateViewFromString("Image there?

Hope so!", System.Text.Encoding.UTF8, "text/html"); htmlView.LinkedResources.Add(image); htmlView.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable; mail.AlternateViews.Add(plainView); mail.AlternateViews.Add(htmlView); mail.Subject = "15"; client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("working_username", "working_password"); client.Send(mail);