You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Power Automate/Copilot Studio:如何按To或CC检索最新收件箱邮件线程?

问题:Power Automate/Copilot Studio中按To/CC筛选收件箱指定邮箱的最新邮件线程

流程逻辑

  • 接收用户输入的邮箱地址
  • 检索涉及该地址的最新邮件线程
  • 将线程传递给AI生成回复

当前挑战

在Outlook收件箱中按To或CC筛选时无法可靠检索邮件

已尝试的方案

  1. Microsoft Graph API:通过Power Automate的HTTP请求调用,请求参数如下:
{
    "host": {
        "connectionReferenceName": "shared_office365-3",
        "operationId": "HttpRequest"
    },
    "parameters": {
        "Uri": "https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages?$select=subject,from,toRecipients,ccRecipients,receivedDateTime,body,bodyPreview&$filter=(toRecipients/any(r:r/emailAddress/address%20eq%20'user@example.com')%20or%20ccRecipients/any(r:r/emailAddress/address%20eq%20'user@example.com'))&$top=1",
        "Method": "GET"
    }
}

返回错误:

{
    "body": {
        "error": {
            "code": "ErrorInvalidUrlQueryFilter",
            "message": "The query filter contains one or more invalid nodes."
        }
    }
}

原因:Graph API不允许用or组合两个集合的any()表达式。

  1. Power Automate Get emails (V3)连接器:按To/CC筛选结果不可靠
  2. 搜索查询:有时错误检索到地址出现在线程或文件其他位置的邮件
  3. 手动筛选最近25封邮件:不可靠,目标邮件可能早于6个月

约束条件

  • 必须按To或CC筛选,邮箱地址可能出现在任一字段
  • 仅需收件箱邮件,无需已发送邮件
  • AI依赖检索线程,需确保邮件准确

可行解决方案

方案1:Graph API分两次请求合并结果

针对Graph API的筛选限制,可拆分请求后合并结果:

  1. 分两次调用Graph API,分别筛选toRecipientsccRecipients包含目标邮箱的邮件
  2. 在Power Automate中合并结果集,按时间排序后取最新线程

请求示例

  • 筛选To收件人:
GET https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages?$select=subject,from,toRecipients,ccRecipients,receivedDateTime,body,bodyPreview,conversationId&$filter=toRecipients/any(r:r/emailAddress/address eq 'user@example.com')&$orderby=receivedDateTime desc&$top=50
  • 筛选CC收件人:
GET https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages?$select=subject,from,toRecipients,ccRecipients,receivedDateTime,body,bodyPreview,conversationId&$filter=ccRecipients/any(r:r/emailAddress/address eq 'user@example.com')&$orderby=receivedDateTime desc&$top=50

Power Automate处理步骤

  • 用两个HTTP动作发送上述请求
  • Union动作合并两个返回的邮件列表
  • Sort动作按receivedDateTime降序排序
  • 取排序后的第一条邮件,通过conversationId调用Graph API获取完整线程:
GET https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages?$filter=conversationId eq '{conversationId}'&$orderby=receivedDateTime asc

方案2:Power Automate结合Filter Array二次筛选

优化Get emails (V3)的使用逻辑,确保筛选准确性:

  1. 调用Get emails (V3)时,设置Top为较大值(如200),并指定Start Time为6个月前(覆盖可能的旧邮件)
  2. Filter Array动作对返回结果做二次筛选:
    • 条件1:To字段包含目标邮箱
    • 条件2:CC字段包含目标邮箱
    • 两个条件取逻辑
  3. 对筛选后的结果按Received Time降序排序,取最新邮件及对应线程

注意事项

  • 可使用toLower()函数统一转换邮箱地址后匹配,避免大小写问题
  • 关闭Include Attachments可提升检索性能

方案3:Outlook精确搜索语法

利用Outlook搜索的精确语法,直接缩小检索范围:
Get emails (V3)Search Query中输入:

(to:"user@example.com" OR cc:"user@example.com") AND folder:Inbox

该语法会强制匹配To/CC字段的精确邮箱地址,避免地址出现在邮件正文或附件中的误检索情况,同时限定仅搜索收件箱。

内容的提问来源于stack exchange,提问作者Basit Mirza

火山引擎 最新活动