我有一个应用程序,它发送带有嵌入图像的HTML格式的电子邮件。电子邮件在许多不同的桌面/ Web客户端上看起来很完美当在支持HTML电子邮件的移动电话上查看电子邮件时(在iPhone,WinMo 6.1上测试),图像显示为红色'X'。正确显示所有其他HTML。需要说明的是,问题仅发生在移动客户端而非桌面客户端上。
嵌入图片的代码工作得很完美,我不相信它有任何问题,但我在下面提供了一些快速示例代码,以防万一:
MailMessage mail = new MailMessage();
mail.To.Add("123@myemail.com");
mail.From = new MailAddress("456@ myemail.com");
mail.Subject = "Image sample - fails in mobile clients";
string Body = "Sample email text<img src=\"cid:imageId\" />";
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(Body, null, "text/html");
LinkedResource lr = new LinkedResource("myImage.jpg");
lr.ContentId = "imageId";
htmlView.LinkedResources.Add(lr);
mail.AlternateViews.Add(htmlView);
SmtpClient smtpClient = new SmtpClient();
smtpClient.Send(mail);
有谁知道为什么嵌入式图像不会在移动客户端上显示?更好的是,我怎样才能正确显示图像?
修改:如果Outlook 2007(及更高版本)发送带有图片的电子邮件,则图片会在移动客户端和桌面客户端中正确显示。如果HTML格式的电子邮件与嵌入的图像一起发送,则图像无法在移动客户端中正确显示,但可以在桌面客户端中正确显示。
Outlook如何能够自信地显示带有图像的电子邮件,但如果通过Web应用程序(使用嵌入图像)发送,则移动客户端会阻止图像。这两者有什么区别?
答案 0 :(得分:3)
我终于找到了这个问题的答案:未设置LinkedResource的可选ContentType。桌面客户端可以搞清楚
来自MSDN:
ContentType中的信息 class用于描述数据 包含在这样的电子邮件中 一种显示软件的方式 电子邮件可以呈现内容 适当的方式。 ContentType是 与Attachment类一起使用 指定内容的类型 附件。
Outlook能够了解附加图像的显示方式,但移动客户端需要更多信息。
答案 1 :(得分:2)
这正如其他用户所说,偏好问题和已知错误。
艾莉森,你是否肯定图像二进制文件进入手机?正如其他用户所说,偏好问题可能是默认情况,可以减少无意中将庞大的图像下载到数据计划有限的移动客户端。至于已知问题,请参阅
http://www.google.com/support/forum/p/Google+Mobile/thread?tid=6470e77d94f0315c&hl=en
谢谢,祝你好运......
编辑:哇...这是一个老问题;)
答案 2 :(得分:0)
最常见的原因是智能手机上的设置被设置为阻止默认情况下下载电子邮件图像。在大多数手机上,默认行为是他们必须手动下载图像,通常是通过电子邮件客户端中的按钮或设置,如果他们想要查看附加到该特定电子邮件的图像。这与我在台式机和笔记本电脑的Outlook设置中使用的设置相同。对于大多数电子邮件客户端来说,这是垃圾邮件保护的事情对于手机,它还可以节省不必要的使用带宽。默认情况下,您永远不应指望客户始终看到图像。
答案 3 :(得分:0)
好的答案here:
string attachmentPath = Environment.CurrentDirectory + @"\test.png";
Attachment inline = new Attachment(attachmentPath);
inline.ContentDisposition.Inline = true;
inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
inline.ContentId = contentID;
inline.ContentType.MediaType = "image/png";
inline.ContentType.Name = Path.GetFileName(attachmentPath);
message.Attachments.Add(inline);
我刚试过它,它就像一个魅力。你会想要确定你的文件类型。 这是一个媒体类型列表: