如何防止引用的 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;您知道还有其他电子邮件客户端,对吗?;-))。
无论如何,我会考虑一些事情:
鉴于 height/width 数据的真空,HTML 渲染器可以决定只渲染一些默认大小。尝试将实际高度和宽度添加到您的 IMG 标签:
<img src="..." height="130" width="199"...>
这只是一个徽标(和一个小文件),因此您可能应该考虑将其嵌入到您的消息中(现代 MUA 真的不喜欢默认自动检索远程资源并提供用户 "do you want to download things from foo.com" 类型的消息——所以您的许多用户要么不得不将您列入白名单,要么根本看不到您的徽标)。在这里查看答案:Embed Base64 PNG
由于您可以一次性将文件编码为 base64 并将其复制到您的 HTML 源中,因此应该不会太痛苦(而且与外部 link).
我有这个代码来发送一封引用互联网图片的电子邮件:
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;您知道还有其他电子邮件客户端,对吗?;-))。
无论如何,我会考虑一些事情:
鉴于 height/width 数据的真空,HTML 渲染器可以决定只渲染一些默认大小。尝试将实际高度和宽度添加到您的 IMG 标签:
<img src="..." height="130" width="199"...>
这只是一个徽标(和一个小文件),因此您可能应该考虑将其嵌入到您的消息中(现代 MUA 真的不喜欢默认自动检索远程资源并提供用户 "do you want to download things from foo.com" 类型的消息——所以您的许多用户要么不得不将您列入白名单,要么根本看不到您的徽标)。在这里查看答案:Embed Base64 PNG
由于您可以一次性将文件编码为 base64 并将其复制到您的 HTML 源中,因此应该不会太痛苦(而且与外部 link).