我们目前通过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>
如果还有其他任何您感兴趣,请告诉我。
答案 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);