首页 > 解决方案 > Microsoft 图形 API - 空的 bccRecipients 列表

问题描述

这是场景:

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

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

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_address收到了从收到的所有三封电子邮件user_1_address。但是在电子邮件 user_2 被密件抄送时,bccRecipients列表是空的,它应该包含user_2_address:(

我已经看到有关从 Gmail 和密件抄送 Outlook 用户发送电子邮件的问题:

Microsoft 图形 API:空密件抄送字段

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

所以我的问题是:

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

谢谢!

标签: outlookmicrosoft-graph-apimicrosoft-graph-mailbcc

解决方案


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

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


推荐阅读