0

我有这个 html,我作为邮件发送(见小提琴),我在其中使用 2 个外部图像(一个用于公司徽标,一个用于表格背景): :

http://jsfiddle.net/UTSnK/

<img src="http://www.hawkaviation.com/assets/static-header.jpg" alt="Hawk Aviation""/></a>

<table border="0" cellspacing="0" cellpadding="0" style="background:rgba(55, 20, 240, 0.99) url('http://www.hisplaceautorepair.com/images/auto/Primary_Images/napa_bg.jpg'); padding: 38px">

我将它从代码发送到许多电子邮件客户端:gmail、yahoo、ios。仅在 Outlook 客户端中不显示图片: 在此处输入图像描述

我怎样才能克服它?这与我发送它的方式(通过 c# 代码)或图像链接到 html 的方式有关吗?

我将不胜感激一步一步的回答。问候,奥马尔。

4

2 回答 2

1

您遇到此问题是因为 Outlook 不会在没有用户单击图像下载的情况下呈现外部图像,或者他们没有选择自动下载外部图像的选项。

您解决此问题的方法是您必须将图像嵌入到电子邮件中。

要嵌入图像,您必须使用AlternatView对象和LinkedResource对象。

您可以在以下位置找到有关如何执行此操作的示例代码:如何使用 .NET 在电子邮件正文中嵌入多个图像

于 2013-07-08T14:03:43.680 回答
1

这就是我在 Outlook 中工作的方式

private MailMessage report = new MailMessage();

...

if (this.report.IsBodyHtml)
{
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(this.bodyText.ToString(), this.report.BodyEncoding, "text/html");

            LinkedResource headerImageLink = new LinkedResource(ConfigReader.GetConfigValue("ImageLocation") + "\\MyBanner.gif", "image/gif");
            headerImageLink.ContentId = "headerImageId";
            headerImageLink.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;

            LinkedResource footerImageLink = new LinkedResource(ConfigReader.GetConfigValue("ImageLocation") + "\\horizontal_c.gif", "image/gif");
            footerImageLink.ContentId = "footerImageId";
            footerImageLink.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;

            htmlView.LinkedResources.Add(headerImageLink);
            htmlView.LinkedResources.Add(footerImageLink);

            this.report.AlternateViews.Add(htmlView);
}

引用上图的 HTML 是:

<IMG src=\"cid:headerImageId\"/>

headerImageId是指 LinkedResource 的 ContentId 。

基本上,您将图像转换为文本以进行传输,在到达客户端时将其重新构成为图像。

于 2013-07-08T14:10:45.193 回答