【问题标题】:How do I search emails sent from the authorized account with the Office365 API v2?如何使用 Office365 API v2 搜索从授权帐户发送的电子邮件?
【发布时间】:2017-01-06 18:39:16
【问题描述】:

我正在使用法拉第,并设置了从授权帐户获取消息的设置。我可以毫无问题地抓取收到的消息,但是当我去抓取已发送的消息时,当我知道该帐户已发送消息时,我得到一个空响应。

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

这就是我正在做的事情:

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'."
    }
}

我不太确定还有什么可以尝试的——感谢任何帮助!

【问题讨论】:

    标签: ruby-on-rails office365 faraday


    【解决方案1】:

    根据文档,这看起来不像是在您上次尝试中指定文件夹的正确 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 - 字符串 - 文件夹 ID,或收件箱、草稿、SentItems 或 DeletedItems 众所周知的文件夹名称,如果您从特定文件夹接收邮件。指定 AllItems 将返回整个邮箱中的所有邮件

    您应该尝试将此网址更改为:

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

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

    【讨论】:

    • 就是这样!在我发布问题并且正要发布解决方案之后,我以真正的方式遇到了相同的解决方案。不过你绝对是对的,这一切都在文档中,我只需要更加努力地查看。
    • 它发生了 - 我认为有些人甚至声称在 SO 中发布一个问题只是为了找到多年前回答的同一个问题......他们自己。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2016-04-20
    相关资源
    最近更新 更多