Office365 什么是;邮箱信息过时“;从Microsofts Outlook邮件API返回时是什么意思?

Office365 什么是;邮箱信息过时“;从Microsofts Outlook邮件API返回时是什么意思?,office365,outlook-api,Office365,Outlook Api,我有一个与Microsoft Outlook帐户同步的应用程序。早在昨晚,它就工作得很好,但最近遇到了一个问题:每次调用API时,都会出现以下错误: {"error"=>{"code"=>"MailboxInfoStale", "message"=>"Mailbox info is stale."}} 我知道一个事实,我正在测试的邮箱没有过时,因为它在不到一个小时前被访问和使用过。这是我的密码: # Get the emails between the user and th

我有一个与Microsoft Outlook帐户同步的应用程序。早在昨晚,它就工作得很好,但最近遇到了一个问题:每次调用API时,都会出现以下错误:

{"error"=>{"code"=>"MailboxInfoStale", "message"=>"Mailbox info is stale."}}
我知道一个事实,我正在测试的邮箱没有过时,因为它在不到一个小时前被访问和使用过。这是我的密码:

# Get the emails between the user and the prospect
# We need to be aware of the user's MS email address, which is possible different than the one we have
# for them.

user_email = user_email || get_user_email(token, context)

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

  response = conn.get do |request|
    request.url "/api/v2.0/Me/Messages?$search=%22from:#{prospect_email}%22&$top=20"
    request.headers['Authorization'] = "Bearer #{token['token']}"
    request.headers['Accept'] = 'application/json'
    request.headers['X-AnchorMailbox'] = user_email
  end

  # Okay, this is great: MS tells us to JSON parse what they return, but whether or not they return valid JSON depends on the state of the
  # data that you request, so we'll force it by wrapping it in '[]'.
  parsed_response = JSON.parse("[#{response.body}]")

  if parsed_response[0]["value"].blank?
    # Returns an empty array because we're combining this method and #get_emails in API::ActivitiesController
    return []
  else
    messages = parsed_response[0]["value"]
  end
end

为什么MS会返回
MailboxInfoStale

我遇到了类似的问题,并删除了X-AnchorMailbox标题(该标题为我填充了错误的值)要解决此问题。

更改X-AnchorMailbox标题对我来说很有效。

必须将X-AnchorMailbox设置为连接到凭据的电子邮件地址,例如OAuth访问令牌。如果它们不同,您将得到此错误。当然,可以通过删除标头来修复此问题,但这可能会导致错误地访问错误的邮箱(例如,如果您有多个邮箱)