Microsoft Graph API为同一封邮件返回了不同的threadID

时间:2019-06-17 06:31:36

标签: microsoft-graph

在我们的应用程序中,我们调用Microsoft Graph API来获取电子邮件标题数据。 在首次调用api的过程中,我们收到了电子邮件的以下sessionId详细信息

{"conversationId":"AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ="}

几秒钟后,当我们对同一封电子邮件提出类似的请求时,我们收到了一个不同的sessionId

{"conversationId":"AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ="}

现在,这里的期望是sessionId的值应始终保持不变。 在上述情况下,返回的2个sessionId的唯一区别是将'+'替换为'_'

  • AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ=
  • AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ=

详细步骤:-

  • 已解析owa邮件dom以获取sessionId
      

    AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ=

  • 使用这个sessionId,我们调用MS Graph API并获取详细信息,包括我们作为主键存储在数据库中的messageId
  • 几分钟后,我们再次使用messageId进行了另一个MS Graph API调用,作为响应,我们获得了另一个对话ID
      

    AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ=

问题:-

+和_是否可以互换

1 个答案:

答案 0 :(得分:0)

您不应假定Exchange标识符在各个平台之间是可互换的。多年来,Exchange使用了大量的不同格式的标识符。这可能是这里问题的症结所在。

converting between them有一些机制,但是除非您别无选择,否则我通常不建议这样做。

我不确定为什么/如何解析OWS DOM,但坦率地说,我惊讶的是标识符如此接近而不是我认为它不能按预期运行。如果您想从OWA内的Graph中提取消息,则可以使用Outlook Web Add-in。外接程序框架包括一个convertToRestId方法,该方法返回可以与Microsoft Graph一起使用的标识符:

function getItemRestId() {
  if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') {
    // itemId is already REST-formatted
    return Office.context.mailbox.item.itemId;
  } else {
    // Convert to an item ID for API v2.0
    return Office.context.mailbox.convertToRestId(
      Office.context.mailbox.item.itemId,
      Office.MailboxEnums.RestVersion.v2_0
    );
  }
}

对于+_,这归结为编码格式。 Base64有多种风格。标准在标准Base64中,第62个字符为+,第63个字符为/。当您要在URL中使用Base64时会出现问题,因为+/是保留字符。要解决此问题,您需要Base64的URL安全变体。有几种这样的变体。最常见的是 base64url (在RFC 4648中定义),它将-换成第62位,_换成第63位。