MailKit读取邮件时Body属性始终为null的问题求助
问题原因与解决方案
核心原因
你调用Fetch方法时,仅指定了MessageSummaryItems.UniqueId和MessageSummaryItems.Envelope两个枚举值。这两个选项只包含邮件的唯一标识、发件人、收件人、主题等信封基础信息,完全不涉及邮件正文的获取逻辑,所以MailKit不会从服务器拉取正文数据,自然Body、TextBody、HtmlBody等属性都是null,BodyParts也为空。
解决方案
修改Fetch的参数,添加包含正文相关的枚举值,让MailKit获取正文数据:
private IEnumerable<IMessageSummary> GetUnreadMessages(ImapClient client) { client.Inbox.Open(FolderAccess.ReadWrite); var uids = client.Inbox.Search(SearchQuery.NotSeen); // 新增BodyStructure(解析MIME结构)和Body(获取正文内容) var messages = client.Inbox.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.BodyStructure | MessageSummaryItems.Body); return messages; }
如果只需要纯文本或HTML正文,也可以单独指定对应枚举:
// 只获取纯文本和HTML正文相关信息 var messages = client.Inbox.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.TextBody | MessageSummaryItems.HtmlBody);
额外检查点
确认PowerShell发送脚本里的$SMTPMessage是通过New-Object System.Net.Mail.MailMessage正确初始化的,且设置了有效的发件人、收件人。如果$SMTPMessage未正确创建,可能导致邮件本身没有生成正文内容,读取时自然也获取不到。
内容的提问来源于stack exchange,提问作者and85
相关产品推荐
相关产品推荐

