Microsoft graph API - 空 bccRecipients 列表

Microsoft graph API - empty bccRecipients list

这是场景:

在同一个 Azure 租户中,我使用一个帐户 (user_1_address) 使用 outlook (o365) 向另一个帐户 (user_2_address) 发送电子邮件。 我发送了 3 封电子邮件,其中一封 user_2_address 被密件抄送,一封被抄送,另一封是收件人。

我正在使用 Microsoft graph API 获取特定时间范围内 user_2_address 收到的电子邮件列表,使用此查询:

https://graph.microsoft.com/v1.0/users/{<user_2_id>}/messages?$filter=
receivedDateTime ge <some date> and receivedDateTime lt <some other date> 
and isDraft eq false 
and sender/emailAddress/address ne '<user_2_address>'

我收到了 user_2_addressuser_1_address 收到的所有三封电子邮件。但是在电子邮件 user_2 被密件抄送时 bccRecipients 列表是空的,而它应该包含 user_2_address :(

我看到这个关于从 Gmail 和 BCC 向 Outlook 用户发送电子邮件的问题:

在那种情况下,bccRecipients 列表也是空的,但通过说从外部来源(在这种情况下是 Gmail)发送电子邮件时删除密件抄送来解决。对我而言,这不是外部来源 - 两个用户都在同一个租户中使用 outlook。

所以我的问题是:

  1. 这是期望的行为,还是错误?
  2. 现在,假设我正在使用上面的查询,其中我收到发件人不是 user_2_address 且不是草稿的所有电子邮件。我可以假设我收到的每封电子邮件 user_2_address 不在 ccRecipientstoRecipients 列表中 - 该电子邮件被密件抄送到 user_2_address?

谢谢!

  1. 消息中的 bcc 字段只是一个信封 (P1) 收件人,因此您应该始终期望它是空白的(无论租户内部的上下文真的没有什么区别)。与引用的其他 post 一样,如果它不是空白,它会破坏 RFC 和 BCC 的目的,唯一的例外是已发送的项目(它只是已发送消息的副本)

  2. 不,有很多情况会破坏该特定逻辑,例如转发的电子邮件是我想到的一种情况。您当然可以通过这种方式优化结果集,您可能想要检查的一件事是 X-MS-Exchange-Organization-Recipient-P2-Type: mail header 应该在内部到内部场景中设置(您需要查看在 PidTagTransportMessageHeaders extended 属性 看到它)