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

使用Graph API v4.50.0发邮件时遭遇HTTP/2 PROTOCOL_ERROR(0x1)求助

Graph API 4.50.0发送邮件触发HTTP/2 PROTOCOL_ERROR(0x1)问题排查

问题场景

使用Graph API(版本4.50.0)发送邮件时,突然抛出内部异常:

HttpProtocolException: The HTTP/2 server reset the stream. HTTP/2 error code 'PROTOCOL_ERROR' (0x1)

相关业务代码:

public async Task<bool> SendGraphEmailAsync(Message email)
{
    var user = await _userProfileServ.GetCurrentUserAsync();
    var authRecords = await _externalAuthServ.GetUserExternalAuthenticationRecordsAsync(user);
    var azureAuth = authRecords.FirstOrDefault();

    if (azureAuth == null)
        return false;

    try
    {
        _graphClient.AuthenticationProvider = new DelegateAuthenticationProvider(async (requestMessage) =>
        {
            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", azureAuth.OAuthAccessToken);
        });

        //var outcome = await _graphClient.DeviceManagement..OnPremisesConnections["1234567890"].RunHealthChecks.PostAsync();
        
        await _graphClient.Me.SendMail(email).Request().PostAsync();// 触发异常的代码行
        return true;
    }
    catch
    {
        // 错误日志记录
    }
    

    return false;
}

异常截图:
异常详情截图

注:_graphClient为继承自Graph API包BaseClient的GraphServiceClient实例。


排查与解决方法

  • 强制切换至HTTP/1.1协议
    HTTP/2协议兼容性问题是这类报错的常见诱因,可通过配置HttpClient强制使用HTTP/1.1:

    // 初始化HttpClient时禁用HTTP/2
    var httpClientHandler = new HttpClientHandler
    {
        UseHttp2 = false,
        SslProtocols = System.Security.Authentication.SslProtocols.Tls12
    };
    var httpClient = new HttpClient(httpClientHandler);
    
    // 建议在GraphServiceClient初始化时传入认证提供者,避免每次请求重复设置
    var authProvider = new DelegateAuthenticationProvider(async (requestMessage) =>
    {
        requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", azureAuth.OAuthAccessToken);
    });
    var _graphClient = new GraphServiceClient(httpClient, authProvider);
    
  • 验证OAuth Token有效性与权限
    过期或权限不足的Token可能间接导致服务器重置连接:

    • 解码Token(如通过jwt.io)检查exp字段确认是否过期
    • 确认应用已获取Mail.Send权限(委托权限需用户授权,应用权限需管理员同意)
  • 升级Graph API SDK版本
    4.50.0版本可能存在HTTP/2相关已知问题,建议升级至最新稳定版(如v5.x系列)。注意v5.x与v4.x存在API差异,升级时需调整请求构建逻辑。

  • 检查邮件内容格式合法性
    确认Message对象字段符合Graph API规范:

    • 避免收件人、主题、正文包含非法特殊字符
    • 若带附件,检查单附件大小是否超过150MB的限制
  • 完善异常捕获日志
    当前catch块未记录详细异常信息,建议修改为捕获完整异常堆栈,辅助定位问题:

    catch (Exception ex)
    {
        Console.WriteLine($"异常类型:{ex.GetType().FullName}");
        Console.WriteLine($"错误消息:{ex.Message}");
        Console.WriteLine($"堆栈跟踪:{ex.StackTrace}");
        if (ex.InnerException != null)
        {
            Console.WriteLine($"内部异常:{ex.InnerException.Message}");
            Console.WriteLine($"内部堆栈:{ex.InnerException.StackTrace}");
        }
        // 日志持久化逻辑
        return false;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:43:14