在统一列表中使用 Microsoft Graph SDK 获取所有电子邮件 headers?
Getting ALL Email headers with Microsoft Graph SDK in a unified list?
我正在使用 Microsoft Graph 从特定帐户的收件箱中获取信息。该帐户有多个电子邮件别名。但是,即使在我 $select
查询 InternetMessageHeaders
属性 之后,它也不包括电子邮件发送到的别名。
我发现如果我也 select 并使用 singleValueExtendedProperties
扩展查询,我得到了我需要的东西,但现在我缺少一些存在的 header在 InternetMessageHeaders
。它还返回一大堆文本,似乎不太容易解析。如果我能以某种方式将这个文本块解析为 key:value 映射,我就可以合并这两个值并结束它,但我不知道这是否可行。我希望 multiValueExtendedProperties
可以实现,但我认为这不是它的预期用途。
我正在使用 Microsoft Graph 的 .NET SDK(目前使用的是 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;
}
Message.InternetMessageHeaders
有我需要的大部分 header,其余的在 Message.SingleValueExtendedProperties
,但没有简单的方法将两者合并为一个列表而不重复 headers.
我可以盲目地遍历 InternetMessageHeaders
并将 $"{Name}: {Value}"
附加到 SingleValueExtendedProperties
值,但我最终会得到重复的 header。我可以在追加之前在字符串中搜索密钥,但这感觉就像一个 hack。
是否有官方方法来使用 Microsoft Graph 的 SDK 获取每一个header?
谢谢,
编辑
这是一个比较 headers 的列表,以防有人对我用 headers 以 "ARC-*"
:
开头的意思感到好奇
这是我从 InternetMessageHeaders
以 JSON 格式返回的示例(来自 API):https://pastebin.com/Bdk35C5q
这是我从 SingleValueExtendedProperties
得到的纯文本:https://pastebin.com/N7c0JLB6
没有回答我问题的相关问题:
- 如何获取通过 singleValueExtendedProperties
使用的别名电子邮件 - 不包括以 ARC-*
开头的 header
Get message using Graph missing some InternetMessageHeaders - 再次通过 singleValueExtendedProperties
获取 header 的“完整”列表 - 同样,不包括以 [=26= 开头的 header ]
https://docs.microsoft.com/en-us/answers/questions/673767/how-to-read-all-internet-message-headers-of-an-ite.html - 问的正是我想问的,但从未得到回应。
原来 Outlook 与每封电子邮件 headers 不一致。所以,在这种情况下,singleValueExtendedProperties
实际上是我所需要的。
正如 Dmitry 指出的那样(感谢您的澄清),我没有意识到我要求的是我需要 MAPI 属性。
以防其他人在我发现的其他问题之前偶然发现这个问题,这是访问 MAPI 属性需要执行的操作:
API:
GET https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/messages/{id}?$expand=singleValueExtendedProperties($filter id eq 'String 0x007D')
SDK:
// Since `$select` only returns the properties you specify and the only way to get this property is with both `$select` and `$expand`, you have to manually select all the properties you want. Thanks, Microsoft.
var selectProperties =
"id,subject,receivedDateTime,sentDateTime,from,toRecipients,ccRecipients,bccRecipients," +
"replyTo,internetMessageHeaders,singleValueExtendedProperties,bodyPreview,body,hasAttachments," +
"sender,categories,parentFolderId,conversationId,conversationIndex,isDeliveryReceiptRequested," +
"isReadReceiptRequested,isRead,isDraft,webLink,inferenceClassification,flag";
// Get user's emails (Requires permission Mail.Read) -
var messagesRequest = await graphClient.
Users[AccountId] // Replace this with account ID
.Messages // All Emails (or specify specific email via ["emailId"]
.Request() // Create request w/ authorization & headers needed
.Select(selectProperties) // Select all the specified properties
.Expand("singleValueExtendedProperties($filter=id eq 'String 0x007D')") // Select MAPI property Transport Message Headers to get the original `To:` email
.Top(100) // Get emails in batches of 100 (default is 10)
.GetAsync();
有关 MAPI 个属性的完整列表,请参阅 this page. For the specific MAPI property used in this example, see this page。
Can you get PR_TRANSPORT_MESSAGE_HEADERS 0x007D from the .Net Microsoft Graph API?
我正在使用 Microsoft Graph 从特定帐户的收件箱中获取信息。该帐户有多个电子邮件别名。但是,即使在我 $select
查询 InternetMessageHeaders
属性 之后,它也不包括电子邮件发送到的别名。
我发现如果我也 select 并使用 singleValueExtendedProperties
扩展查询,我得到了我需要的东西,但现在我缺少一些存在的 header在 InternetMessageHeaders
。它还返回一大堆文本,似乎不太容易解析。如果我能以某种方式将这个文本块解析为 key:value 映射,我就可以合并这两个值并结束它,但我不知道这是否可行。我希望 multiValueExtendedProperties
可以实现,但我认为这不是它的预期用途。
我正在使用 Microsoft Graph 的 .NET SDK(目前使用的是 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;
}
Message.InternetMessageHeaders
有我需要的大部分 header,其余的在 Message.SingleValueExtendedProperties
,但没有简单的方法将两者合并为一个列表而不重复 headers.
我可以盲目地遍历 InternetMessageHeaders
并将 $"{Name}: {Value}"
附加到 SingleValueExtendedProperties
值,但我最终会得到重复的 header。我可以在追加之前在字符串中搜索密钥,但这感觉就像一个 hack。
是否有官方方法来使用 Microsoft Graph 的 SDK 获取每一个header?
谢谢,
编辑
这是一个比较 headers 的列表,以防有人对我用 headers 以 "ARC-*"
:
这是我从 InternetMessageHeaders
以 JSON 格式返回的示例(来自 API):https://pastebin.com/Bdk35C5q
这是我从 SingleValueExtendedProperties
得到的纯文本:https://pastebin.com/N7c0JLB6
没有回答我问题的相关问题:
singleValueExtendedProperties
使用的别名电子邮件 - 不包括以 ARC-*
Get message using Graph missing some InternetMessageHeaders - 再次通过 singleValueExtendedProperties
获取 header 的“完整”列表 - 同样,不包括以 [=26= 开头的 header ]
https://docs.microsoft.com/en-us/answers/questions/673767/how-to-read-all-internet-message-headers-of-an-ite.html - 问的正是我想问的,但从未得到回应。
原来 Outlook 与每封电子邮件 headers 不一致。所以,在这种情况下,singleValueExtendedProperties
实际上是我所需要的。
正如 Dmitry 指出的那样(感谢您的澄清),我没有意识到我要求的是我需要 MAPI 属性。
以防其他人在我发现的其他问题之前偶然发现这个问题,这是访问 MAPI 属性需要执行的操作:
API:
GET https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/messages/{id}?$expand=singleValueExtendedProperties($filter id eq 'String 0x007D')
SDK:
// Since `$select` only returns the properties you specify and the only way to get this property is with both `$select` and `$expand`, you have to manually select all the properties you want. Thanks, Microsoft.
var selectProperties =
"id,subject,receivedDateTime,sentDateTime,from,toRecipients,ccRecipients,bccRecipients," +
"replyTo,internetMessageHeaders,singleValueExtendedProperties,bodyPreview,body,hasAttachments," +
"sender,categories,parentFolderId,conversationId,conversationIndex,isDeliveryReceiptRequested," +
"isReadReceiptRequested,isRead,isDraft,webLink,inferenceClassification,flag";
// Get user's emails (Requires permission Mail.Read) -
var messagesRequest = await graphClient.
Users[AccountId] // Replace this with account ID
.Messages // All Emails (or specify specific email via ["emailId"]
.Request() // Create request w/ authorization & headers needed
.Select(selectProperties) // Select all the specified properties
.Expand("singleValueExtendedProperties($filter=id eq 'String 0x007D')") // Select MAPI property Transport Message Headers to get the original `To:` email
.Top(100) // Get emails in batches of 100 (default is 10)
.GetAsync();
有关 MAPI 个属性的完整列表,请参阅 this page. For the specific MAPI property used in this example, see this page。
Can you get PR_TRANSPORT_MESSAGE_HEADERS 0x007D from the .Net Microsoft Graph API?