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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:53:24