使用Microsoft Graph API发邮件返回空,无法获取消息ID与会话ID
解决Office365 Graph API sendmail端点返回空Message对象的问题
问题原因
Graph API的POST /users/{id}/sendmail端点默认不返回发送后的邮件实体,只会返回202 Accepted状态码,所以即使设置了setReturnType(Message::class),得到的也是空属性的Message对象。
解决方案
添加Prefer: return=representation请求头,强制API返回发送完成后的邮件对象,包含需要的messageId和conversationId。
修改后的代码如下:
$this->graphSdk->createRequest("POST", "/users/" . $this->config['from_email'] . "/sendmail") ->addHeaders(['Prefer' => 'return=representation']) ->attachBody($this->getMessageBody($message)) ->setReturnType(Message::class) ->execute()
补充说明
- 添加该请求头后,API会返回201 Created状态码,同时返回完整的邮件实体数据,可直接从返回的Message对象中调用
getMessageId()和getConversationId()获取目标ID。 - 你提到的Laravel监听器中Swift Message对象的ID无效是正常情况:该ID是本地SMTP客户端生成的临时标识,Office365会重新分配平台唯一的Message ID,必须通过Graph API返回的结果获取官方有效ID。
内容的提问来源于stack exchange,提问作者Jaquarh
相关产品推荐
相关产品推荐

