隐藏收件人的内联附件

时间:2015-09-08 21:38:18

标签: c# mailmessage

我正在尝试生成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 个答案:

答案 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