我正在尝试生成MailMessage并为其设置各种附件 . 如果我将其添加为附件类型,则内联附件始终显示为jpeg,png或其他图像文件 . 我用于此方法的代码:
var mailMessage = new MailMessage();
// Set To, From, Body, Subject, etc.
foreach(var att in self.Attachments) {
byte[] content = att.GetBytes();
var attachment = new Attachment(new MemoryStream(content), att.Name);
if(att.IsInline){
attachment.ContentId = att.Name;
attachment.ContentDisposition.Inline = true;
attachment.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
}
mailMessage.Attachments.Add(attachment)
}
var view = AlternateView.CreateAlternateViewFromString(mailMessage.Body, Encoding.UTF8, MediaTypeNames.Text.Html);
mailMessage.AlternateViews.Add(view);
如果我将它们添加为LinkedResource,那么它们会在附件部分显示为dat文件 . 码:
var mailMessage = new MailMessage();
// Set To, From, Body, Subject, etc.
var view = AlternateView.CreateAlternateViewFromString(mailMessage.Body, Encoding.UTF8, MediaTypeNames.Text.Html);
foreach(var att in self.Attachments) {
byte[] content = att.GetBytes();
if(att.IsInline) {
var inline = new LinkedResource(new MemoryStream(content), att.ContentType);
inline.ContentId = att.Name;
view.LinkedResources.Add(inline);
}
else {
mailMessage.Attachments.Add(new Attachment(new MemoryStream(content),
att.Name));
}
}
mailMessage.AlternateViews.Add(view);
这两种方法都会生成正确的电子邮件,并将内联附件注入电子邮件正文中 . 在Outlook中预览电子邮件时,既不显示附件部分中的内联附件 . 两者都在Outlook中收到电子邮件时显示内联附件 . 我已确保Outlook选项的邮件部分中的Outlook设置如下:“以这种格式撰写邮件:HTML”和“当以RTF格式向Internet收件人发送邮件时:转换为HTML格式” .
任何建议都会受到高度赞赏,因为附加附件会给最终用户造成混淆 .
1 回答
我偶然发现这个问题有同样的问题,对我来说解决方案是添加附件的类型 .
改变这个
对此
It looks as if you are already doing this ,但也许这不符合预期?
感谢这个页面提供答案:https://www.codeproject.com/articles/31897/embed-an-image-in-email-using-asp-net