MimeKit中纯文本附件内容同时显示于正文的问题求助
解决Text/Plain类型附件内容同时显示在邮件正文的问题
环境信息
- Windows 10
- Visual Studio 2017
- C# MailKit/MimeKit 版本2.0.1
问题描述
我在用MimeKit的BodyBuilder创建邮件时遇到个麻烦:添加的Text/Plain类型附件,它的内容会同时出现在邮件正文里,我只希望它作为独立附件存在,不想让正文显示附件内容。目前我的代码大概是这样的:
var mail = new MimeMessage(); mail.To.Add(new MailboxAddress("name1","name1@def.com")); mail.From.Add(new MailboxAddress("name2","name2@def.com")); var builder = new BodyBuilder(); builder.TextBody = ""; // 这里是添加Attachments的代码
解决方案
这个问题的根源是MimeKit默认会把Text/Plain类型的附件标记为**inline(内嵌)**资源,导致邮件客户端自动把内容渲染到正文里。你只需要明确指定附件的ContentDisposition为Attachment,就能让它只以附件形式存在。
修改后的代码示例如下:
var mail = new MimeMessage(); mail.To.Add(new MailboxAddress("name1", "name1@def.com")); mail.From.Add(new MailboxAddress("name2", "name2@def.com")); var builder = new BodyBuilder(); builder.TextBody = ""; // 保持正文为空 // 添加Text/Plain附件时,手动指定ContentDisposition var textAttachment = builder.Attachments.Add("文件名.txt", File.ReadAllBytes("文件路径.txt")); textAttachment.ContentDisposition = new ContentDisposition(ContentDisposition.Attachment); // 也可以用更简洁的写法一步到位: // builder.Attachments.Add("文件名.txt", File.ReadAllBytes("文件路径.txt"), ContentDisposition.Attachment); mail.Body = builder.ToMessageBody();
补充:批量处理附件的情况
如果你需要批量添加多个附件,也可以遍历附件集合,针对性处理Text/Plain类型的文件:
foreach (var attachment in builder.Attachments) { if (attachment.ContentType.MimeType == "text/plain") { attachment.ContentDisposition = new ContentDisposition(ContentDisposition.Attachment); } }
内容的提问来源于stack exchange,提问作者irikeish
相关产品推荐
相关产品推荐

