使用MimeKit读取本地.eml文件保存附件时遇Content属性报错求助
解决MailKit保存附件时MimePart.Content不存在的问题
你遇到的错误是因为MimeKit版本更新后API发生了变更——新版本中MimePart类不再包含Content属性,以下是两种可行的解决方法:
方案一:使用WriteTo()方法(推荐)
WriteTo()方法会自动处理内容解码,代码更简洁高效:
foreach(var attachment in message.Attachments) { // 获取附件的实际文件名,避免固定名称导致文件被覆盖 var fileName = attachment.FileName; using(var stream = File.Create(fileName)) { if (attachment is MessagePart messagePart) { messagePart.Message.WriteTo(stream); } else if (attachment is MimePart mimePart) { mimePart.WriteTo(stream); } } }
方案二:使用ContentObject属性
如果需要显式调用解码逻辑,可以用ContentObject替代旧版的Content属性:
foreach(var attachment in message.Attachments) { var fileName = attachment.FileName; using(var stream = File.Create(fileName)) { if (attachment is MessagePart messagePart) { messagePart.Message.WriteTo(stream); } else if (attachment is MimePart mimePart) { mimePart.ContentObject.DecodeTo(stream); } } }
额外提示
- 代码中替换了固定的
"fileName"为attachment.FileName,避免循环处理多个附件时重复覆盖同一个文件; - 建议保持MimeKit版本为最新稳定版,API变更主要出现在版本迭代的过程中。
内容的提问来源于stack exchange,提问作者HEki
相关产品推荐
相关产品推荐

