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

调用Microsoft Graph API发邮件遇HTML内容解析错误求助

使用Microsoft Graph API发送邮件时遇到"Content type text/html does not have a factory registered to be parsed"错误的解决方案

调用graphClient.Users["UserID"].SendMail.PostAsync(requestBody)接口时触发错误:

"Content type text/html does not have a factory registered to be parsed"

相关代码如下:

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "XXX";
var clientId = "XXX";
var clientSecret = "XXX";
var options = new TokenCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
};
var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret, options);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var requestBody = new Microsoft.Graph.Users.Item.SendMail.SendMailPostRequestBody
{
    Message = new Message
    {
        Subject = "Meet for lunch?",
        Body = new ItemBody
        {
            ContentType = BodyType.Html,
            Content = "The new cafeteria is open.",
        },
        ToRecipients = new List<Recipient>
        {
            new Recipient
            {
                EmailAddress = new EmailAddress
                {
                    Address = "xxx@xxx.com",
                },
            },
        },
        CcRecipients = new List<Recipient>
        {
            new Recipient
            {
                EmailAddress = new EmailAddress
                {
                    Address = "xxx@xxx.com",
                },
            },
        },
    },
    SaveToSentItems = false,
};

await graphClient.Users["UserID"].SendMail.PostAsync(requestBody);

已对照微软邮件权限文档检查并授予了委派权限与应用权限,但问题仍未解决。


可能的解决方法

  • 更新Graph SDK版本:该错误多由SDK版本不兼容或缺少序列化工厂导致,确保安装最新稳定版的Microsoft.Graph和Microsoft.Graph.Core NuGet包,旧版本存在HTML内容解析的已知bug。
  • 手动配置序列化器:若更新SDK后问题依旧,可自定义客户端序列化选项,确保HTML类型被正确处理:
var serializerOptions = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    Converters =
    {
        new JsonStringEnumConverter(),
        new ItemBodyConverter() // 自定义转换器处理ItemBody的HTML类型解析
    }
};

var graphClient = new GraphServiceClient(
    clientSecretCredential,
    scopes,
    serializer: new SystemTextJsonSerializer(serializerOptions));
  • 排查内容格式:暂时将ContentType改为BodyType.Text测试能否正常发送,排除HTML内容本身的格式问题(如未转义的特殊字符)。
  • 确认权限类型:当前使用客户端凭据流(ClientSecretCredential),需确保应用已授予Mail.Send应用权限并完成管理员同意——委派权限仅适用于用户交互场景,客户端凭据流不支持。

内容的提问来源于stack exchange,提问作者Ankush Daga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:05