使用 Microsoft Graph SDK 在统一列表中获取所有电子邮件标头?

Cha*_*ver 1 c# microsoft-graph-sdks microsoft-graph-mail .net-5 microsoft-graph-api

我正在使用 Microsoft Graph 从特定帐户的收件箱获取信息。该帐户有多个电子邮件别名。但是,即使在我$select查询该InternetMessageHeaders属性后,它也不包含电子邮件发送到的别名。

我发现,如果我还使用 选择并扩展查询singleValueExtendedProperties,我会得到我需要的内容,但现在我丢失了 中存在的一些标头InternetMessageHeaders。它还以一大堆文本的形式返回,看起来不太直接而难以解析。如果我能以某种方式将这个文本块解析为键:值映射,我可以合并这两个值并收工,但我不知道这是否可能。我希望它可以用multiValueExtendedProperties,但我不认为这是它的预期用途。

我正在使用 Microsoft Graph 的 SDK for .NET(当前使用 4.0.0),这是我迄今为止获取所有电子邮件的方法:

public async Task<List<Message>> PollEmails() {
    var completeList = new List<Message>();

    var messagesRequest = await graphClient.
        Users[GraphOptions.AccountId]                                               // Email account ID
            .Messages                                                               // All Emails
            .Request()                                                              // Create request w/ authorization & headers needed
            .Select("internetMessageHeaders,singleValueExtendedProperties")         // Additionally, select the email's headers
            .Expand("singleValueExtendedProperties($filter=id eq 'String 0x007D')") // Without this filter, we cannot tell which email alias was used in the To: field
            .Top(100)                                                               // Get emails in batches of 100 (default is 10)
            .GetAsync();                                                            // Run request and await results

    completeList.AddRange(messagesRequest);

    // Results are paginated, so keep getting all the results until there are no more pages
    while (messagesRequest.NextPageRequest != null) {
        messagesRequest = await messagesRequest.NextPageRequest.GetAsync();
        completeList.AddRange(messagesRequest);
    }

    return completeList;
}
Run Code Online (Sandbox Code Playgroud)

Message.InternetMessageHeaders具有我需要的大部分标头,其余的都在 中Message.SingleValueExtendedProperties,但是没有简单的方法可以将两者合并到一个列表中而不产生重复的标头。

我可以盲目地循环InternetMessageHeaders并附$"{Name}: {Value}"加到SingleValueExtendedProperties值,但最终会得到重复的标头。我可以在附加字符串之前搜索密钥,但这感觉就像是黑客攻击。

是否有一种官方方法可以使用 Microsoft Graph 的 SDK获取每个标头?

谢谢你,

编辑

这是一个比较标题的列表,以防有人好奇我以 开头的标题的含义"ARC-*"

InternetMessageHeaders这是我以JSON 格式返回的示例(来自 API) : https://pastebin.com/Bdk35C5q

SingleValueExtendedProperties这是我以纯文本形式返回的内容: https ://pastebin.com/N7c0JLB6


无法回答我的问题的相关问题:

Microsoft Graph:如何从电子邮件中获取别名?- 如何获取通过使用的别名电子邮件singleValueExtendedProperties- 不包括以以下开头的标头ARC-*

使用 Graph 获取消息缺少一些 InternetMessageHeaders - 再次通过 - 再次获取标头的“完整”列表singleValueExtendedProperties ,不包括以以下开头的标头ARC-*

https://learn.microsoft.com/en-us/answers/questions/673767/how-to-read-all-internet-message-headers-of-an-ite.html - 准确询问我要问的内容,但是从未得到回应。

Cha*_*ver 5

结果 Outlook 与每封电子邮件的标头不一致。所以,在这种情况下,这singleValueExtendedProperties实际上是我所需要的。

我没有意识到我要求的是我需要 MAPI 属性,正如 Dmitry 指出的那样(感谢您的澄清)。

如果其他人在我发现其他问题之前偶然发现这个问题,您需要执行以下操作来访问 MAPI 属性:

应用程序编程接口:

GET https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/messages/{id}?$expand=singleValueExtendedProperties($filter id eq 'String 0x007D')
Run Code Online (Sandbox Code Playgroud)

软件开发工具包:

GET https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/messages/{id}?$expand=singleValueExtendedProperties($filter id eq 'String 0x007D')
Run Code Online (Sandbox Code Playgroud)

有关 MAPI 属性的完整列表,请参阅此页。有关此示例中使用的特定 MAPI 属性,请参阅此页面

您可以从 .Net Microsoft Graph API 获取 PR_TRANSPORT_MESSAGE_HEADERS 0x007D 吗?