Office365 API v2如何搜索授权账户发送的邮件?

How do I search emails sent from the authorized account with the Office365 API v2?

我正在使用 faraday 并设置了从授权帐户获取消息的设置。我抓取传入的消息没有问题,但是当我去抓取已发送的消息时,当我知道该帐户已发送消息时,我得到一个空的响应。

基本上,我需要的是检索用户已发送的电子邮件列表。

这是我正在做的事情:

from_conn = Faraday.new(:url => "https://outlook.office.com") do |faraday|
    faraday.response :logger
    faraday.adapter Faraday.default_adapter
  end

# Then from:
from_response = from_conn.get do |request|
  request.url "/api/v2.0/Me/Messages?$search=%22from:#{user_email}%22&$select=SentDateTime,ToRecipients,From,Subject,Body"
  request.headers['Authorization'] = "Bearer #{token['token']}"
  request.headers['Accept'] = 'application/json'
  request.headers['X-AnchorMailbox'] = user_email
end

这是解析后的响应正文:

[
  [0] {
    "@odata.context" => "https://outlook.office.com/api/v2.0/$metadata#Me/Messages(SentDateTime,ToRecipients,From,Subject,Body)",
             "value" => []
  }
]

它正在生成 https://outlook.office.com/api/v2.0/Me/Messages?%24search=%22from%3Adr_dickdorkins%40outlook.com%22&%24select=SentDateTime%2CToRecipients%2CFrom%2CSubject%2CBody 的请求 URI。

我试过像这样在 SentItems 文件夹中搜索:

request.url "/api/v2.0/Me/Folders/SentItems$search=%22sender:#{user_email}%22"

但是我想到的搜索文件夹的任何排列都会产生此错误:

[0] {
    "error" => {
           "code" => "RequestBroker-ParseUri",
        "message" => "Resource not found for the segment 'Folders'."
    }
}

我不太确定还可以尝试什么 -- 感谢您的帮助!

根据文档,您上次尝试指定文件夹时使用的 URL 格式似乎不正确。摘自https://msdn.microsoft.com/en-us/office/office365/api/mail-rest-operations#get-a-message-collection-rest

GET https://outlook.office.com/api/v2.0/me/MailFolders/{folder_id}/messages

folder_id - string - The folder ID, or the Inbox, Drafts, SentItems, or DeletedItems well-known folder name, if you're getting messages from a specific folder. Specifying AllItems would return all messages from the entire mailbox

您应该尝试将此 url 更改为:

https://outlook.office.com/api/v2.0/me/MailFolders/SentItems/messages/?$select=SentDateTime,ToRecipients,From,Subject,Body 

(看起来好像它期待 MailFolders 资源名称而不是 Folders)此外,在排除请求问题之前由 faraday 构建,您应该使用 advanced rest client、curl 或其他允许您设置 headers 的 REST 客户端检查 api 返回的内容,然后将这些设置带到事物的 rails 端。