带有嵌入式图像的电子邮件,在Outlook 2010中显示为“预览文档”& 2016

时间:2016-03-01 15:32:36

标签: c# html-email

我们目前通过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>

如果还有其他任何您感兴趣,请告诉我。

outlook

1 个答案:

答案 0 :(得分:1)

我认为Outlook没有替代观点,这就是为什么它不起作用。

创建邮件消息对象后发送邮件的小小片段。

def index
  @selected_object = cookies[:some_key]
  if @selected_object.nil?
    @selected_object = "default_selected"
  end
end

这是来自Amazon Support forum的ConvertMailMessageToMemoryStream。

RawMessage rawMessage;

using (MemoryStream memoryStream = ConvertMailMessageToMemoryStream(gMessage))
{
    rawMessage = new RawMessage(memoryStream);
}

SendRawEmailRequest request = new SendRawEmailRequest();

request.RawMessage = rawMessage;
request.Destinations.Add(MessageToSend.ToRecipient.Trim().ToLower());
request.Source = MessageToSend.SenderEmail;

var ses = new Amazon.SimpleEmail.AmazonSimpleEmailServiceClient(UserName, sMailPassword, Amazon.RegionEndpoint.USEast1);

SendRawEmailResponse response = ses.SendRawEmail(request);