0

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

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

...我得到一个“损坏的图像”替换图像(小红前)

注意:我通过以下方式获得了二进制文件:

4

2 回答 2

1

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

在你的情况下,图像是 199 x 130,所以添加 width=199, height=130

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

于 2016-08-18T23:45:32.610 回答
1

它可能会因 MUA 而异(我认为您正在那里查看 Outlook;您知道还有其他电子邮件客户端,对吧?;-))。

无论如何,我会考虑几件事:

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

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

  2. 这只是一个徽标(和一个小文件),因此您可能应该考虑将其嵌入到您的消息中(现代 MUA 确实不喜欢默认自动检索远程资源并给用户一个“您想从foo.com”——类型的消息——你的许多用户要么不得不将你列入白名单,要么根本看不到你的徽标)。在这里查看答案:嵌入 Base64 PNG

由于您可以将文件一次性编码为 base64 并将其复制到您的 HTML 源代码中,因此它应该不会太痛苦(并且它会被更多的收件人查看而不是外部链接)。

于 2016-08-18T23:45:38.887 回答