【发布时间】:2016-03-01 15:32:35
【问题描述】:
我们目前正在通过 Amazon SES 发送一封相对简单的 C# 电子邮件。对于几乎所有客户,电子邮件看起来都正确,但 Outlook 并未显示电子邮件,而是将其显示为附件。
电子邮件构建代码:
LinkedResource logoResource = null;
//Attach Logo
if (!string.IsNullOrEmpty(emailMessage.Logo))
{
messageHtml = messageHtml.Replace("{{Logo}}", emailMessage.Logo);
var imageData = Convert.FromBase64String(emailMessage.Logo.Split(Convert.ToChar(","))[1]);
logoResource = new LinkedResource(new MemoryStream(imageData))
{
ContentId = "logo",
ContentType = new ContentType("image/png"),
TransferEncoding = TransferEncoding.Base64
};
}
var htmlView = AlternateView.CreateAlternateViewFromString(messageHtml, null, MediaTypeNames.Text.Html);
htmlView.LinkedResources.Add(logoResource);
var message = new MailMessage {
IsBodyHtml = false,
Subject = emailMessage.Subject,
Body = string.IsNullOrEmpty(emailMessage.MessageText) ? emailMessage.Message : emailMessage.MessageText,
From = new MailAddress(emailMessage.From)
};
message.AlternateViews.Add(htmlView);
模板:
<tr style="margin-bottom:15px;/*logostyle*/">
<td width="600" class="mobile" style="font-family: arial; font-size: 12px; padding: 10px;" align="center">
<img src="cid:logo" style="width: 350px" />
</td>
</tr>
如果您还有什么感兴趣的,请告诉我。
【问题讨论】:
-
hotmail.com 和 Outlook 喜欢将图像的 src 从 http 更改为 https。也许它也会改变你的情况下的 src 。然后outlook不知道在哪里显示图片,所以显示为附件
-
这是内嵌图片?所以我们没有引用服务器。
-
CreateAlternateViewFromString 也停止了对我的正常工作。对于 SES,我必须做的是将消息转换为原始内存流并以这种方式发送。您可以使用 SES SendRawEmail 调用。我可以发送一个代码 sn-p。
-
@Nix 我知道.. 但我会检查电子邮件源代码中的 src 是否正确
-
它在其他浏览器中显示良好(图片)@ManosPasgiannis
标签: c# html-email