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
相关产品推荐
相关产品推荐

