如何使用Microsoft Graph API查询发送至特定地址的邮件?
解决Microsoft Graph API过滤Outlook收件人返回400错误的问题
你的过滤语法本身是正确的,返回400错误主要是因为URL未正确编码,或者端点使用不当。以下是正确的实现方式:
正确的查询格式
针对toRecipients数组的过滤逻辑没问题,但需要确保查询参数被正确URL编码。手动编码后的完整URL示例:
https://graph.microsoft.com/v1.0/Users/{user_id}/messages/?$filter=toRecipients%2Fany%28t%3At%2FemailAddress%2Faddress%20eq%20%27target%40example.com%27%29
代码层面的最佳实践(以Python为例)
不要手动编码URL,让请求库自动处理参数,避免编码错误:
import requests # 替换为实际值 user_id = "user@yourdomain.com" target_email = "recipient@example.com" access_token = "YOUR_VALID_ACCESS_TOKEN" headers = {"Authorization": f"Bearer {access_token}"} params = { "$filter": f"toRecipients/any(t:t/emailAddress/address eq '{target_email}')" } # 如果要查询已发送邮件,使用这个端点: # url = f"https://graph.microsoft.com/v1.0/Users/{user_id}/mailFolders/SentItems/messages/" url = f"https://graph.microsoft.com/v1.0/Users/{user_id}/messages/" response = requests.get(url, headers=headers, params=params) response.raise_for_status() # 触发HTTP错误便于排查 messages = response.json()["value"] # 处理返回的邮件数据 for msg in messages: print(f"邮件主题: {msg['subject']}")
关键注意事项
- 确认访问令牌拥有
Mail.Read权限(委托权限或应用权限均可) {user_id}可以是用户的ID,也可以是用户主体名称(如user@domain.com)- 如果要筛选已发送给指定收件人的邮件,建议使用
/mailFolders/SentItems/messages/端点,根/messages/端点默认返回收件箱内容
内容的提问来源于stack exchange,提问作者Jeroen Vermunt
相关产品推荐
相关产品推荐

