You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:36