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

MailKit无法识别Content-Disposition为inline的邮件附件

MailKit无法识别Content-Disposition为inline的邮件附件

嘿,我之前也碰到过一模一样的问题!其实这是MailKit的默认逻辑导致的——它严格遵循MIME标准,默认只把Content-Disposition标记为attachment的内容归到附件集合里,而inline类型的内容会被当作邮件的“内嵌内容”(比如正文里的内嵌图片),所以不会出现在常规的Attachments列表中。但Outlook不一样,它会把带有明确文件名的inline内容也当作附件展示出来,这就是两边结果不一致的原因。

要解决这个问题,你可以手动遍历邮件的所有MIME实体,自己判断哪些是需要保存的附件,不管它的Content-Disposition是inline还是attachment。给你举个实用的代码例子(以C#为例):

// 遍历邮件的所有MIME部分
foreach (var part in message.BodyParts)
{
    var disposition = part.ContentDisposition;
    var contentType = part.ContentType;

    // 筛选条件:有文件名、是指定的MIME类型(比如Excel),且Disposition是inline或attachment
    if (disposition != null && 
        !string.IsNullOrEmpty(disposition.FileName) && 
        contentType.MimeType == "application/vnd.ms-excel" &&
        (disposition.DispositionType == "inline" || disposition.DispositionType == "attachment"))
    {
        // 准备保存路径,可根据需求调整
        var savePath = Path.Combine(@"C:\SavedAttachments", disposition.FileName);
        using (var stream = File.Create(savePath))
        {
            if (part is MimePart mimePart)
            {
                // 解码并保存附件内容
                mimePart.Content.DecodeTo(stream);
            }
        }
    }
}

你还可以根据实际需求调整筛选条件,比如只看文件名后缀,或者放宽MIME类型的限制,这样就能把那些Outlook里显示的inline附件都捞出来保存啦。

备注:内容来源于stack exchange,提问作者KiNest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:18:14