【发布时间】:2015-12-25 20:38:01
【问题描述】:
当我通过 Outlook 或 gmail 向 gmail 电子邮件地址发送电子邮件时,我可以添加直接显示在 gmail 网络界面中的内联图像:
工作电子邮件的相关原始邮件标题和原始正文部分:
--089e0158b6909948880520cef593
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Image there?<div><img src=3D"cid:ii_if3zqhar0_15014363be0a=
41b2" width=3D"10" height=3D"3"><br>=E2=80=8BHope so!<br></div></div>
--089e0158b6909948880520cef593--
--089e0158b69099488c0520cef594
Content-Type: image/png; name="test.png"
Content-Disposition: inline; filename="test.png"
Content-Transfer-Encoding: base64
Content-ID: <ii_if3zqhar0_15014363be0a41b2>
X-Attachment-Id: ii_if3zqhar0_15014363be0a41b2
iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAADFJREFUeNpi+A8BDCf/wwDD/1VIbBABIudDmAchokwgag9QAiwHVcsM
Z/5fCdYJEGAAuthJ+AVi5KgAAAAASUVORK5CYII=
--089e0158b69099488c0520cef594--
完整的工作原始电子邮件:Working raw-email。
但是,当我从.NET 通过System.Net.Mail 发送此类电子邮件时,它无法在 gmail 网络界面中运行,而是在任何其他电子邮件客户端(outlook、iphone 等)中运行:
非工作电子邮件的相关原始邮件标题和原始正文部分:
----boundary_3_6a0761ee-57e2-4bdd-b1f1-7302b3c8a7a1
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Image there?<br /><img src=3D"cid:test.png@71236720.91827344" /><=
br />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: <test.png@71236720.91827344>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAAGXRFWHRTb2Z0d2FyZQBB
ZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpi+A8BDCf/wwDD/1VIbBABIudDmAch
okwgag9QAiwHVcsMZ/5fCdYJEGAAuthJ+AVi5KgAAAAASUVORK5CYII=
----boundary_5_979e00c0-3fb9-46a0-b25c-1cee82cc15eb--
完整的非工作原始电子邮件:Nonworking raw-email。
这是我发送内联图像的代码:
SmtpClient client = new SmtpClient("real.server.on.the.internet");
MailMessage mail = new MailMessage("Flattiverse <xxx@flattiverse.com>", "Ghostie <xxx@gmail.com>");
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?<br /><img src=\"cid:test.png@71236720.91827344\" /><br />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 实现?
【问题讨论】:
-
它是否适用于其他电子邮件客户端?
-
它适用于 iPhone 邮件客户端和问题中提到的 Outlook。此外,它还可以在 gmx webmailer 中使用。
-
据我所知,我使用备用视图而不是附件创建了内联图像。
-
@CSharper 谢谢。这会在 GMail 中显示图像,但不会在 Outlook 中显示。我会看看每个邮件客户端的正确解决方案是什么,然后回答我自己的问题。如果您愿意,您还可以使用普通邮件客户端和 GMail 的解决方案来回答它,如果您想要声誉积分,我可以批准您的回答。
-
@Matthias :“常规邮件客户端的解决方案......”?内嵌图像的 SMTP 标准中没有任何机制——所有这些方法都是由各种客户端编写者发明的临时扩展,这是您遇到问题中描述的问题的原因之一。
标签: c# .net gmail system.net.mail inline-images