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

UWP应用调用Microsoft Graph REST接口发邮件报400错误求助

排查Microsoft Graph sendMail接口400 Bad Request错误的要点

1. 请求体结构错误(最可能原因)

你构造的JSON直接将邮件内容作为顶层对象,但sendMail接口要求请求体必须包裹在message字段中,同时可搭配saveToSentItems字段控制是否保存到已发送邮件。SDK会自动封装这个结构,手动调用REST接口时容易遗漏。

错误结构示例:

{
  "Body": { ... },
  "Subject": "simple message",
  ...
}

正确结构示例:

{
  "message": {
    "Body": {
      "Content": "My message",
      "ContentType": "HTML"
    },
    "Subject": "simple message",
    "ToRecipients": [{
      "EmailAddress": {
        "Address": "recipient@example.com"
      }
    }],
    "Importance": "Low"
  },
  "saveToSentItems": true
}

(注:From字段可省略,以当前授权用户身份发送时会自动填充)

2. JSON格式问题:全角引号

你提供的JSON代码使用了全角双引号“”,而非标准半角双引号"",这会导致Graph接口无法解析JSON,直接返回400错误。SDK会自动处理字符串格式,因此不会出现该问题。

修正后的JSON必须使用半角引号,例如:

{
  "message": {
    "Content": "My message",
    "ContentType": "HTML"
  }
}

3. 未设置正确的Content-Type请求头

HttpClient默认不会自动设置Content-Type: application/json,而Graph接口要求请求体必须为JSON格式。需在请求时显式添加该头:

修正后的C#代码:

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
    // 显式设置Content-Type为application/json
    var content = new StringContent(jsonRequestBody, Encoding.UTF8, "application/json");
    HttpResponseMessage response = await client.PostAsync(url, content);
    
    // 建议读取响应内容,获取具体错误描述
    string errorDetails = await response.Content.ReadAsStringAsync();
    Debug.WriteLine(errorDetails);
}

4. 查看详细错误响应内容

400错误通常会返回具体的错误信息,通过读取响应内容(如上例的errorDetails),Graph会直接指出问题,例如:

{
  "error": {
    "code": "InvalidRequest",
    "message": "The request body is missing or malformed.",
    "innerError": { ... }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:43:23