Thunderbird 不显示电子邮件中的嵌入图像 [重复]

Posted

技术标签:

【中文标题】Thunderbird 不显示电子邮件中的嵌入图像 [重复]【英文标题】:Thunderbird doesn't show embedded images in email [duplicate] 【发布时间】:2017-08-10 19:45:35 【问题描述】:

我正在使用以下代码 (C#) 将图像嵌入到 html 电子邮件中:

Bitmap image = new Bitmap();
// set something to image
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Jpeg);
ContentType contentType = new ContentType(MediaTypeNames.Image.Jpeg);
ms.Seek(0, SeekOrigin.Begin);
Attachment attachment = new Attachment(ms, contentType);
attachment.ContentId = "image@email";

MailMessage mail = new MailMessage();
mail.From = new MailAddress("...");
mail.To.Add("...");
mail.Subject = "...";
mail.Body = body; // view below
mail.IsBodyHtml = true;
mail.Attachments.Add(attachment);
smtpClient.Send(mail);
ms.Close();

这里是html正文的相关部分:

<img align='center' alt='' src='cid:image@email' width='100' style='padding-bottom: 0; display: inline !important; vertical-align: bottom;'>";            

在 gmail 网站上查看电子邮件看起来是正确的:即图像嵌入到 html 正文中。

相反,使用 Thunderbird 时,图像会作为附件接收,但不会被识别为 jpg。附件名为“第 1.2 部分”。如果我双击它,则使用计算机上安装的默认图像查看器打开图像。

为了以与最常见的电子邮件阅读器兼容的方式正确发送嵌入图像,我需要添加什么?

更新

要为附加的图像命名,添加以下内容就足够了:

attachment.Name = "name.jpg";

Thunderbird 仍然拒绝在 html 中显示它。

【问题讨论】:

【参考方案1】:

正如 Scarnet 所指出的,这是将嵌入图像放入 html 电子邮件的正确方法:

AlternateView view = AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html);
LinkedResource inline = new LinkedResource(filename, MediaTypeNames.Image.Jpeg);
inline.ContentId = "image@email";
view.LinkedResources.Add(inline);

MailMessage mail = new MailMessage();
mail.From = new MailAddress(username);
mail.To.Add(address);
mail.Subject = subject;
mail.IsBodyHtml = true;
mail.AlternateViews.Add(view);
await smtpClient.SendMailAsync(mail);

【讨论】:

以上是关于Thunderbird 不显示电子邮件中的嵌入图像 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

html 中的内联图像,base64,不会出现在 gmail 中(但会出现在 Thunderbird 中)

如何删除损坏的图像框?

Gmail 中的 HTML 电子邮件 - 嵌入图像

如何阻止电子邮件中的嵌入图像被 GMail 显示为附件?

vba 电子邮件嵌入图像未显示

Gmail 中未显示 HTML 图像