如何防止引用的 PNG 在通过 html 添加到电子邮件时被压缩?

How can I prevent a referenced PNG from being squashed when added to an email via html?

我有这个代码来发送一封引用互联网图片的电子邮件:

private void EmailSheet(PricePushFile ppf)
{
    string emailAddr = GetEmailAddressForUnit(ppf.SourceFileName);
    Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
    MailItem mailItem = app.CreateItem(OlItemType.olMailItem);
    mailItem.To = emailAddr;
    string customer = GetCustomerName(ppf.SourceFileName);
    mailItem.Subject = string.Format("PRO*ACT Price Push – {0}", customer);

    List<String> htmlBody = new List<string>
        {
            "<html><body><img src=\"http://www.proactusa.com/wp-content/themes/proact/images/pa_logo_notag.png\" alt=\"Pro*Act logo\" ><p>Your PRO*ACT Price Push report is attached.</p>",
            "</body></html>"
        };
    mailItem.HTMLBody = string.Join(Environment.NewLine, htmlBody.ToArray());

    mailItem.Attachments.Add(ppf.SourceFileName);
    mailItem.Importance = OlImportance.olImportanceNormal;
    mailItem.Display(false);
    mailItem.Send(); // This sends the email without a dialog displaying first
}

引用的png(http://www.proactusa.com/wp-content/themes/proact/images/pa_logo_notag.png)比较大,但是发送邮件的时候被压缩得可怜:

如何确保图像在电子邮件中以完整尺寸显示而不是被压扁?

更新

添加显式尺寸可以正常工作,但首选 "Base64" 路线不起作用;我试过这个:

private static String PROACT_LOGO_BINARY = 
    "iVBORw0KGgoAAAAN. . .2ytlR8BYrxuzvr/AM6ZTOQUGb1+AAAAAElFTkSuQmCC";

. . .

string proactLogoAsBinary = PROACT_LOGO_BINARY;
List<String> htmlBody = new List<string>
{
    String.Format("<html><body><img src=\"data:image/png;base64,{0}\" alt=\"Pro*Act logo\" ><p>Your PRO*ACT reports are attached.</p></body></html>", proactLogoAsBinary)
};
mailItem.HTMLBody = string.Join(Environment.NewLine, htmlBody.ToArray());

...我得到一张 "broken image" 替换图片(小红前)

注意:我通过 this 获得了二进制文件:

您需要明确设置图片尺寸,以便电子邮件客户端知道您希望图片显示多大。

在您的情况下,图像为 199 x 130,因此添加宽度=199、高度=130

http://www.proactusa.com/wp-content/themes/proact/images/pa_logo_notag.png\" alt=\"Pro*Act logo\" width=\"199\" height=\"130\" >

不同的 MUA 可能会有所不同(我想您正在查看那里的 Outlook;您知道还有其他电子邮件客户端,对吗?;-))。

无论如何,我会考虑一些事情:

  1. 鉴于 height/width 数据的真空,HTML 渲染器可以决定只渲染一些默认大小。尝试将实际高度和宽度添加到您的 IMG 标签:

    <img src="..." height="130" width="199"...>

  2. 这只是一个徽标(和一个小文件),因此您可能应该考虑将其嵌入到您的消息中(现代 MUA 真的不喜欢默认自动检索远程资源并提供用户 "do you want to download things from foo.com" 类型的消息——所以您的许多用户要么不得不将您列入白名单,要么根本看不到您的徽标)。在这里查看答案:Embed Base64 PNG

由于您可以一次性将文件编码为 base64 并将其复制到您的 HTML 源中,因此应该不会太痛苦(而且与外部 link).