使用Microsoft Graph API发送邮件后移动邮件及ImmutableId使用疑问
问题1:能否连续调用Send与Move方法?是否需要等待/轮询?
不能直接连续调用Send和Move方法,必须等待邮件发送流程完成后再执行Move操作,原因如下:
- Send API调用成功仅代表请求已被服务器接收并排入发送队列,邮件实际完成发送、生成已发送副本的过程是异步的,需要一定时间。
- 直接紧跟调用Move时,原草稿邮件可能已被标记为已发送状态,或系统正在将其副本同步到已发送文件夹,此时用原ID调用Move会返回“找不到邮件”或状态错误的异常。
正确的做法是轮询确认邮件发送完成:
- 在Send调用后,定期调用
GET /users/{mailUser}/messages/{created.Id},检查邮件的isSent属性是否为true,也可同时检查parentFolderId是否已变为已发送文件夹的ID(可选)。 - 设置合理的轮询间隔(比如1-2秒)和超时时间(比如30秒),避免无限等待。
问题2:C#代码中ImmutableId的使用方式是否正确?
你的ImmutableId使用方式是正确的,关键点如下:
- 创建草稿时通过
Prefer: IdType="ImmutableId"请求头获取邮件的ImmutableId,代码实现正确:x.Headers.Add("Prefer", "IdType=\"ImmutableId\""); - 后续Send和Move操作直接使用获取到的
created.Id(即ImmutableId)是合法的,Graph API支持用ImmutableId作为邮件标识符进行操作。
额外注意:如果后续需要查询该邮件(比如在已发送文件夹中查找),建议继续携带Prefer: IdType="ImmutableId"请求头,确保返回的ID始终是ImmutableId,保持操作一致性。
内容的提问来源于stack exchange,提问作者Frederik
相关产品推荐
相关产品推荐

