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

MailKit获取Gmail邮件HtmlBody始终为空的问题求助

解决MailKit获取邮件HTML内容时HtmlBody返回null的问题

问题原因

HtmlBody属性仅在邮件顶级内容为text/html,或包含multipart/alternative类型且其中直接包含text/html部分时才会返回有效值。如果HTML内容嵌套在更深层级的BodyParts中(比如multipart/mixed或嵌套的multipart结构),该属性会返回null。

解决方案

方法1:使用GetTextBody自动提取HTML内容

MailKit提供了GetTextBody方法,可自动遍历邮件所有BodyParts,找到第一个匹配指定MIME类型的内容并返回,无需手动处理嵌套结构:

using (var imap = new ImapClient())
{
    imap.Connect("imap.gmail.com", 993);
    imap.Authenticate(Login, PW);
    var inbox = imap.Inbox;
    inbox.Open(FolderAccess.ReadWrite);

    string body = "";
    var message = inbox.GetMessage(messageID);
    if (html)
    {
        // 自动提取text/html类型的内容
        body = message.Body.GetTextBody("text/html");
    }
    else
    {
        body = message.Body.GetTextBody("text/plain");
    }
    
    imap.Disconnect(true);
    return body;
}

方法2:手动提取指定MimePart并解码

如果需要更精细的控制(比如获取所有HTML部分而非第一个),可以手动找到目标MimePart后,通过GetText()方法获取内容:

using (var imap = new ImapClient())
{
    imap.Connect("imap.gmail.com", 993);
    imap.Authenticate(Login, PW);
    var inbox = imap.Inbox;
    inbox.Open(FolderAccess.ReadWrite);

    string body = "";
    var message = inbox.GetMessage(messageID);
    if (html)
    {
        // 找到第一个text/html类型的MimePart
        var htmlPart = message.BodyParts.OfType<MimePart>().First(x => x.ContentType.MimeType == "text/html");
        // 自动处理编码,获取文本内容
        body = htmlPart.GetText();
    }
    else
    {
        var textPart = message.BodyParts.OfType<MimePart>().First(x => x.ContentType.MimeType == "text/plain");
        body = textPart.GetText();
    }
    
    imap.Disconnect(true);
    return body;
}

注意事项

  • 若邮件存在多个text/html部分,GetTextBody和First()会返回第一个匹配项,如需全部内容需遍历所有匹配的MimePart。
  • GetText()方法会自动处理内容的编码(基于ContentType.Charset),无需手动指定编码,可避免乱码问题。

内容的提问来源于stack exchange,提问作者Stephan Young

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:30:54