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
相关产品推荐
相关产品推荐

