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 端。
我正在使用 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 端。