我正在尝试生成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格式”。
任何建议都会受到高度赞赏,因为附加附件会给最终用户造成混淆。
答案 0 :(得分:0)
我偶然发现这个问题遇到了同样的问题,对我来说,解决办法是添加附件的类型。
更改此
var inline = new LinkedResource("logo.png");
到此
var inline = new LinkedResource("logo.png", "image/png");
看起来好像你已经在做这个,但也许这不符合预期的工作?
感谢此页面提供答案: https://www.codeproject.com/articles/31897/embed-an-image-in-email-using-asp-net