HTML电子邮件中嵌入的图片无法在手机上显示

5
我有一个应用程序,可以发送带有嵌入图片的HTML格式电子邮件。这封电子邮件在许多不同的桌面/网络客户端上看起来完美无瑕。当在支持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应用程序(使用嵌入式图像)发送则移动客户端会阻止图像。两者之间有什么区别?

没有看到生成的电子邮件很难说。代码看起来很正常。 - Justin Cormack
很容易想象:嵌入的图像好像被阻止下载一样被阻止了,但是这些图像已经被嵌入到邮件中,不需要被下载。需要明确的是,在Outlook中,这些嵌入的图像可以完美地显示。只有在移动客户端中,这些嵌入的图像才无法正确显示。 - NakedBrunch
4个回答

3
我终于找到了这个问题的答案:LinkedResource的可选ContentType未设置。桌面客户端可以找出。
来自MSDN
引用: ContentType类中的信息用于以使显示电子邮件的软件以适当的方式呈现内容的方式描述电子邮件中包含的数据。 ContentType与Attachment类一起使用,以指定附件中内容的类型。
Outlook能够理解附加图像应如何显示,但移动客户端需要更多信息。

2
这是其他用户所说的,一个偏好设置问题和一个已知的错误。
Alison,您确定图像二进制文件已经传送到手机了吗?正如其他用户所述,偏好设置问题可能是默认设置,以减少在数据计划有限的移动客户端上意外下载庞大图像的可能性。
至于已知问题,请参见。

http://www.google.com/support/forum/p/Google+Mobile/thread?tid=6470e77d94f0315c&hl=en

谢谢并祝好运...
编辑:哇... 这是一个旧问题 ;)

0

最常见的原因是智能手机的设置默认禁止下载电子邮件中的图片。在大多数手机上,如果用户想查看特定电子邮件中附带的图片,通常需要手动下载图片,通常通过电子邮件客户端中的按钮或设置来完成。这也是我在桌面和笔记本电脑Outlook设置中使用的相同设置。对于大多数电子邮件客户端而言,这是一种垃圾邮件保护机制。对于手机而言,这也是为了节省不必要的带宽使用。您永远不能指望客户端总是默认查看图片。


不,对于嵌入式图像来说情况并非如此。这些图像已经附加在客户端上了。用户不需要被要求下载这些图像。这就是嵌入式图像的好处之一。一切都可以完美地运作,而且反垃圾保护也不会起作用。 - NakedBrunch

0

好的答案在这里

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);

我刚刚测试了一下,它完美地运行了。当然,你需要确定你的文件类型。 这是媒体类型列表:

http://www.fileformat.info/info/mimetype/image/index.htm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接