使用Microsoft Graph创建带非草稿ItemAttachment的邮件遇阻求助
解决Microsoft Graph创建非草稿邮件ItemAttachment仍为草稿的问题
当你通过POST /me/messages搭配SingleValueExtendedProperties创建非草稿主邮件时,ItemAttachment默认会以草稿状态生成——这是因为附件的状态属性不会自动继承主邮件的配置,必须单独为附件设置对应的扩展属性和核心字段。
以下是可行的解决方案:
1. 嵌套配置附件的SingleValueExtendedProperties
在创建主邮件的请求体中,直接为ItemAttachment的item节点添加状态控制的扩展属性,关键属性包括:
- PidTagMessageFlags(0x0E07):控制邮件的发送/草稿状态,设为
24(对应十六进制0x00000018,即MSGFLAG_SENT+MSGFLAG_READ,标记为已发送且已读) - PidTagMessageStatus(0x0E17):设为
1(对应MESSAGESTATUS_NORMAL,表示正常已收发状态)
示例请求体:
POST /me/messages { "subject": "测试带非草稿附件的邮件", "body": { "contentType": "HTML", "content": "<p>这是一封包含非草稿ItemAttachment的测试邮件</p>" }, "from": { "emailAddress": { "address": "sender@example.com" } }, "toRecipients": [ { "emailAddress": { "address": "recipient@example.com" } } ], "sentDateTime": "2024-05-20T09:30:00Z", "singleValueExtendedProperties": [ { "id": "Integer 0x0E07", "value": "24" }, { "id": "Integer 0x0E17", "value": "1" } ], "attachments": [ { "@odata.type": "#microsoft.graph.itemAttachment", "name": "附件邮件", "item": { "subject": "附件邮件主题", "body": { "contentType": "HTML", "content": "<p>这是附件邮件的内容</p>" }, "from": { "emailAddress": { "address": "sender@example.com" } }, "toRecipients": [ { "emailAddress": { "address": "attached-recipient@example.com" } } ], "sentDateTime": "2024-05-20T09:25:00Z", "singleValueExtendedProperties": [ { "id": "Integer 0x0E07", "value": "24" }, { "id": "Integer 0x0E17", "value": "1" } ] } } ] }
2. 完善附件的核心收发属性
- 必须为附件的
item节点指定from、toRecipients等收发人信息,模拟真实已收发邮件的完整结构,避免Graph默认将其判定为草稿。 - 添加
sentDateTime字段并设置为过去的时间,进一步明确附件的已发送状态。
3. 避免拆分创建流程
不要先创建主邮件,再通过POST /me/messages/{id}/attachments单独添加ItemAttachment。这种拆分方式下,附件更容易被标记为草稿,尽量在创建主邮件时一次性完成所有配置。
注意点
- 扩展属性的ID格式必须准确,整数类型属性使用
Integer 0xXXXX的格式。 - 若需要不同的状态(如已发送未读),可调整
PidTagMessageFlags的取值:仅已发送设为8(0x00000008),仅已读设为16(0x00000010)。
内容的提问来源于stack exchange,提问作者Hielke Hoeve
相关产品推荐
相关产品推荐

