如何通过Microsoft Graph API修改Office 365邮件标记属性及相关疑问
关于Microsoft Graph API Office 365的两个问题解答
1. 创建非草稿状态的收件箱邮件
从EWS转到Graph API,确实会发现创建邮件的逻辑有些不同。Graph API默认创建的邮件是草稿状态,但你可以通过显式设置属性来生成非草稿的已接收邮件,直接出现在收件箱里。
具体操作是调用POST /users/{user-id}/messages接口,在请求体里必须设置以下关键属性:
isDraft: false:明确标记为非草稿receivedDateTime:指定邮件的接收时间sender和from:设置发件人信息(可以是外部邮箱或内部用户)toRecipients:收件人列表subject和body:邮件主题和内容
另外要确保你的应用拥有Mail.ReadWrite权限(委托或应用权限都可以)。
举个请求体的示例:
{ "subject": "测试非草稿收件箱邮件", "body": { "contentType": "Text", "content": "这是直接生成的已接收邮件,不是草稿" }, "toRecipients": [ { "emailAddress": { "address": "recipient@example.com", "name": "收件人姓名" } } ], "sender": { "emailAddress": { "address": "sender@example.com", "name": "发件人姓名" } }, "from": { "emailAddress": { "address": "sender@example.com", "name": "发件人姓名" } }, "receivedDateTime": "2024-05-20T10:30:00Z", "isDraft": false }
发送这个请求后,邮件会直接出现在指定用户的收件箱中,状态是已接收(非草稿)。
2. 修改邮件标记属性
你说得没错,目前Graph API的Beta版本提供了更全面的邮件标记属性修改能力,稳定版(v1.0)的支持相对有限。下面分几种常见场景给你示例:
场景1:修改已读/未读状态
使用PATCH /users/{user-id}/messages/{message-id}接口,请求体设置isRead属性:
{ "isRead": true }
场景2:添加或修改分类(Categories)
同样用PATCH请求,更新categories数组:
{ "categories": ["重要", "待跟进"] }
场景3:设置跟进标记(Follow-up Flag)
Beta版本支持followUpFlag属性,可以设置跟进状态、截止时间等:
{ "followUpFlag": { "flagStatus": "Flagged", "dueDateTime": { "dateTime": "2024-05-25T17:00:00Z", "timeZone": "UTC" } } }
注意事项:
- Beta版本的API可能会有变动,微软不建议在生产环境直接使用,如果你的场景要求稳定性,可能需要等待这些功能进入v1.0稳定版;
- 操作时需要确保应用拥有对应的权限(比如
Mail.ReadWrite); - 如果是修改批量邮件的标记,也可以使用
POST /users/{user-id}/messages/microsoft.graph.update的批量操作接口,效率更高。
内容的提问来源于stack exchange,提问作者VitalyT




