我在Microsoft Graph Explorer中使用var
Base64: String;
Strm: TIdMemoryBufferStream;
Binary: AnsiString;
begin
Base64 := ...; // encoded data
SetLength(Binary, (Length(Base64) div 4) * 3);
Strm := TIdMemoryBufferStream.Create(PAnsiChar(Binary), Length(Binary));
try
TIdDecoderMIME.DecodeStream(Base64, Strm);
SetLength(Binary, Strm.Size);
SetCodePage(PRawByteString(@Binary)^, 28591, False);
finally
Strm.Free;
end;
// use Binary as needed...
end;
来返回未读电子邮件的列表。我的目标是在我的网站上有一个简单的HUD,向任何登录用户显示他们在Outlook中等待他们的未读消息的数量。
问题是除了我的合法未读电子邮件之外,还会返回我的垃圾邮件文件夹中的所有未读电子邮件。我想过滤掉垃圾邮件,但图表并没有为我提供一种系统地为所有用户完成此操作的方法。
所有电子邮件都有https://graph.microsoft.com/v1.0/me/messages?$filter=isRead eq false
,图表说我的垃圾邮件文件夹中的电子邮件有parentFolderID
。这意味着我可以过滤掉自己的垃圾邮件,但这对我的其他用户没有帮助,因为他们每个用户的垃圾邮件都会有一个唯一的"parentFolderId": "AQMkAGFjOGFkNWM2LTcxMjQtND..."
。
我可以为自己创建一个规则,将垃圾邮件标记为已读,但我不能指望我的用户做这样的事情。
有关如何为所有用户过滤垃圾邮件的任何想法?
答案 0 :(得分:1)
我认为对图谱API的单一查询不会解决这个问题,但您可以通过一些逻辑进行多次调用来解决这个问题。
列出所有mailFolders
https://graph.microsoft.com/v1.0/me/mailFolders
找到“垃圾邮件”文件夹
var json = `
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('48d31887-5fad-4d73-a9f5-3c356e68a038')/mailFolders",
"value": [
{
"id": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEkAAA=",
"displayName": "Junk Email",
"parentFolderId": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEIAAA=",
"childFolderCount": 0,
"unreadItemCount": 0,
"totalItemCount": 0
}
]
}`
var obj = JSON.parse(json)
for(var folder in obj.value)
{
if (obj.value[folder].displayName == 'Junk Email')
{
document.write(obj.value[folder].id)
break
}
}
答案 1 :(得分:1)
为了从我的收件箱中获取未读邮件的数量,我最终使用了:
https://graph.microsoft.com/v1.0/me/mailFolders?$filter=displayName eq 'Inbox'
返回:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('ed313cf6-f369-45c6-94b2-48bbb3589788')/mailFolders",
"value": [
{
"id": "AAMkAGFjOGFkNWM2LTcxMjQtNDQ4My1iNjBlLTVhZmNiNTA3ZTcwNQAuAAAAAAAcAJPfHQ_aQputXsbIt-bZAQC5oqQhrW6CRI4cZpo9l5YaAA7BDDZpAAA=",
"displayName": "Inbox",
"parentFolderId": "AAMkAGFjOGFkNWM2LTcxMjQtNDQ4My1iNjBlLTVhZmNiNTA3ZTcwNQAuAAAAAAAcAJPfHQ_aQputXsbIt-bZAQC5oqQhrW6CRI4cZpo9l5YaAA7BDDZmAAA=",
"childFolderCount": 14,
的
"unreadItemCount": 1,
强>
"totalItemCount": 25
}
]
}
我之后的数据位于"unreadItemCount"
。感谢Shawn Tabrizi用/me/mailFolders
为我设置了正确的路径。
请注意,您目前无法通过parentFolderId过滤/me/messages
,因此如果您想从/me/messages
获取任何邮件内容,则需要运行Shawn Tabrizi建议的自定义过滤代码。
{
"error": {
"code": "ErrorInvalidProperty",
"message": "The property 'ParentFolderId' does not support filtering.",
"innerError": {
"request-id": "526bafdd-d8ac-47f2-be1f-656b3b93da35",
"date": "2017-10-11T15:45:33"
}
}
}
答案 2 :(得分:0)
您可以运行两个单独的查询来获取收件箱文件夹中的所有新电子邮件及其内容数据。
https://graph.microsoft.com/v1.0/me/mailFolders?$filter=displayName eq 'Inbox'
仅获取有关收件箱文件夹的详细信息。
$filter=displayName eq 'Inbox'
过滤displayName
等于(eq
)'收件箱'
返回:
`{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('9285d2c9-f210-45e1-b78e-d74ba3d5e186')/mailFolders",
"value": [
{
"id": "AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEMAAA=",
"displayName": "Inbox",
"parentFolderId": "AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEIAAA=",
"childFolderCount": 0,
"unreadItemCount": 1,
"totalItemCount": 0
}
]
}`
id
值才能构成第二个查询的一部分。 将&$count=true
添加到结尾以获取收件箱中未读电子邮件的数量:
第二次查询:
https://graph.microsoft.com/v1.0/me/mailFolders/{ Inbox id goes here }/messages?$filter=isRead eq false&$count=true
这会从收件箱文件夹中过滤未读(isRead eq false
),并返回类似:
`{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('9285d2c9-f210-45e1-b78e-d74ba3d5e186')/mailFolders('AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEMAAA%3D')/messages",
"@odata.count": 1,
"value": [
{
"@odata.etag": "W/\"CQAAABYAAACTj9cyjezTSYJYfMfg3p5fAACWjeF5\"",
"receivedDateTime": "2018-01-29T11:32:40Z",
"sentDateTime": "2018-01-29T11:32:37Z",
"subject": "New Mail",
"bodyPreview": "New email body for email preview",
"isRead": false,
"isDraft": false,
-- More properties are returned. Shortened response for brevity --
`
电子邮件内容数据通过value
加入。
通过odata.count
访问Inbox文件夹中未读电子邮件的数量。
请参阅Microsof Graph - List messages in a specified folder in the mailbox