我一直在与带有图像的 HTML 电子邮件作斗争。我让他们在桌面 Thunderbird 和 Outlook 上工作,但 Android 电子邮件显示损坏的图像。我知道它可以工作,因为使用 Outlook 创建的电子邮件有效,并且与我正在创建的电子邮件结构非常相似。显然它不一样(否则我的会起作用!),但我看不到我错过了什么。我没有过多地减少代码,因为我希望有人会看到 LinkedResource 或 AlternateResource 的问题,但它可能会更大。HTML 视图中包含图像标记,可以在桌面上正常工作。它在 Android 上显示替代文本,带有损坏的图像图标。任何帮助将不胜感激。 bool SendEmail() { string fullBody = GenerateHeader() + Body + GenerateFooter(); string textBody = RemoveHTML(Body); AlternateView avHtml = AlternateView.CreateAlternateViewFromString(fullBody, Encoding.UTF8, MediaTypeNames.Text.Html); avHtml.TransferEncoding = TransferEncoding.QuotedPrintable; MailMessage message = new MailMessage(); message.IsBodyHtml = true; message.Subject = BaseSubject + Subject; message.Body = textBody; message.AlternateViews.Add(avHtml); message.AlternateViews.Add(avText); message.Headers.Add("Message-Id", String.Format("<{0}@{1}>", Guid.NewGuid().ToString(), "company.com.au")); var assembly = Assembly.GetExecutingAssembly(); string resourceName = "app.UI.EmbeddedItems.logo.png"; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) { LinkedResource inline = new LinkedResource(stream, "image/png"); inline.ContentId = LogoId; inline.ContentType.Name = "logo.png"; inline.ContentLink = new Uri("cid:" + inline.ContentId); inline.TransferEncoding = TransferEncoding.Base64; inline.ContentType.MediaType = "image/png"; avHtml.LinkedResources.Add(inline);
1 回答
HUH函数
TA贡献1836条经验 获得超4个赞
结果证明问题不在于电子邮件的构造,而在于 HTML 本身。图像标签如下所示:
<img id='Logo.png' alt='Logo' src='cid:LogoId' />
这在桌面邮件客户端上运行良好,但不会在 Android 邮件应用程序或适用于 Android 的 Google 邮件应用程序上显示图像。为了使其工作,需要用双引号替换单引号。
这有效:
<img id="Logo.png" alt="Logo" src="cid:LogoId" />
更改 GenerateHeader 在 img 标签中使用双引号而不是单引号解决了这个问题。对我来说没有意义,但它有效。
- 1 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消